audio-device-windows-sys 0.1.0-alpha.1

audio-device system bindings for Windows APIs
Documentation
// This file was generated by the `windows` crate - do not edit by hand!

#[allow(
    unused_variables,
    non_upper_case_globals,
    non_snake_case,
    unused_unsafe,
    non_camel_case_types,
    dead_code,
    clippy::all
)]
pub mod Windows {
    #[allow(
        unused_variables,
        non_upper_case_globals,
        non_snake_case,
        unused_unsafe,
        non_camel_case_types,
        dead_code,
        clippy::all
    )]
    pub mod Win32 {
        #[allow(
            unused_variables,
            non_upper_case_globals,
            non_snake_case,
            unused_unsafe,
            non_camel_case_types,
            dead_code,
            clippy::all
        )]
        pub mod ApplicationInstallationAndServicing {
            pub const NTDDI_WIN7: u32 = 100728832u32;
        }
        #[allow(
            unused_variables,
            non_upper_case_globals,
            non_snake_case,
            unused_unsafe,
            non_camel_case_types,
            dead_code,
            clippy::all
        )]
        pub mod Audio {
            pub const APOERR_ALREADY_INITIALIZED: ::windows::HRESULT =
                ::windows::HRESULT(-2005073919i32 as _);
            pub const APOERR_ALREADY_UNLOCKED: ::windows::HRESULT =
                ::windows::HRESULT(-2005073914i32 as _);
            pub const APOERR_APO_LOCKED: ::windows::HRESULT =
                ::windows::HRESULT(-2005073910i32 as _);
            pub const APOERR_BUFFERS_OVERLAP: ::windows::HRESULT =
                ::windows::HRESULT(-2005073915i32 as _);
            pub const APOERR_FORMAT_NOT_SUPPORTED: ::windows::HRESULT =
                ::windows::HRESULT(-2005073917i32 as _);
            pub const APOERR_INVALID_APO_CLSID: ::windows::HRESULT =
                ::windows::HRESULT(-2005073916i32 as _);
            pub const APOERR_INVALID_COEFFCOUNT: ::windows::HRESULT =
                ::windows::HRESULT(-2005073909i32 as _);
            pub const APOERR_INVALID_COEFFICIENT: ::windows::HRESULT =
                ::windows::HRESULT(-2005073908i32 as _);
            pub const APOERR_INVALID_CONNECTION_FORMAT: ::windows::HRESULT =
                ::windows::HRESULT(-2005073911i32 as _);
            pub const APOERR_INVALID_CURVE_PARAM: ::windows::HRESULT =
                ::windows::HRESULT(-2005073907i32 as _);
            pub const APOERR_INVALID_OUTPUT_MAXFRAMECOUNT: ::windows::HRESULT =
                ::windows::HRESULT(-2005073912i32 as _);
            pub const APOERR_NOT_INITIALIZED: ::windows::HRESULT =
                ::windows::HRESULT(-2005073918i32 as _);
            pub const APOERR_NUM_CONNECTIONS_INVALID: ::windows::HRESULT =
                ::windows::HRESULT(-2005073913i32 as _);
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct APOInitBaseStruct {
                pub cbSize: u32,
                pub clsid: ::windows::Guid,
            }
            impl APOInitBaseStruct {}
            impl ::std::default::Default for APOInitBaseStruct {
                fn default() -> Self {
                    Self {
                        cbSize: 0,
                        clsid: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for APOInitBaseStruct {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("APOInitBaseStruct")
                        .field("cbSize", &format_args!("{:?}", self.cbSize))
                        .field("clsid", &format_args!("{:?}", self.clsid))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for APOInitBaseStruct {
                fn eq(&self, other: &Self) -> bool {
                    self.cbSize == other.cbSize && self.clsid == other.clsid
                }
            }
            impl ::std::cmp::Eq for APOInitBaseStruct {}
            unsafe impl ::windows::Abi for APOInitBaseStruct {
                type Abi = Self;
            }
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IPropertyStore(::windows::IUnknown);
            impl IPropertyStore {}
            unsafe impl ::windows::Interface for IPropertyStore {
                type Vtable = IPropertyStore_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2288881387,
                    36082,
                    17478,
                    [141, 2, 205, 186, 29, 189, 207, 153],
                );
            }
            impl IPropertyStore {
                pub unsafe fn GetCount(&self, cprops: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(cprops),
                    )
                }
                pub unsafe fn GetAt(
                    &self,
                    iprop: u32,
                    pkey: *mut super::WindowsPropertiesSystem::PROPERTYKEY,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(iprop),
                        ::std::mem::transmute(pkey),
                    )
                }
                pub unsafe fn GetValue(
                    &self,
                    key: *const super::WindowsPropertiesSystem::PROPERTYKEY,
                    pv: *mut super::StructuredStorage::PROPVARIANT,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(key),
                        ::std::mem::transmute(pv),
                    )
                }
                pub unsafe fn SetValue(
                    &self,
                    key: *const super::WindowsPropertiesSystem::PROPERTYKEY,
                    propvar: *const super::StructuredStorage::PROPVARIANT,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(key),
                        ::std::mem::transmute(propvar),
                    )
                }
                pub unsafe fn Commit(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(::windows::Abi::abi(self))
                }
            }
            impl ::std::convert::From<IPropertyStore> for ::windows::IUnknown {
                fn from(value: IPropertyStore) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IPropertyStore> for ::windows::IUnknown {
                fn from(value: &IPropertyStore) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IPropertyStore {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IPropertyStore {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IPropertyStore_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    cprops: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iprop: u32,
                    pkey: *mut super::WindowsPropertiesSystem::PROPERTYKEY,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    key: *const super::WindowsPropertiesSystem::PROPERTYKEY,
                    pv: *mut super::StructuredStorage::PROPVARIANT_abi,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    key: *const super::WindowsPropertiesSystem::PROPERTYKEY,
                    propvar: *const super::StructuredStorage::PROPVARIANT_abi,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
            );
            #[repr(C)]
            #[derive(:: std :: clone :: Clone)]
            pub struct APOInitSystemEffects {
                pub APOInit: APOInitBaseStruct,
                pub pAPOEndpointProperties: ::std::option::Option<IPropertyStore>,
                pub pAPOSystemEffectsProperties: ::std::option::Option<IPropertyStore>,
                pub pReserved: *mut ::std::ffi::c_void,
                pub pDeviceCollection: ::std::option::Option<super::CoreAudio::IMMDeviceCollection>,
            }
            impl APOInitSystemEffects {}
            impl ::std::default::Default for APOInitSystemEffects {
                fn default() -> Self {
                    Self {
                        APOInit: ::std::default::Default::default(),
                        pAPOEndpointProperties: ::std::default::Default::default(),
                        pAPOSystemEffectsProperties: ::std::default::Default::default(),
                        pReserved: ::std::ptr::null_mut(),
                        pDeviceCollection: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for APOInitSystemEffects {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("APOInitSystemEffects")
                        .field("APOInit", &format_args!("{:?}", self.APOInit))
                        .field(
                            "pAPOEndpointProperties",
                            &format_args!("{:?}", self.pAPOEndpointProperties),
                        )
                        .field(
                            "pAPOSystemEffectsProperties",
                            &format_args!("{:?}", self.pAPOSystemEffectsProperties),
                        )
                        .field("pReserved", &format_args!("{:?}", self.pReserved))
                        .field(
                            "pDeviceCollection",
                            &format_args!("{:?}", self.pDeviceCollection),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for APOInitSystemEffects {
                fn eq(&self, other: &Self) -> bool {
                    self.APOInit == other.APOInit
                        && self.pAPOEndpointProperties == other.pAPOEndpointProperties
                        && self.pAPOSystemEffectsProperties == other.pAPOSystemEffectsProperties
                        && self.pReserved == other.pReserved
                        && self.pDeviceCollection == other.pDeviceCollection
                }
            }
            impl ::std::cmp::Eq for APOInitSystemEffects {}
            #[repr(C)]
            #[doc(hidden)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct APOInitSystemEffects_abi {
                pub APOInit: APOInitBaseStruct,
                pub pAPOEndpointProperties: ::windows::RawPtr,
                pub pAPOSystemEffectsProperties: ::windows::RawPtr,
                pub pReserved: *mut ::std::ffi::c_void,
                pub pDeviceCollection: ::windows::RawPtr,
            }
            unsafe impl ::windows::Abi for APOInitSystemEffects {
                type Abi = APOInitSystemEffects_abi;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone)]
            pub struct APOInitSystemEffects2 {
                pub APOInit: APOInitBaseStruct,
                pub pAPOEndpointProperties: ::std::option::Option<IPropertyStore>,
                pub pAPOSystemEffectsProperties: ::std::option::Option<IPropertyStore>,
                pub pReserved: *mut ::std::ffi::c_void,
                pub pDeviceCollection: ::std::option::Option<super::CoreAudio::IMMDeviceCollection>,
                pub nSoftwareIoDeviceInCollection: u32,
                pub nSoftwareIoConnectorIndex: u32,
                pub AudioProcessingMode: ::windows::Guid,
                pub InitializeForDiscoveryOnly: super::SystemServices::BOOL,
            }
            impl APOInitSystemEffects2 {}
            impl ::std::default::Default for APOInitSystemEffects2 {
                fn default() -> Self {
                    Self {
                        APOInit: ::std::default::Default::default(),
                        pAPOEndpointProperties: ::std::default::Default::default(),
                        pAPOSystemEffectsProperties: ::std::default::Default::default(),
                        pReserved: ::std::ptr::null_mut(),
                        pDeviceCollection: ::std::default::Default::default(),
                        nSoftwareIoDeviceInCollection: 0,
                        nSoftwareIoConnectorIndex: 0,
                        AudioProcessingMode: ::std::default::Default::default(),
                        InitializeForDiscoveryOnly: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for APOInitSystemEffects2 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("APOInitSystemEffects2")
                        .field("APOInit", &format_args!("{:?}", self.APOInit))
                        .field(
                            "pAPOEndpointProperties",
                            &format_args!("{:?}", self.pAPOEndpointProperties),
                        )
                        .field(
                            "pAPOSystemEffectsProperties",
                            &format_args!("{:?}", self.pAPOSystemEffectsProperties),
                        )
                        .field("pReserved", &format_args!("{:?}", self.pReserved))
                        .field(
                            "pDeviceCollection",
                            &format_args!("{:?}", self.pDeviceCollection),
                        )
                        .field(
                            "nSoftwareIoDeviceInCollection",
                            &format_args!("{:?}", self.nSoftwareIoDeviceInCollection),
                        )
                        .field(
                            "nSoftwareIoConnectorIndex",
                            &format_args!("{:?}", self.nSoftwareIoConnectorIndex),
                        )
                        .field(
                            "AudioProcessingMode",
                            &format_args!("{:?}", self.AudioProcessingMode),
                        )
                        .field(
                            "InitializeForDiscoveryOnly",
                            &format_args!("{:?}", self.InitializeForDiscoveryOnly),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for APOInitSystemEffects2 {
                fn eq(&self, other: &Self) -> bool {
                    self.APOInit == other.APOInit
                        && self.pAPOEndpointProperties == other.pAPOEndpointProperties
                        && self.pAPOSystemEffectsProperties == other.pAPOSystemEffectsProperties
                        && self.pReserved == other.pReserved
                        && self.pDeviceCollection == other.pDeviceCollection
                        && self.nSoftwareIoDeviceInCollection == other.nSoftwareIoDeviceInCollection
                        && self.nSoftwareIoConnectorIndex == other.nSoftwareIoConnectorIndex
                        && self.AudioProcessingMode == other.AudioProcessingMode
                        && self.InitializeForDiscoveryOnly == other.InitializeForDiscoveryOnly
                }
            }
            impl ::std::cmp::Eq for APOInitSystemEffects2 {}
            #[repr(C)]
            #[doc(hidden)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct APOInitSystemEffects2_abi {
                pub APOInit: APOInitBaseStruct,
                pub pAPOEndpointProperties: ::windows::RawPtr,
                pub pAPOSystemEffectsProperties: ::windows::RawPtr,
                pub pReserved: *mut ::std::ffi::c_void,
                pub pDeviceCollection: ::windows::RawPtr,
                pub nSoftwareIoDeviceInCollection: u32,
                pub nSoftwareIoConnectorIndex: u32,
                pub AudioProcessingMode: ::windows::Guid,
                pub InitializeForDiscoveryOnly: super::SystemServices::BOOL,
            }
            unsafe impl ::windows::Abi for APOInitSystemEffects2 {
                type Abi = APOInitSystemEffects2_abi;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct APO_CONNECTION_BUFFER_TYPE(pub i32);
            impl APO_CONNECTION_BUFFER_TYPE {
                pub const APO_CONNECTION_BUFFER_TYPE_ALLOCATED: Self = Self(0i32);
                pub const APO_CONNECTION_BUFFER_TYPE_EXTERNAL: Self = Self(1i32);
                pub const APO_CONNECTION_BUFFER_TYPE_DEPENDANT: Self = Self(2i32);
            }
            impl ::std::convert::From<i32> for APO_CONNECTION_BUFFER_TYPE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for APO_CONNECTION_BUFFER_TYPE {
                type Abi = Self;
            }
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioMediaType(::windows::IUnknown);
            impl IAudioMediaType {}
            unsafe impl ::windows::Interface for IAudioMediaType {
                type Vtable = IAudioMediaType_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    1318682483,
                    46879,
                    18328,
                    [135, 59, 237, 125, 252, 241, 91, 77],
                );
            }
            impl IAudioMediaType {
                pub unsafe fn IsCompressedFormat(
                    &self,
                    pfcompressed: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pfcompressed),
                    )
                }
                pub unsafe fn IsEqual<'a>(
                    &self,
                    piaudiotype: impl ::windows::IntoParam<'a, IAudioMediaType>,
                    pdwflags: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        piaudiotype.into_param().abi(),
                        ::std::mem::transmute(pdwflags),
                    )
                }
                pub unsafe fn GetAudioFormat(&self) -> *mut super::Multimedia::WAVEFORMATEX {
                    (::windows::Interface::vtable(self).5)(::windows::Abi::abi(self))
                }
                pub unsafe fn GetUncompressedAudioFormat(
                    &self,
                    puncompressedaudioformat: *mut UNCOMPRESSEDAUDIOFORMAT,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(puncompressedaudioformat),
                    )
                }
            }
            impl ::std::convert::From<IAudioMediaType> for ::windows::IUnknown {
                fn from(value: IAudioMediaType) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioMediaType> for ::windows::IUnknown {
                fn from(value: &IAudioMediaType) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioMediaType {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioMediaType {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioMediaType_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pfcompressed: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    piaudiotype: ::windows::RawPtr,
                    pdwflags: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                )
                    -> *mut super::Multimedia::WAVEFORMATEX,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    puncompressedaudioformat: *mut UNCOMPRESSEDAUDIOFORMAT,
                ) -> ::windows::HRESULT,
            );
            #[repr(C)]
            #[derive(:: std :: clone :: Clone)]
            pub struct APO_CONNECTION_DESCRIPTOR {
                pub Type: APO_CONNECTION_BUFFER_TYPE,
                pub pBuffer: usize,
                pub u32MaxFrameCount: u32,
                pub pFormat: ::std::option::Option<IAudioMediaType>,
                pub u32Signature: u32,
            }
            impl APO_CONNECTION_DESCRIPTOR {}
            impl ::std::default::Default for APO_CONNECTION_DESCRIPTOR {
                fn default() -> Self {
                    Self {
                        Type: ::std::default::Default::default(),
                        pBuffer: 0,
                        u32MaxFrameCount: 0,
                        pFormat: ::std::default::Default::default(),
                        u32Signature: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for APO_CONNECTION_DESCRIPTOR {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("APO_CONNECTION_DESCRIPTOR")
                        .field("Type", &format_args!("{:?}", self.Type))
                        .field("pBuffer", &format_args!("{:?}", self.pBuffer))
                        .field(
                            "u32MaxFrameCount",
                            &format_args!("{:?}", self.u32MaxFrameCount),
                        )
                        .field("pFormat", &format_args!("{:?}", self.pFormat))
                        .field("u32Signature", &format_args!("{:?}", self.u32Signature))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for APO_CONNECTION_DESCRIPTOR {
                fn eq(&self, other: &Self) -> bool {
                    self.Type == other.Type
                        && self.pBuffer == other.pBuffer
                        && self.u32MaxFrameCount == other.u32MaxFrameCount
                        && self.pFormat == other.pFormat
                        && self.u32Signature == other.u32Signature
                }
            }
            impl ::std::cmp::Eq for APO_CONNECTION_DESCRIPTOR {}
            #[repr(C)]
            #[doc(hidden)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct APO_CONNECTION_DESCRIPTOR_abi {
                pub Type: APO_CONNECTION_BUFFER_TYPE,
                pub pBuffer: usize,
                pub u32MaxFrameCount: u32,
                pub pFormat: ::windows::RawPtr,
                pub u32Signature: u32,
            }
            unsafe impl ::windows::Abi for APO_CONNECTION_DESCRIPTOR {
                type Abi = APO_CONNECTION_DESCRIPTOR_abi;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct APO_FLAG(pub i32);
            impl APO_FLAG {
                pub const APO_FLAG_NONE: Self = Self(0i32);
                pub const APO_FLAG_INPLACE: Self = Self(1i32);
                pub const APO_FLAG_SAMPLESPERFRAME_MUST_MATCH: Self = Self(2i32);
                pub const APO_FLAG_FRAMESPERSECOND_MUST_MATCH: Self = Self(4i32);
                pub const APO_FLAG_BITSPERSAMPLE_MUST_MATCH: Self = Self(8i32);
                pub const APO_FLAG_MIXER: Self = Self(16i32);
                pub const APO_FLAG_DEFAULT: Self = Self(14i32);
            }
            impl ::std::convert::From<i32> for APO_FLAG {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for APO_FLAG {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct APO_REG_PROPERTIES {
                pub clsid: ::windows::Guid,
                pub Flags: APO_FLAG,
                pub szFriendlyName: [u16; 256],
                pub szCopyrightInfo: [u16; 256],
                pub u32MajorVersion: u32,
                pub u32MinorVersion: u32,
                pub u32MinInputConnections: u32,
                pub u32MaxInputConnections: u32,
                pub u32MinOutputConnections: u32,
                pub u32MaxOutputConnections: u32,
                pub u32MaxInstances: u32,
                pub u32NumAPOInterfaces: u32,
                pub iidAPOInterfaceList: [::windows::Guid; 1],
            }
            impl APO_REG_PROPERTIES {}
            impl ::std::default::Default for APO_REG_PROPERTIES {
                fn default() -> Self {
                    Self {
                        clsid: ::std::default::Default::default(),
                        Flags: ::std::default::Default::default(),
                        szFriendlyName: [0; 256],
                        szCopyrightInfo: [0; 256],
                        u32MajorVersion: 0,
                        u32MinorVersion: 0,
                        u32MinInputConnections: 0,
                        u32MaxInputConnections: 0,
                        u32MinOutputConnections: 0,
                        u32MaxOutputConnections: 0,
                        u32MaxInstances: 0,
                        u32NumAPOInterfaces: 0,
                        iidAPOInterfaceList: [::std::default::Default::default(); 1],
                    }
                }
            }
            impl ::std::fmt::Debug for APO_REG_PROPERTIES {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("APO_REG_PROPERTIES")
                        .field("clsid", &format_args!("{:?}", self.clsid))
                        .field("Flags", &format_args!("{:?}", self.Flags))
                        .field("szFriendlyName", &format_args!("{:?}", self.szFriendlyName))
                        .field(
                            "szCopyrightInfo",
                            &format_args!("{:?}", self.szCopyrightInfo),
                        )
                        .field(
                            "u32MajorVersion",
                            &format_args!("{:?}", self.u32MajorVersion),
                        )
                        .field(
                            "u32MinorVersion",
                            &format_args!("{:?}", self.u32MinorVersion),
                        )
                        .field(
                            "u32MinInputConnections",
                            &format_args!("{:?}", self.u32MinInputConnections),
                        )
                        .field(
                            "u32MaxInputConnections",
                            &format_args!("{:?}", self.u32MaxInputConnections),
                        )
                        .field(
                            "u32MinOutputConnections",
                            &format_args!("{:?}", self.u32MinOutputConnections),
                        )
                        .field(
                            "u32MaxOutputConnections",
                            &format_args!("{:?}", self.u32MaxOutputConnections),
                        )
                        .field(
                            "u32MaxInstances",
                            &format_args!("{:?}", self.u32MaxInstances),
                        )
                        .field(
                            "u32NumAPOInterfaces",
                            &format_args!("{:?}", self.u32NumAPOInterfaces),
                        )
                        .field(
                            "iidAPOInterfaceList",
                            &format_args!("{:?}", self.iidAPOInterfaceList),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for APO_REG_PROPERTIES {
                fn eq(&self, other: &Self) -> bool {
                    self.clsid == other.clsid
                        && self.Flags == other.Flags
                        && self.szFriendlyName == other.szFriendlyName
                        && self.szCopyrightInfo == other.szCopyrightInfo
                        && self.u32MajorVersion == other.u32MajorVersion
                        && self.u32MinorVersion == other.u32MinorVersion
                        && self.u32MinInputConnections == other.u32MinInputConnections
                        && self.u32MaxInputConnections == other.u32MaxInputConnections
                        && self.u32MinOutputConnections == other.u32MinOutputConnections
                        && self.u32MaxOutputConnections == other.u32MaxOutputConnections
                        && self.u32MaxInstances == other.u32MaxInstances
                        && self.u32NumAPOInterfaces == other.u32NumAPOInterfaces
                        && self.iidAPOInterfaceList == other.iidAPOInterfaceList
                }
            }
            impl ::std::cmp::Eq for APO_REG_PROPERTIES {}
            unsafe impl ::windows::Abi for APO_REG_PROPERTIES {
                type Abi = Self;
            }
            pub const AUDIOMEDIATYPE_EQUAL_FORMAT_DATA: u32 = 4u32;
            pub const AUDIOMEDIATYPE_EQUAL_FORMAT_TYPES: u32 = 2u32;
            pub const AUDIOMEDIATYPE_EQUAL_FORMAT_USER_DATA: u32 = 8u32;
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct AUDIO_FLOW_TYPE(pub i32);
            impl AUDIO_FLOW_TYPE {
                pub const AUDIO_FLOW_PULL: Self = Self(0i32);
                pub const AUDIO_FLOW_PUSH: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for AUDIO_FLOW_TYPE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for AUDIO_FLOW_TYPE {
                type Abi = Self;
            }
            pub const AUDIO_MAX_CHANNELS: u32 = 4096u32;
            pub const AUDIO_MAX_FRAMERATE: f64 = 384000f64;
            pub const AUDIO_MIN_CHANNELS: u32 = 1u32;
            pub const AUDIO_MIN_FRAMERATE: f64 = 10f64;
            pub struct Apis {}
            impl Apis {}
            impl ::windows::RuntimeName for Apis {
                const NAME: &'static str = "Windows.Win32.Audio.Apis";
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone)]
            pub struct AudioFXExtensionParams {
                pub AddPageParam: super::WindowsAndMessaging::LPARAM,
                pub pwstrEndpointID: super::SystemServices::PWSTR,
                pub pFxProperties: ::std::option::Option<IPropertyStore>,
            }
            impl AudioFXExtensionParams {}
            impl ::std::default::Default for AudioFXExtensionParams {
                fn default() -> Self {
                    Self {
                        AddPageParam: ::std::default::Default::default(),
                        pwstrEndpointID: ::std::default::Default::default(),
                        pFxProperties: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for AudioFXExtensionParams {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("AudioFXExtensionParams")
                        .field("AddPageParam", &format_args!("{:?}", self.AddPageParam))
                        .field(
                            "pwstrEndpointID",
                            &format_args!("{:?}", self.pwstrEndpointID),
                        )
                        .field("pFxProperties", &format_args!("{:?}", self.pFxProperties))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for AudioFXExtensionParams {
                fn eq(&self, other: &Self) -> bool {
                    self.AddPageParam == other.AddPageParam
                        && self.pwstrEndpointID == other.pwstrEndpointID
                        && self.pFxProperties == other.pFxProperties
                }
            }
            impl ::std::cmp::Eq for AudioFXExtensionParams {}
            #[repr(C)]
            #[doc(hidden)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct AudioFXExtensionParams_abi {
                pub AddPageParam: super::WindowsAndMessaging::LPARAM,
                pub pwstrEndpointID: super::SystemServices::PWSTR,
                pub pFxProperties: ::windows::RawPtr,
            }
            unsafe impl ::windows::Abi for AudioFXExtensionParams {
                type Abi = AudioFXExtensionParams_abi;
            }
            pub const CLSID_DirectMusic: ::windows::Guid = ::windows::Guid::from_values(
                1667997456,
                3197,
                4561,
                [149, 178, 0, 32, 175, 220, 116, 33],
            );
            pub const CLSID_DirectMusicCollection: ::windows::Guid = ::windows::Guid::from_values(
                1209005232,
                10418,
                4561,
                [190, 247, 0, 192, 79, 191, 143, 239],
            );
            pub const CLSID_DirectMusicSynth: ::windows::Guid = ::windows::Guid::from_values(
                1489155280,
                18151,
                4561,
                [137, 172, 0, 160, 201, 5, 65, 41],
            );
            pub const CLSID_DirectMusicSynthSink: ::windows::Guid = ::windows::Guid::from_values(
                2931916003,
                42260,
                4561,
                [175, 166, 0, 170, 0, 36, 216, 182],
            );
            pub const CLSID_DirectSound: ::windows::Guid = ::windows::Guid::from_values(
                1205131590,
                25320,
                4559,
                [147, 188, 68, 69, 83, 84, 0, 0],
            );
            pub const CLSID_DirectSound8: ::windows::Guid = ::windows::Guid::from_values(
                956419135,
                33973,
                20388,
                [186, 53, 170, 129, 114, 184, 160, 155],
            );
            pub const CLSID_DirectSoundCapture: ::windows::Guid = ::windows::Guid::from_values(
                2954954624,
                35277,
                4560,
                [175, 8, 0, 160, 201, 37, 205, 22],
            );
            pub const CLSID_DirectSoundCapture8: ::windows::Guid = ::windows::Guid::from_values(
                3837570067,
                32665,
                18696,
                [154, 142, 116, 227, 191, 36, 182, 225],
            );
            pub const CLSID_DirectSoundFullDuplex: ::windows::Guid = ::windows::Guid::from_values(
                4272173068,
                31065,
                16711,
                [178, 106, 35, 119, 185, 231, 169, 29],
            );
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct CONNECTION {
                pub usSource: u16,
                pub usControl: u16,
                pub usDestination: u16,
                pub usTransform: u16,
                pub lScale: i32,
            }
            impl CONNECTION {}
            impl ::std::default::Default for CONNECTION {
                fn default() -> Self {
                    Self {
                        usSource: 0,
                        usControl: 0,
                        usDestination: 0,
                        usTransform: 0,
                        lScale: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for CONNECTION {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("CONNECTION")
                        .field("usSource", &format_args!("{:?}", self.usSource))
                        .field("usControl", &format_args!("{:?}", self.usControl))
                        .field("usDestination", &format_args!("{:?}", self.usDestination))
                        .field("usTransform", &format_args!("{:?}", self.usTransform))
                        .field("lScale", &format_args!("{:?}", self.lScale))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for CONNECTION {
                fn eq(&self, other: &Self) -> bool {
                    self.usSource == other.usSource
                        && self.usControl == other.usControl
                        && self.usDestination == other.usDestination
                        && self.usTransform == other.usTransform
                        && self.lScale == other.lScale
                }
            }
            impl ::std::cmp::Eq for CONNECTION {}
            unsafe impl ::windows::Abi for CONNECTION {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct CONNECTIONLIST {
                pub cbSize: u32,
                pub cConnections: u32,
            }
            impl CONNECTIONLIST {}
            impl ::std::default::Default for CONNECTIONLIST {
                fn default() -> Self {
                    Self {
                        cbSize: 0,
                        cConnections: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for CONNECTIONLIST {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("CONNECTIONLIST")
                        .field("cbSize", &format_args!("{:?}", self.cbSize))
                        .field("cConnections", &format_args!("{:?}", self.cConnections))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for CONNECTIONLIST {
                fn eq(&self, other: &Self) -> bool {
                    self.cbSize == other.cbSize && self.cConnections == other.cConnections
                }
            }
            impl ::std::cmp::Eq for CONNECTIONLIST {}
            unsafe impl ::windows::Abi for CONNECTIONLIST {
                type Abi = Self;
            }
            pub const CONN_DST_ATTENUATION: u32 = 1u32;
            pub const CONN_DST_EG1_ATTACKTIME: u32 = 518u32;
            pub const CONN_DST_EG1_DECAYTIME: u32 = 519u32;
            pub const CONN_DST_EG1_RELEASETIME: u32 = 521u32;
            pub const CONN_DST_EG1_SUSTAINLEVEL: u32 = 522u32;
            pub const CONN_DST_EG2_ATTACKTIME: u32 = 778u32;
            pub const CONN_DST_EG2_DECAYTIME: u32 = 779u32;
            pub const CONN_DST_EG2_RELEASETIME: u32 = 781u32;
            pub const CONN_DST_EG2_SUSTAINLEVEL: u32 = 782u32;
            pub const CONN_DST_LFO_FREQUENCY: u32 = 260u32;
            pub const CONN_DST_LFO_STARTDELAY: u32 = 261u32;
            pub const CONN_DST_NONE: u32 = 0u32;
            pub const CONN_DST_PAN: u32 = 4u32;
            pub const CONN_DST_PITCH: u32 = 3u32;
            pub const CONN_SRC_CC1: u32 = 129u32;
            pub const CONN_SRC_CC10: u32 = 138u32;
            pub const CONN_SRC_CC11: u32 = 139u32;
            pub const CONN_SRC_CC7: u32 = 135u32;
            pub const CONN_SRC_EG1: u32 = 4u32;
            pub const CONN_SRC_EG2: u32 = 5u32;
            pub const CONN_SRC_KEYNUMBER: u32 = 3u32;
            pub const CONN_SRC_KEYONVELOCITY: u32 = 2u32;
            pub const CONN_SRC_LFO: u32 = 1u32;
            pub const CONN_SRC_NONE: u32 = 0u32;
            pub const CONN_SRC_PITCHWHEEL: u32 = 6u32;
            pub const CONN_TRN_CONCAVE: u32 = 1u32;
            pub const CONN_TRN_NONE: u32 = 0u32;
            pub const DAUD_CHAN10_VOICE_PRIORITY_OFFSET: u32 = 15u32;
            pub const DAUD_CHAN11_VOICE_PRIORITY_OFFSET: u32 = 5u32;
            pub const DAUD_CHAN12_VOICE_PRIORITY_OFFSET: u32 = 4u32;
            pub const DAUD_CHAN13_VOICE_PRIORITY_OFFSET: u32 = 3u32;
            pub const DAUD_CHAN14_VOICE_PRIORITY_OFFSET: u32 = 2u32;
            pub const DAUD_CHAN15_VOICE_PRIORITY_OFFSET: u32 = 1u32;
            pub const DAUD_CHAN16_VOICE_PRIORITY_OFFSET: u32 = 0u32;
            pub const DAUD_CHAN1_VOICE_PRIORITY_OFFSET: u32 = 14u32;
            pub const DAUD_CHAN2_VOICE_PRIORITY_OFFSET: u32 = 13u32;
            pub const DAUD_CHAN3_VOICE_PRIORITY_OFFSET: u32 = 12u32;
            pub const DAUD_CHAN4_VOICE_PRIORITY_OFFSET: u32 = 11u32;
            pub const DAUD_CHAN5_VOICE_PRIORITY_OFFSET: u32 = 10u32;
            pub const DAUD_CHAN6_VOICE_PRIORITY_OFFSET: u32 = 9u32;
            pub const DAUD_CHAN7_VOICE_PRIORITY_OFFSET: u32 = 8u32;
            pub const DAUD_CHAN8_VOICE_PRIORITY_OFFSET: u32 = 7u32;
            pub const DAUD_CHAN9_VOICE_PRIORITY_OFFSET: u32 = 6u32;
            pub const DAUD_CRITICAL_VOICE_PRIORITY: u32 = 4026531840u32;
            pub const DAUD_HIGH_VOICE_PRIORITY: u32 = 3221225472u32;
            pub const DAUD_LOW_VOICE_PRIORITY: u32 = 1073741824u32;
            pub const DAUD_PERSIST_VOICE_PRIORITY: u32 = 268435456u32;
            pub const DAUD_STANDARD_VOICE_PRIORITY: u32 = 2147483648u32;
            pub const DIRECTSOUND_VERSION: u32 = 1792u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DLSHEADER {
                pub cInstruments: u32,
            }
            impl DLSHEADER {}
            impl ::std::default::Default for DLSHEADER {
                fn default() -> Self {
                    Self { cInstruments: 0 }
                }
            }
            impl ::std::fmt::Debug for DLSHEADER {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DLSHEADER")
                        .field("cInstruments", &format_args!("{:?}", self.cInstruments))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DLSHEADER {
                fn eq(&self, other: &Self) -> bool {
                    self.cInstruments == other.cInstruments
                }
            }
            impl ::std::cmp::Eq for DLSHEADER {}
            unsafe impl ::windows::Abi for DLSHEADER {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DLSID {
                pub ulData1: u32,
                pub usData2: u16,
                pub usData3: u16,
                pub abData4: [u8; 8],
            }
            impl DLSID {}
            impl ::std::default::Default for DLSID {
                fn default() -> Self {
                    Self {
                        ulData1: 0,
                        usData2: 0,
                        usData3: 0,
                        abData4: [0; 8],
                    }
                }
            }
            impl ::std::fmt::Debug for DLSID {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DLSID")
                        .field("ulData1", &format_args!("{:?}", self.ulData1))
                        .field("usData2", &format_args!("{:?}", self.usData2))
                        .field("usData3", &format_args!("{:?}", self.usData3))
                        .field("abData4", &format_args!("{:?}", self.abData4))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DLSID {
                fn eq(&self, other: &Self) -> bool {
                    self.ulData1 == other.ulData1
                        && self.usData2 == other.usData2
                        && self.usData3 == other.usData3
                        && self.abData4 == other.abData4
                }
            }
            impl ::std::cmp::Eq for DLSID {}
            unsafe impl ::windows::Abi for DLSID {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DLSVERSION {
                pub dwVersionMS: u32,
                pub dwVersionLS: u32,
            }
            impl DLSVERSION {}
            impl ::std::default::Default for DLSVERSION {
                fn default() -> Self {
                    Self {
                        dwVersionMS: 0,
                        dwVersionLS: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DLSVERSION {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DLSVERSION")
                        .field("dwVersionMS", &format_args!("{:?}", self.dwVersionMS))
                        .field("dwVersionLS", &format_args!("{:?}", self.dwVersionLS))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DLSVERSION {
                fn eq(&self, other: &Self) -> bool {
                    self.dwVersionMS == other.dwVersionMS && self.dwVersionLS == other.dwVersionLS
                }
            }
            impl ::std::cmp::Eq for DLSVERSION {}
            unsafe impl ::windows::Abi for DLSVERSION {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DMUS_LFOPARAMS {
                pub pcFrequency: i32,
                pub tcDelay: i32,
                pub gcVolumeScale: i32,
                pub pcPitchScale: i32,
                pub gcMWToVolume: i32,
                pub pcMWToPitch: i32,
            }
            impl DMUS_LFOPARAMS {}
            impl ::std::default::Default for DMUS_LFOPARAMS {
                fn default() -> Self {
                    Self {
                        pcFrequency: 0,
                        tcDelay: 0,
                        gcVolumeScale: 0,
                        pcPitchScale: 0,
                        gcMWToVolume: 0,
                        pcMWToPitch: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DMUS_LFOPARAMS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DMUS_LFOPARAMS")
                        .field("pcFrequency", &format_args!("{:?}", self.pcFrequency))
                        .field("tcDelay", &format_args!("{:?}", self.tcDelay))
                        .field("gcVolumeScale", &format_args!("{:?}", self.gcVolumeScale))
                        .field("pcPitchScale", &format_args!("{:?}", self.pcPitchScale))
                        .field("gcMWToVolume", &format_args!("{:?}", self.gcMWToVolume))
                        .field("pcMWToPitch", &format_args!("{:?}", self.pcMWToPitch))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DMUS_LFOPARAMS {
                fn eq(&self, other: &Self) -> bool {
                    self.pcFrequency == other.pcFrequency
                        && self.tcDelay == other.tcDelay
                        && self.gcVolumeScale == other.gcVolumeScale
                        && self.pcPitchScale == other.pcPitchScale
                        && self.gcMWToVolume == other.gcMWToVolume
                        && self.pcMWToPitch == other.pcMWToPitch
                }
            }
            impl ::std::cmp::Eq for DMUS_LFOPARAMS {}
            unsafe impl ::windows::Abi for DMUS_LFOPARAMS {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DMUS_VEGPARAMS {
                pub tcAttack: i32,
                pub tcDecay: i32,
                pub ptSustain: i32,
                pub tcRelease: i32,
                pub tcVel2Attack: i32,
                pub tcKey2Decay: i32,
            }
            impl DMUS_VEGPARAMS {}
            impl ::std::default::Default for DMUS_VEGPARAMS {
                fn default() -> Self {
                    Self {
                        tcAttack: 0,
                        tcDecay: 0,
                        ptSustain: 0,
                        tcRelease: 0,
                        tcVel2Attack: 0,
                        tcKey2Decay: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DMUS_VEGPARAMS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DMUS_VEGPARAMS")
                        .field("tcAttack", &format_args!("{:?}", self.tcAttack))
                        .field("tcDecay", &format_args!("{:?}", self.tcDecay))
                        .field("ptSustain", &format_args!("{:?}", self.ptSustain))
                        .field("tcRelease", &format_args!("{:?}", self.tcRelease))
                        .field("tcVel2Attack", &format_args!("{:?}", self.tcVel2Attack))
                        .field("tcKey2Decay", &format_args!("{:?}", self.tcKey2Decay))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DMUS_VEGPARAMS {
                fn eq(&self, other: &Self) -> bool {
                    self.tcAttack == other.tcAttack
                        && self.tcDecay == other.tcDecay
                        && self.ptSustain == other.ptSustain
                        && self.tcRelease == other.tcRelease
                        && self.tcVel2Attack == other.tcVel2Attack
                        && self.tcKey2Decay == other.tcKey2Decay
                }
            }
            impl ::std::cmp::Eq for DMUS_VEGPARAMS {}
            unsafe impl ::windows::Abi for DMUS_VEGPARAMS {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DMUS_PEGPARAMS {
                pub tcAttack: i32,
                pub tcDecay: i32,
                pub ptSustain: i32,
                pub tcRelease: i32,
                pub tcVel2Attack: i32,
                pub tcKey2Decay: i32,
                pub pcRange: i32,
            }
            impl DMUS_PEGPARAMS {}
            impl ::std::default::Default for DMUS_PEGPARAMS {
                fn default() -> Self {
                    Self {
                        tcAttack: 0,
                        tcDecay: 0,
                        ptSustain: 0,
                        tcRelease: 0,
                        tcVel2Attack: 0,
                        tcKey2Decay: 0,
                        pcRange: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DMUS_PEGPARAMS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DMUS_PEGPARAMS")
                        .field("tcAttack", &format_args!("{:?}", self.tcAttack))
                        .field("tcDecay", &format_args!("{:?}", self.tcDecay))
                        .field("ptSustain", &format_args!("{:?}", self.ptSustain))
                        .field("tcRelease", &format_args!("{:?}", self.tcRelease))
                        .field("tcVel2Attack", &format_args!("{:?}", self.tcVel2Attack))
                        .field("tcKey2Decay", &format_args!("{:?}", self.tcKey2Decay))
                        .field("pcRange", &format_args!("{:?}", self.pcRange))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DMUS_PEGPARAMS {
                fn eq(&self, other: &Self) -> bool {
                    self.tcAttack == other.tcAttack
                        && self.tcDecay == other.tcDecay
                        && self.ptSustain == other.ptSustain
                        && self.tcRelease == other.tcRelease
                        && self.tcVel2Attack == other.tcVel2Attack
                        && self.tcKey2Decay == other.tcKey2Decay
                        && self.pcRange == other.pcRange
                }
            }
            impl ::std::cmp::Eq for DMUS_PEGPARAMS {}
            unsafe impl ::windows::Abi for DMUS_PEGPARAMS {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DMUS_MSCPARAMS {
                pub ptDefaultPan: i32,
            }
            impl DMUS_MSCPARAMS {}
            impl ::std::default::Default for DMUS_MSCPARAMS {
                fn default() -> Self {
                    Self { ptDefaultPan: 0 }
                }
            }
            impl ::std::fmt::Debug for DMUS_MSCPARAMS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DMUS_MSCPARAMS")
                        .field("ptDefaultPan", &format_args!("{:?}", self.ptDefaultPan))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DMUS_MSCPARAMS {
                fn eq(&self, other: &Self) -> bool {
                    self.ptDefaultPan == other.ptDefaultPan
                }
            }
            impl ::std::cmp::Eq for DMUS_MSCPARAMS {}
            unsafe impl ::windows::Abi for DMUS_MSCPARAMS {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DMUS_ARTICPARAMS {
                pub LFO: DMUS_LFOPARAMS,
                pub VolEG: DMUS_VEGPARAMS,
                pub PitchEG: DMUS_PEGPARAMS,
                pub Misc: DMUS_MSCPARAMS,
            }
            impl DMUS_ARTICPARAMS {}
            impl ::std::default::Default for DMUS_ARTICPARAMS {
                fn default() -> Self {
                    Self {
                        LFO: ::std::default::Default::default(),
                        VolEG: ::std::default::Default::default(),
                        PitchEG: ::std::default::Default::default(),
                        Misc: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for DMUS_ARTICPARAMS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DMUS_ARTICPARAMS")
                        .field("LFO", &format_args!("{:?}", self.LFO))
                        .field("VolEG", &format_args!("{:?}", self.VolEG))
                        .field("PitchEG", &format_args!("{:?}", self.PitchEG))
                        .field("Misc", &format_args!("{:?}", self.Misc))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DMUS_ARTICPARAMS {
                fn eq(&self, other: &Self) -> bool {
                    self.LFO == other.LFO
                        && self.VolEG == other.VolEG
                        && self.PitchEG == other.PitchEG
                        && self.Misc == other.Misc
                }
            }
            impl ::std::cmp::Eq for DMUS_ARTICPARAMS {}
            unsafe impl ::windows::Abi for DMUS_ARTICPARAMS {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DMUS_ARTICULATION {
                pub ulArt1Idx: u32,
                pub ulFirstExtCkIdx: u32,
            }
            impl DMUS_ARTICULATION {}
            impl ::std::default::Default for DMUS_ARTICULATION {
                fn default() -> Self {
                    Self {
                        ulArt1Idx: 0,
                        ulFirstExtCkIdx: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DMUS_ARTICULATION {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DMUS_ARTICULATION")
                        .field("ulArt1Idx", &format_args!("{:?}", self.ulArt1Idx))
                        .field(
                            "ulFirstExtCkIdx",
                            &format_args!("{:?}", self.ulFirstExtCkIdx),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DMUS_ARTICULATION {
                fn eq(&self, other: &Self) -> bool {
                    self.ulArt1Idx == other.ulArt1Idx
                        && self.ulFirstExtCkIdx == other.ulFirstExtCkIdx
                }
            }
            impl ::std::cmp::Eq for DMUS_ARTICULATION {}
            unsafe impl ::windows::Abi for DMUS_ARTICULATION {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DMUS_ARTICULATION2 {
                pub ulArtIdx: u32,
                pub ulFirstExtCkIdx: u32,
                pub ulNextArtIdx: u32,
            }
            impl DMUS_ARTICULATION2 {}
            impl ::std::default::Default for DMUS_ARTICULATION2 {
                fn default() -> Self {
                    Self {
                        ulArtIdx: 0,
                        ulFirstExtCkIdx: 0,
                        ulNextArtIdx: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DMUS_ARTICULATION2 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DMUS_ARTICULATION2")
                        .field("ulArtIdx", &format_args!("{:?}", self.ulArtIdx))
                        .field(
                            "ulFirstExtCkIdx",
                            &format_args!("{:?}", self.ulFirstExtCkIdx),
                        )
                        .field("ulNextArtIdx", &format_args!("{:?}", self.ulNextArtIdx))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DMUS_ARTICULATION2 {
                fn eq(&self, other: &Self) -> bool {
                    self.ulArtIdx == other.ulArtIdx
                        && self.ulFirstExtCkIdx == other.ulFirstExtCkIdx
                        && self.ulNextArtIdx == other.ulNextArtIdx
                }
            }
            impl ::std::cmp::Eq for DMUS_ARTICULATION2 {}
            unsafe impl ::windows::Abi for DMUS_ARTICULATION2 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DMUS_BUFFERDESC {
                pub dwSize: u32,
                pub dwFlags: u32,
                pub guidBufferFormat: ::windows::Guid,
                pub cbBuffer: u32,
            }
            impl DMUS_BUFFERDESC {}
            impl ::std::default::Default for DMUS_BUFFERDESC {
                fn default() -> Self {
                    Self {
                        dwSize: 0,
                        dwFlags: 0,
                        guidBufferFormat: ::std::default::Default::default(),
                        cbBuffer: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DMUS_BUFFERDESC {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DMUS_BUFFERDESC")
                        .field("dwSize", &format_args!("{:?}", self.dwSize))
                        .field("dwFlags", &format_args!("{:?}", self.dwFlags))
                        .field(
                            "guidBufferFormat",
                            &format_args!("{:?}", self.guidBufferFormat),
                        )
                        .field("cbBuffer", &format_args!("{:?}", self.cbBuffer))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DMUS_BUFFERDESC {
                fn eq(&self, other: &Self) -> bool {
                    self.dwSize == other.dwSize
                        && self.dwFlags == other.dwFlags
                        && self.guidBufferFormat == other.guidBufferFormat
                        && self.cbBuffer == other.cbBuffer
                }
            }
            impl ::std::cmp::Eq for DMUS_BUFFERDESC {}
            unsafe impl ::windows::Abi for DMUS_BUFFERDESC {
                type Abi = Self;
            }
            pub const DMUS_CLOCKF_GLOBAL: u32 = 1u32;
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct DMUS_CLOCKTYPE(pub i32);
            impl DMUS_CLOCKTYPE {
                pub const DMUS_CLOCK_SYSTEM: Self = Self(0i32);
                pub const DMUS_CLOCK_WAVE: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for DMUS_CLOCKTYPE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for DMUS_CLOCKTYPE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DMUS_CLOCKINFO7 {
                pub dwSize: u32,
                pub ctType: DMUS_CLOCKTYPE,
                pub guidClock: ::windows::Guid,
                pub wszDescription: [u16; 128],
            }
            impl DMUS_CLOCKINFO7 {}
            impl ::std::default::Default for DMUS_CLOCKINFO7 {
                fn default() -> Self {
                    Self {
                        dwSize: 0,
                        ctType: ::std::default::Default::default(),
                        guidClock: ::std::default::Default::default(),
                        wszDescription: [0; 128],
                    }
                }
            }
            impl ::std::fmt::Debug for DMUS_CLOCKINFO7 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DMUS_CLOCKINFO7")
                        .field("dwSize", &format_args!("{:?}", self.dwSize))
                        .field("ctType", &format_args!("{:?}", self.ctType))
                        .field("guidClock", &format_args!("{:?}", self.guidClock))
                        .field("wszDescription", &format_args!("{:?}", self.wszDescription))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DMUS_CLOCKINFO7 {
                fn eq(&self, other: &Self) -> bool {
                    self.dwSize == other.dwSize
                        && self.ctType == other.ctType
                        && self.guidClock == other.guidClock
                        && self.wszDescription == other.wszDescription
                }
            }
            impl ::std::cmp::Eq for DMUS_CLOCKINFO7 {}
            unsafe impl ::windows::Abi for DMUS_CLOCKINFO7 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DMUS_CLOCKINFO8 {
                pub dwSize: u32,
                pub ctType: DMUS_CLOCKTYPE,
                pub guidClock: ::windows::Guid,
                pub wszDescription: [u16; 128],
                pub dwFlags: u32,
            }
            impl DMUS_CLOCKINFO8 {}
            impl ::std::default::Default for DMUS_CLOCKINFO8 {
                fn default() -> Self {
                    Self {
                        dwSize: 0,
                        ctType: ::std::default::Default::default(),
                        guidClock: ::std::default::Default::default(),
                        wszDescription: [0; 128],
                        dwFlags: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DMUS_CLOCKINFO8 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DMUS_CLOCKINFO8")
                        .field("dwSize", &format_args!("{:?}", self.dwSize))
                        .field("ctType", &format_args!("{:?}", self.ctType))
                        .field("guidClock", &format_args!("{:?}", self.guidClock))
                        .field("wszDescription", &format_args!("{:?}", self.wszDescription))
                        .field("dwFlags", &format_args!("{:?}", self.dwFlags))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DMUS_CLOCKINFO8 {
                fn eq(&self, other: &Self) -> bool {
                    self.dwSize == other.dwSize
                        && self.ctType == other.ctType
                        && self.guidClock == other.guidClock
                        && self.wszDescription == other.wszDescription
                        && self.dwFlags == other.dwFlags
                }
            }
            impl ::std::cmp::Eq for DMUS_CLOCKINFO8 {}
            unsafe impl ::windows::Abi for DMUS_CLOCKINFO8 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DMUS_COPYRIGHT {
                pub cbSize: u32,
                pub byCopyright: [u8; 4],
            }
            impl DMUS_COPYRIGHT {}
            impl ::std::default::Default for DMUS_COPYRIGHT {
                fn default() -> Self {
                    Self {
                        cbSize: 0,
                        byCopyright: [0; 4],
                    }
                }
            }
            impl ::std::fmt::Debug for DMUS_COPYRIGHT {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DMUS_COPYRIGHT")
                        .field("cbSize", &format_args!("{:?}", self.cbSize))
                        .field("byCopyright", &format_args!("{:?}", self.byCopyright))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DMUS_COPYRIGHT {
                fn eq(&self, other: &Self) -> bool {
                    self.cbSize == other.cbSize && self.byCopyright == other.byCopyright
                }
            }
            impl ::std::cmp::Eq for DMUS_COPYRIGHT {}
            unsafe impl ::windows::Abi for DMUS_COPYRIGHT {
                type Abi = Self;
            }
            pub const DMUS_DEFAULT_SIZE_OFFSETTABLE: u32 = 1u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DMUS_DOWNLOADINFO {
                pub dwDLType: u32,
                pub dwDLId: u32,
                pub dwNumOffsetTableEntries: u32,
                pub cbSize: u32,
            }
            impl DMUS_DOWNLOADINFO {}
            impl ::std::default::Default for DMUS_DOWNLOADINFO {
                fn default() -> Self {
                    Self {
                        dwDLType: 0,
                        dwDLId: 0,
                        dwNumOffsetTableEntries: 0,
                        cbSize: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DMUS_DOWNLOADINFO {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DMUS_DOWNLOADINFO")
                        .field("dwDLType", &format_args!("{:?}", self.dwDLType))
                        .field("dwDLId", &format_args!("{:?}", self.dwDLId))
                        .field(
                            "dwNumOffsetTableEntries",
                            &format_args!("{:?}", self.dwNumOffsetTableEntries),
                        )
                        .field("cbSize", &format_args!("{:?}", self.cbSize))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DMUS_DOWNLOADINFO {
                fn eq(&self, other: &Self) -> bool {
                    self.dwDLType == other.dwDLType
                        && self.dwDLId == other.dwDLId
                        && self.dwNumOffsetTableEntries == other.dwNumOffsetTableEntries
                        && self.cbSize == other.cbSize
                }
            }
            impl ::std::cmp::Eq for DMUS_DOWNLOADINFO {}
            unsafe impl ::windows::Abi for DMUS_DOWNLOADINFO {
                type Abi = Self;
            }
            pub const DMUS_DOWNLOADINFO_INSTRUMENT: u32 = 1u32;
            pub const DMUS_DOWNLOADINFO_INSTRUMENT2: u32 = 3u32;
            pub const DMUS_DOWNLOADINFO_ONESHOTWAVE: u32 = 6u32;
            pub const DMUS_DOWNLOADINFO_STREAMINGWAVE: u32 = 5u32;
            pub const DMUS_DOWNLOADINFO_WAVE: u32 = 2u32;
            pub const DMUS_DOWNLOADINFO_WAVEARTICULATION: u32 = 4u32;
            pub const DMUS_EFFECT_CHORUS: u32 = 2u32;
            pub const DMUS_EFFECT_DELAY: u32 = 4u32;
            pub const DMUS_EFFECT_NONE: u32 = 0u32;
            pub const DMUS_EFFECT_REVERB: u32 = 1u32;
            #[repr(C, packed(4))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DMUS_EVENTHEADER {
                pub cbEvent: u32,
                pub dwChannelGroup: u32,
                pub rtDelta: i64,
                pub dwFlags: u32,
            }
            impl DMUS_EVENTHEADER {}
            unsafe impl ::windows::Abi for DMUS_EVENTHEADER {
                type Abi = Self;
            }
            pub const DMUS_EVENT_STRUCTURED: u32 = 1u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DMUS_EXTENSIONCHUNK {
                pub cbSize: u32,
                pub ulNextExtCkIdx: u32,
                pub ExtCkID: u32,
                pub byExtCk: [u8; 4],
            }
            impl DMUS_EXTENSIONCHUNK {}
            impl ::std::default::Default for DMUS_EXTENSIONCHUNK {
                fn default() -> Self {
                    Self {
                        cbSize: 0,
                        ulNextExtCkIdx: 0,
                        ExtCkID: 0,
                        byExtCk: [0; 4],
                    }
                }
            }
            impl ::std::fmt::Debug for DMUS_EXTENSIONCHUNK {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DMUS_EXTENSIONCHUNK")
                        .field("cbSize", &format_args!("{:?}", self.cbSize))
                        .field("ulNextExtCkIdx", &format_args!("{:?}", self.ulNextExtCkIdx))
                        .field("ExtCkID", &format_args!("{:?}", self.ExtCkID))
                        .field("byExtCk", &format_args!("{:?}", self.byExtCk))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DMUS_EXTENSIONCHUNK {
                fn eq(&self, other: &Self) -> bool {
                    self.cbSize == other.cbSize
                        && self.ulNextExtCkIdx == other.ulNextExtCkIdx
                        && self.ExtCkID == other.ExtCkID
                        && self.byExtCk == other.byExtCk
                }
            }
            impl ::std::cmp::Eq for DMUS_EXTENSIONCHUNK {}
            unsafe impl ::windows::Abi for DMUS_EXTENSIONCHUNK {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DMUS_INSTRUMENT {
                pub ulPatch: u32,
                pub ulFirstRegionIdx: u32,
                pub ulGlobalArtIdx: u32,
                pub ulFirstExtCkIdx: u32,
                pub ulCopyrightIdx: u32,
                pub ulFlags: u32,
            }
            impl DMUS_INSTRUMENT {}
            impl ::std::default::Default for DMUS_INSTRUMENT {
                fn default() -> Self {
                    Self {
                        ulPatch: 0,
                        ulFirstRegionIdx: 0,
                        ulGlobalArtIdx: 0,
                        ulFirstExtCkIdx: 0,
                        ulCopyrightIdx: 0,
                        ulFlags: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DMUS_INSTRUMENT {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DMUS_INSTRUMENT")
                        .field("ulPatch", &format_args!("{:?}", self.ulPatch))
                        .field(
                            "ulFirstRegionIdx",
                            &format_args!("{:?}", self.ulFirstRegionIdx),
                        )
                        .field("ulGlobalArtIdx", &format_args!("{:?}", self.ulGlobalArtIdx))
                        .field(
                            "ulFirstExtCkIdx",
                            &format_args!("{:?}", self.ulFirstExtCkIdx),
                        )
                        .field("ulCopyrightIdx", &format_args!("{:?}", self.ulCopyrightIdx))
                        .field("ulFlags", &format_args!("{:?}", self.ulFlags))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DMUS_INSTRUMENT {
                fn eq(&self, other: &Self) -> bool {
                    self.ulPatch == other.ulPatch
                        && self.ulFirstRegionIdx == other.ulFirstRegionIdx
                        && self.ulGlobalArtIdx == other.ulGlobalArtIdx
                        && self.ulFirstExtCkIdx == other.ulFirstExtCkIdx
                        && self.ulCopyrightIdx == other.ulCopyrightIdx
                        && self.ulFlags == other.ulFlags
                }
            }
            impl ::std::cmp::Eq for DMUS_INSTRUMENT {}
            unsafe impl ::windows::Abi for DMUS_INSTRUMENT {
                type Abi = Self;
            }
            pub const DMUS_INSTRUMENT_GM_INSTRUMENT: u32 = 1u32;
            pub const DMUS_MAX_DESCRIPTION: u32 = 128u32;
            pub const DMUS_MAX_DRIVER: u32 = 128u32;
            pub const DMUS_MIN_DATA_SIZE: u32 = 4u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DMUS_NOTERANGE {
                pub dwLowNote: u32,
                pub dwHighNote: u32,
            }
            impl DMUS_NOTERANGE {}
            impl ::std::default::Default for DMUS_NOTERANGE {
                fn default() -> Self {
                    Self {
                        dwLowNote: 0,
                        dwHighNote: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DMUS_NOTERANGE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DMUS_NOTERANGE")
                        .field("dwLowNote", &format_args!("{:?}", self.dwLowNote))
                        .field("dwHighNote", &format_args!("{:?}", self.dwHighNote))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DMUS_NOTERANGE {
                fn eq(&self, other: &Self) -> bool {
                    self.dwLowNote == other.dwLowNote && self.dwHighNote == other.dwHighNote
                }
            }
            impl ::std::cmp::Eq for DMUS_NOTERANGE {}
            unsafe impl ::windows::Abi for DMUS_NOTERANGE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DMUS_OFFSETTABLE {
                pub ulOffsetTable: [u32; 1],
            }
            impl DMUS_OFFSETTABLE {}
            impl ::std::default::Default for DMUS_OFFSETTABLE {
                fn default() -> Self {
                    Self {
                        ulOffsetTable: [0; 1],
                    }
                }
            }
            impl ::std::fmt::Debug for DMUS_OFFSETTABLE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DMUS_OFFSETTABLE")
                        .field("ulOffsetTable", &format_args!("{:?}", self.ulOffsetTable))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DMUS_OFFSETTABLE {
                fn eq(&self, other: &Self) -> bool {
                    self.ulOffsetTable == other.ulOffsetTable
                }
            }
            impl ::std::cmp::Eq for DMUS_OFFSETTABLE {}
            unsafe impl ::windows::Abi for DMUS_OFFSETTABLE {
                type Abi = Self;
            }
            pub const DMUS_PC_AUDIOPATH: u32 = 1024u32;
            pub const DMUS_PC_DIRECTSOUND: u32 = 128u32;
            pub const DMUS_PC_DLS: u32 = 1u32;
            pub const DMUS_PC_DLS2: u32 = 512u32;
            pub const DMUS_PC_EXTERNAL: u32 = 2u32;
            pub const DMUS_PC_GMINHARDWARE: u32 = 16u32;
            pub const DMUS_PC_GSINHARDWARE: u32 = 32u32;
            pub const DMUS_PC_INPUTCLASS: u32 = 0u32;
            pub const DMUS_PC_MEMORYSIZEFIXED: u32 = 8u32;
            pub const DMUS_PC_OUTPUTCLASS: u32 = 1u32;
            pub const DMUS_PC_SHAREABLE: u32 = 256u32;
            pub const DMUS_PC_SOFTWARESYNTH: u32 = 4u32;
            pub const DMUS_PC_SYSTEMMEMORY: u32 = 2147483647u32;
            pub const DMUS_PC_WAVE: u32 = 2048u32;
            pub const DMUS_PC_XGINHARDWARE: u32 = 64u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DMUS_PORTCAPS {
                pub dwSize: u32,
                pub dwFlags: u32,
                pub guidPort: ::windows::Guid,
                pub dwClass: u32,
                pub dwType: u32,
                pub dwMemorySize: u32,
                pub dwMaxChannelGroups: u32,
                pub dwMaxVoices: u32,
                pub dwMaxAudioChannels: u32,
                pub dwEffectFlags: u32,
                pub wszDescription: [u16; 128],
            }
            impl DMUS_PORTCAPS {}
            impl ::std::default::Default for DMUS_PORTCAPS {
                fn default() -> Self {
                    Self {
                        dwSize: 0,
                        dwFlags: 0,
                        guidPort: ::std::default::Default::default(),
                        dwClass: 0,
                        dwType: 0,
                        dwMemorySize: 0,
                        dwMaxChannelGroups: 0,
                        dwMaxVoices: 0,
                        dwMaxAudioChannels: 0,
                        dwEffectFlags: 0,
                        wszDescription: [0; 128],
                    }
                }
            }
            impl ::std::fmt::Debug for DMUS_PORTCAPS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DMUS_PORTCAPS")
                        .field("dwSize", &format_args!("{:?}", self.dwSize))
                        .field("dwFlags", &format_args!("{:?}", self.dwFlags))
                        .field("guidPort", &format_args!("{:?}", self.guidPort))
                        .field("dwClass", &format_args!("{:?}", self.dwClass))
                        .field("dwType", &format_args!("{:?}", self.dwType))
                        .field("dwMemorySize", &format_args!("{:?}", self.dwMemorySize))
                        .field(
                            "dwMaxChannelGroups",
                            &format_args!("{:?}", self.dwMaxChannelGroups),
                        )
                        .field("dwMaxVoices", &format_args!("{:?}", self.dwMaxVoices))
                        .field(
                            "dwMaxAudioChannels",
                            &format_args!("{:?}", self.dwMaxAudioChannels),
                        )
                        .field("dwEffectFlags", &format_args!("{:?}", self.dwEffectFlags))
                        .field("wszDescription", &format_args!("{:?}", self.wszDescription))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DMUS_PORTCAPS {
                fn eq(&self, other: &Self) -> bool {
                    self.dwSize == other.dwSize
                        && self.dwFlags == other.dwFlags
                        && self.guidPort == other.guidPort
                        && self.dwClass == other.dwClass
                        && self.dwType == other.dwType
                        && self.dwMemorySize == other.dwMemorySize
                        && self.dwMaxChannelGroups == other.dwMaxChannelGroups
                        && self.dwMaxVoices == other.dwMaxVoices
                        && self.dwMaxAudioChannels == other.dwMaxAudioChannels
                        && self.dwEffectFlags == other.dwEffectFlags
                        && self.wszDescription == other.wszDescription
                }
            }
            impl ::std::cmp::Eq for DMUS_PORTCAPS {}
            unsafe impl ::windows::Abi for DMUS_PORTCAPS {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DMUS_PORTPARAMS8 {
                pub dwSize: u32,
                pub dwValidParams: u32,
                pub dwVoices: u32,
                pub dwChannelGroups: u32,
                pub dwAudioChannels: u32,
                pub dwSampleRate: u32,
                pub dwEffectFlags: u32,
                pub fShare: super::SystemServices::BOOL,
                pub dwFeatures: u32,
            }
            impl DMUS_PORTPARAMS8 {}
            impl ::std::default::Default for DMUS_PORTPARAMS8 {
                fn default() -> Self {
                    Self {
                        dwSize: 0,
                        dwValidParams: 0,
                        dwVoices: 0,
                        dwChannelGroups: 0,
                        dwAudioChannels: 0,
                        dwSampleRate: 0,
                        dwEffectFlags: 0,
                        fShare: ::std::default::Default::default(),
                        dwFeatures: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DMUS_PORTPARAMS8 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DMUS_PORTPARAMS8")
                        .field("dwSize", &format_args!("{:?}", self.dwSize))
                        .field("dwValidParams", &format_args!("{:?}", self.dwValidParams))
                        .field("dwVoices", &format_args!("{:?}", self.dwVoices))
                        .field(
                            "dwChannelGroups",
                            &format_args!("{:?}", self.dwChannelGroups),
                        )
                        .field(
                            "dwAudioChannels",
                            &format_args!("{:?}", self.dwAudioChannels),
                        )
                        .field("dwSampleRate", &format_args!("{:?}", self.dwSampleRate))
                        .field("dwEffectFlags", &format_args!("{:?}", self.dwEffectFlags))
                        .field("fShare", &format_args!("{:?}", self.fShare))
                        .field("dwFeatures", &format_args!("{:?}", self.dwFeatures))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DMUS_PORTPARAMS8 {
                fn eq(&self, other: &Self) -> bool {
                    self.dwSize == other.dwSize
                        && self.dwValidParams == other.dwValidParams
                        && self.dwVoices == other.dwVoices
                        && self.dwChannelGroups == other.dwChannelGroups
                        && self.dwAudioChannels == other.dwAudioChannels
                        && self.dwSampleRate == other.dwSampleRate
                        && self.dwEffectFlags == other.dwEffectFlags
                        && self.fShare == other.fShare
                        && self.dwFeatures == other.dwFeatures
                }
            }
            impl ::std::cmp::Eq for DMUS_PORTPARAMS8 {}
            unsafe impl ::windows::Abi for DMUS_PORTPARAMS8 {
                type Abi = Self;
            }
            pub const DMUS_PORTPARAMS_AUDIOCHANNELS: u32 = 4u32;
            pub const DMUS_PORTPARAMS_CHANNELGROUPS: u32 = 2u32;
            pub const DMUS_PORTPARAMS_EFFECTS: u32 = 32u32;
            pub const DMUS_PORTPARAMS_FEATURES: u32 = 128u32;
            pub const DMUS_PORTPARAMS_SAMPLERATE: u32 = 8u32;
            pub const DMUS_PORTPARAMS_SHARE: u32 = 64u32;
            pub const DMUS_PORTPARAMS_VOICES: u32 = 1u32;
            pub const DMUS_PORT_FEATURE_AUDIOPATH: u32 = 1u32;
            pub const DMUS_PORT_FEATURE_STREAMING: u32 = 2u32;
            pub const DMUS_PORT_KERNEL_MODE: u32 = 2u32;
            pub const DMUS_PORT_USER_MODE_SYNTH: u32 = 1u32;
            pub const DMUS_PORT_WINMM_DRIVER: u32 = 0u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct RGNRANGE {
                pub usLow: u16,
                pub usHigh: u16,
            }
            impl RGNRANGE {}
            impl ::std::default::Default for RGNRANGE {
                fn default() -> Self {
                    Self {
                        usLow: 0,
                        usHigh: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for RGNRANGE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("RGNRANGE")
                        .field("usLow", &format_args!("{:?}", self.usLow))
                        .field("usHigh", &format_args!("{:?}", self.usHigh))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for RGNRANGE {
                fn eq(&self, other: &Self) -> bool {
                    self.usLow == other.usLow && self.usHigh == other.usHigh
                }
            }
            impl ::std::cmp::Eq for RGNRANGE {}
            unsafe impl ::windows::Abi for RGNRANGE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct WAVELINK {
                pub fusOptions: u16,
                pub usPhaseGroup: u16,
                pub ulChannel: u32,
                pub ulTableIndex: u32,
            }
            impl WAVELINK {}
            impl ::std::default::Default for WAVELINK {
                fn default() -> Self {
                    Self {
                        fusOptions: 0,
                        usPhaseGroup: 0,
                        ulChannel: 0,
                        ulTableIndex: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for WAVELINK {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("WAVELINK")
                        .field("fusOptions", &format_args!("{:?}", self.fusOptions))
                        .field("usPhaseGroup", &format_args!("{:?}", self.usPhaseGroup))
                        .field("ulChannel", &format_args!("{:?}", self.ulChannel))
                        .field("ulTableIndex", &format_args!("{:?}", self.ulTableIndex))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for WAVELINK {
                fn eq(&self, other: &Self) -> bool {
                    self.fusOptions == other.fusOptions
                        && self.usPhaseGroup == other.usPhaseGroup
                        && self.ulChannel == other.ulChannel
                        && self.ulTableIndex == other.ulTableIndex
                }
            }
            impl ::std::cmp::Eq for WAVELINK {}
            unsafe impl ::windows::Abi for WAVELINK {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct _rwsmp {
                pub cbSize: u32,
                pub usUnityNote: u16,
                pub sFineTune: i16,
                pub lAttenuation: i32,
                pub fulOptions: u32,
                pub cSampleLoops: u32,
            }
            impl _rwsmp {}
            impl ::std::default::Default for _rwsmp {
                fn default() -> Self {
                    Self {
                        cbSize: 0,
                        usUnityNote: 0,
                        sFineTune: 0,
                        lAttenuation: 0,
                        fulOptions: 0,
                        cSampleLoops: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for _rwsmp {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_rwsmp")
                        .field("cbSize", &format_args!("{:?}", self.cbSize))
                        .field("usUnityNote", &format_args!("{:?}", self.usUnityNote))
                        .field("sFineTune", &format_args!("{:?}", self.sFineTune))
                        .field("lAttenuation", &format_args!("{:?}", self.lAttenuation))
                        .field("fulOptions", &format_args!("{:?}", self.fulOptions))
                        .field("cSampleLoops", &format_args!("{:?}", self.cSampleLoops))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for _rwsmp {
                fn eq(&self, other: &Self) -> bool {
                    self.cbSize == other.cbSize
                        && self.usUnityNote == other.usUnityNote
                        && self.sFineTune == other.sFineTune
                        && self.lAttenuation == other.lAttenuation
                        && self.fulOptions == other.fulOptions
                        && self.cSampleLoops == other.cSampleLoops
                }
            }
            impl ::std::cmp::Eq for _rwsmp {}
            unsafe impl ::windows::Abi for _rwsmp {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct _rloop {
                pub cbSize: u32,
                pub ulType: u32,
                pub ulStart: u32,
                pub ulLength: u32,
            }
            impl _rloop {}
            impl ::std::default::Default for _rloop {
                fn default() -> Self {
                    Self {
                        cbSize: 0,
                        ulType: 0,
                        ulStart: 0,
                        ulLength: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for _rloop {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_rloop")
                        .field("cbSize", &format_args!("{:?}", self.cbSize))
                        .field("ulType", &format_args!("{:?}", self.ulType))
                        .field("ulStart", &format_args!("{:?}", self.ulStart))
                        .field("ulLength", &format_args!("{:?}", self.ulLength))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for _rloop {
                fn eq(&self, other: &Self) -> bool {
                    self.cbSize == other.cbSize
                        && self.ulType == other.ulType
                        && self.ulStart == other.ulStart
                        && self.ulLength == other.ulLength
                }
            }
            impl ::std::cmp::Eq for _rloop {}
            unsafe impl ::windows::Abi for _rloop {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DMUS_REGION {
                pub RangeKey: RGNRANGE,
                pub RangeVelocity: RGNRANGE,
                pub fusOptions: u16,
                pub usKeyGroup: u16,
                pub ulRegionArtIdx: u32,
                pub ulNextRegionIdx: u32,
                pub ulFirstExtCkIdx: u32,
                pub WaveLink: WAVELINK,
                pub WSMP: _rwsmp,
                pub WLOOP: [_rloop; 1],
            }
            impl DMUS_REGION {}
            impl ::std::default::Default for DMUS_REGION {
                fn default() -> Self {
                    Self {
                        RangeKey: ::std::default::Default::default(),
                        RangeVelocity: ::std::default::Default::default(),
                        fusOptions: 0,
                        usKeyGroup: 0,
                        ulRegionArtIdx: 0,
                        ulNextRegionIdx: 0,
                        ulFirstExtCkIdx: 0,
                        WaveLink: ::std::default::Default::default(),
                        WSMP: ::std::default::Default::default(),
                        WLOOP: [::std::default::Default::default(); 1],
                    }
                }
            }
            impl ::std::fmt::Debug for DMUS_REGION {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DMUS_REGION")
                        .field("RangeKey", &format_args!("{:?}", self.RangeKey))
                        .field("RangeVelocity", &format_args!("{:?}", self.RangeVelocity))
                        .field("fusOptions", &format_args!("{:?}", self.fusOptions))
                        .field("usKeyGroup", &format_args!("{:?}", self.usKeyGroup))
                        .field("ulRegionArtIdx", &format_args!("{:?}", self.ulRegionArtIdx))
                        .field(
                            "ulNextRegionIdx",
                            &format_args!("{:?}", self.ulNextRegionIdx),
                        )
                        .field(
                            "ulFirstExtCkIdx",
                            &format_args!("{:?}", self.ulFirstExtCkIdx),
                        )
                        .field("WaveLink", &format_args!("{:?}", self.WaveLink))
                        .field("WSMP", &format_args!("{:?}", self.WSMP))
                        .field("WLOOP", &format_args!("{:?}", self.WLOOP))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DMUS_REGION {
                fn eq(&self, other: &Self) -> bool {
                    self.RangeKey == other.RangeKey
                        && self.RangeVelocity == other.RangeVelocity
                        && self.fusOptions == other.fusOptions
                        && self.usKeyGroup == other.usKeyGroup
                        && self.ulRegionArtIdx == other.ulRegionArtIdx
                        && self.ulNextRegionIdx == other.ulNextRegionIdx
                        && self.ulFirstExtCkIdx == other.ulFirstExtCkIdx
                        && self.WaveLink == other.WaveLink
                        && self.WSMP == other.WSMP
                        && self.WLOOP == other.WLOOP
                }
            }
            impl ::std::cmp::Eq for DMUS_REGION {}
            unsafe impl ::windows::Abi for DMUS_REGION {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DMUS_SYNTHSTATS {
                pub dwSize: u32,
                pub dwValidStats: u32,
                pub dwVoices: u32,
                pub dwTotalCPU: u32,
                pub dwCPUPerVoice: u32,
                pub dwLostNotes: u32,
                pub dwFreeMemory: u32,
                pub lPeakVolume: i32,
            }
            impl DMUS_SYNTHSTATS {}
            impl ::std::default::Default for DMUS_SYNTHSTATS {
                fn default() -> Self {
                    Self {
                        dwSize: 0,
                        dwValidStats: 0,
                        dwVoices: 0,
                        dwTotalCPU: 0,
                        dwCPUPerVoice: 0,
                        dwLostNotes: 0,
                        dwFreeMemory: 0,
                        lPeakVolume: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DMUS_SYNTHSTATS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DMUS_SYNTHSTATS")
                        .field("dwSize", &format_args!("{:?}", self.dwSize))
                        .field("dwValidStats", &format_args!("{:?}", self.dwValidStats))
                        .field("dwVoices", &format_args!("{:?}", self.dwVoices))
                        .field("dwTotalCPU", &format_args!("{:?}", self.dwTotalCPU))
                        .field("dwCPUPerVoice", &format_args!("{:?}", self.dwCPUPerVoice))
                        .field("dwLostNotes", &format_args!("{:?}", self.dwLostNotes))
                        .field("dwFreeMemory", &format_args!("{:?}", self.dwFreeMemory))
                        .field("lPeakVolume", &format_args!("{:?}", self.lPeakVolume))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DMUS_SYNTHSTATS {
                fn eq(&self, other: &Self) -> bool {
                    self.dwSize == other.dwSize
                        && self.dwValidStats == other.dwValidStats
                        && self.dwVoices == other.dwVoices
                        && self.dwTotalCPU == other.dwTotalCPU
                        && self.dwCPUPerVoice == other.dwCPUPerVoice
                        && self.dwLostNotes == other.dwLostNotes
                        && self.dwFreeMemory == other.dwFreeMemory
                        && self.lPeakVolume == other.lPeakVolume
                }
            }
            impl ::std::cmp::Eq for DMUS_SYNTHSTATS {}
            unsafe impl ::windows::Abi for DMUS_SYNTHSTATS {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DMUS_SYNTHSTATS8 {
                pub dwSize: u32,
                pub dwValidStats: u32,
                pub dwVoices: u32,
                pub dwTotalCPU: u32,
                pub dwCPUPerVoice: u32,
                pub dwLostNotes: u32,
                pub dwFreeMemory: u32,
                pub lPeakVolume: i32,
                pub dwSynthMemUse: u32,
            }
            impl DMUS_SYNTHSTATS8 {}
            impl ::std::default::Default for DMUS_SYNTHSTATS8 {
                fn default() -> Self {
                    Self {
                        dwSize: 0,
                        dwValidStats: 0,
                        dwVoices: 0,
                        dwTotalCPU: 0,
                        dwCPUPerVoice: 0,
                        dwLostNotes: 0,
                        dwFreeMemory: 0,
                        lPeakVolume: 0,
                        dwSynthMemUse: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DMUS_SYNTHSTATS8 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DMUS_SYNTHSTATS8")
                        .field("dwSize", &format_args!("{:?}", self.dwSize))
                        .field("dwValidStats", &format_args!("{:?}", self.dwValidStats))
                        .field("dwVoices", &format_args!("{:?}", self.dwVoices))
                        .field("dwTotalCPU", &format_args!("{:?}", self.dwTotalCPU))
                        .field("dwCPUPerVoice", &format_args!("{:?}", self.dwCPUPerVoice))
                        .field("dwLostNotes", &format_args!("{:?}", self.dwLostNotes))
                        .field("dwFreeMemory", &format_args!("{:?}", self.dwFreeMemory))
                        .field("lPeakVolume", &format_args!("{:?}", self.lPeakVolume))
                        .field("dwSynthMemUse", &format_args!("{:?}", self.dwSynthMemUse))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DMUS_SYNTHSTATS8 {
                fn eq(&self, other: &Self) -> bool {
                    self.dwSize == other.dwSize
                        && self.dwValidStats == other.dwValidStats
                        && self.dwVoices == other.dwVoices
                        && self.dwTotalCPU == other.dwTotalCPU
                        && self.dwCPUPerVoice == other.dwCPUPerVoice
                        && self.dwLostNotes == other.dwLostNotes
                        && self.dwFreeMemory == other.dwFreeMemory
                        && self.lPeakVolume == other.lPeakVolume
                        && self.dwSynthMemUse == other.dwSynthMemUse
                }
            }
            impl ::std::cmp::Eq for DMUS_SYNTHSTATS8 {}
            unsafe impl ::windows::Abi for DMUS_SYNTHSTATS8 {
                type Abi = Self;
            }
            pub const DMUS_SYNTHSTATS_CPU_PER_VOICE: u32 = 4u32;
            pub const DMUS_SYNTHSTATS_FREE_MEMORY: u32 = 32u32;
            pub const DMUS_SYNTHSTATS_LOST_NOTES: u32 = 8u32;
            pub const DMUS_SYNTHSTATS_PEAK_VOLUME: u32 = 16u32;
            pub const DMUS_SYNTHSTATS_TOTAL_CPU: u32 = 2u32;
            pub const DMUS_SYNTHSTATS_VOICES: u32 = 1u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DMUS_VOICE_STATE {
                pub bExists: super::SystemServices::BOOL,
                pub spPosition: u64,
            }
            impl DMUS_VOICE_STATE {}
            impl ::std::default::Default for DMUS_VOICE_STATE {
                fn default() -> Self {
                    Self {
                        bExists: ::std::default::Default::default(),
                        spPosition: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DMUS_VOICE_STATE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DMUS_VOICE_STATE")
                        .field("bExists", &format_args!("{:?}", self.bExists))
                        .field("spPosition", &format_args!("{:?}", self.spPosition))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DMUS_VOICE_STATE {
                fn eq(&self, other: &Self) -> bool {
                    self.bExists == other.bExists && self.spPosition == other.spPosition
                }
            }
            impl ::std::cmp::Eq for DMUS_VOICE_STATE {}
            unsafe impl ::windows::Abi for DMUS_VOICE_STATE {
                type Abi = Self;
            }
            pub const DMUS_VOLUME_MAX: u32 = 2000u32;
            pub const DMUS_VOLUME_MIN: i32 = -20000i32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DMUS_WAVE {
                pub ulFirstExtCkIdx: u32,
                pub ulCopyrightIdx: u32,
                pub ulWaveDataIdx: u32,
                pub WaveformatEx: super::Multimedia::WAVEFORMATEX,
            }
            impl DMUS_WAVE {}
            unsafe impl ::windows::Abi for DMUS_WAVE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DMUS_WAVEARTDL {
                pub ulDownloadIdIdx: u32,
                pub ulBus: u32,
                pub ulBuffers: u32,
                pub ulMasterDLId: u32,
                pub usOptions: u16,
            }
            impl DMUS_WAVEARTDL {}
            impl ::std::default::Default for DMUS_WAVEARTDL {
                fn default() -> Self {
                    Self {
                        ulDownloadIdIdx: 0,
                        ulBus: 0,
                        ulBuffers: 0,
                        ulMasterDLId: 0,
                        usOptions: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DMUS_WAVEARTDL {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DMUS_WAVEARTDL")
                        .field(
                            "ulDownloadIdIdx",
                            &format_args!("{:?}", self.ulDownloadIdIdx),
                        )
                        .field("ulBus", &format_args!("{:?}", self.ulBus))
                        .field("ulBuffers", &format_args!("{:?}", self.ulBuffers))
                        .field("ulMasterDLId", &format_args!("{:?}", self.ulMasterDLId))
                        .field("usOptions", &format_args!("{:?}", self.usOptions))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DMUS_WAVEARTDL {
                fn eq(&self, other: &Self) -> bool {
                    self.ulDownloadIdIdx == other.ulDownloadIdIdx
                        && self.ulBus == other.ulBus
                        && self.ulBuffers == other.ulBuffers
                        && self.ulMasterDLId == other.ulMasterDLId
                        && self.usOptions == other.usOptions
                }
            }
            impl ::std::cmp::Eq for DMUS_WAVEARTDL {}
            unsafe impl ::windows::Abi for DMUS_WAVEARTDL {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DMUS_WAVEDATA {
                pub cbSize: u32,
                pub byData: [u8; 4],
            }
            impl DMUS_WAVEDATA {}
            impl ::std::default::Default for DMUS_WAVEDATA {
                fn default() -> Self {
                    Self {
                        cbSize: 0,
                        byData: [0; 4],
                    }
                }
            }
            impl ::std::fmt::Debug for DMUS_WAVEDATA {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DMUS_WAVEDATA")
                        .field("cbSize", &format_args!("{:?}", self.cbSize))
                        .field("byData", &format_args!("{:?}", self.byData))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DMUS_WAVEDATA {
                fn eq(&self, other: &Self) -> bool {
                    self.cbSize == other.cbSize && self.byData == other.byData
                }
            }
            impl ::std::cmp::Eq for DMUS_WAVEDATA {}
            unsafe impl ::windows::Abi for DMUS_WAVEDATA {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DMUS_WAVEDL {
                pub cbWaveData: u32,
            }
            impl DMUS_WAVEDL {}
            impl ::std::default::Default for DMUS_WAVEDL {
                fn default() -> Self {
                    Self { cbWaveData: 0 }
                }
            }
            impl ::std::fmt::Debug for DMUS_WAVEDL {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DMUS_WAVEDL")
                        .field("cbWaveData", &format_args!("{:?}", self.cbWaveData))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DMUS_WAVEDL {
                fn eq(&self, other: &Self) -> bool {
                    self.cbWaveData == other.cbWaveData
                }
            }
            impl ::std::cmp::Eq for DMUS_WAVEDL {}
            unsafe impl ::windows::Abi for DMUS_WAVEDL {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DMUS_WAVES_REVERB_PARAMS {
                pub fInGain: f32,
                pub fReverbMix: f32,
                pub fReverbTime: f32,
                pub fHighFreqRTRatio: f32,
            }
            impl DMUS_WAVES_REVERB_PARAMS {}
            impl ::std::default::Default for DMUS_WAVES_REVERB_PARAMS {
                fn default() -> Self {
                    Self {
                        fInGain: 0.0,
                        fReverbMix: 0.0,
                        fReverbTime: 0.0,
                        fHighFreqRTRatio: 0.0,
                    }
                }
            }
            impl ::std::fmt::Debug for DMUS_WAVES_REVERB_PARAMS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DMUS_WAVES_REVERB_PARAMS")
                        .field("fInGain", &format_args!("{:?}", self.fInGain))
                        .field("fReverbMix", &format_args!("{:?}", self.fReverbMix))
                        .field("fReverbTime", &format_args!("{:?}", self.fReverbTime))
                        .field(
                            "fHighFreqRTRatio",
                            &format_args!("{:?}", self.fHighFreqRTRatio),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DMUS_WAVES_REVERB_PARAMS {
                fn eq(&self, other: &Self) -> bool {
                    self.fInGain == other.fInGain
                        && self.fReverbMix == other.fReverbMix
                        && self.fReverbTime == other.fReverbTime
                        && self.fHighFreqRTRatio == other.fHighFreqRTRatio
                }
            }
            impl ::std::cmp::Eq for DMUS_WAVES_REVERB_PARAMS {}
            unsafe impl ::windows::Abi for DMUS_WAVES_REVERB_PARAMS {
                type Abi = Self;
            }
            pub const DS3DALG_HRTF_FULL: ::windows::Guid = ::windows::Guid::from_values(
                3259052864,
                7195,
                4562,
                [148, 245, 0, 192, 79, 194, 138, 202],
            );
            pub const DS3DALG_HRTF_LIGHT: ::windows::Guid = ::windows::Guid::from_values(
                3259052866,
                7195,
                4562,
                [148, 245, 0, 192, 79, 194, 138, 202],
            );
            pub const DS3DALG_NO_VIRTUALIZATION: ::windows::Guid = ::windows::Guid::from_values(
                3259052863,
                7195,
                4562,
                [148, 245, 0, 192, 79, 194, 138, 202],
            );
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DS3DBUFFER {
                pub dwSize: u32,
                pub vPosition: super::Direct3D9::D3DVECTOR,
                pub vVelocity: super::Direct3D9::D3DVECTOR,
                pub dwInsideConeAngle: u32,
                pub dwOutsideConeAngle: u32,
                pub vConeOrientation: super::Direct3D9::D3DVECTOR,
                pub lConeOutsideVolume: i32,
                pub flMinDistance: f32,
                pub flMaxDistance: f32,
                pub dwMode: u32,
            }
            impl DS3DBUFFER {}
            impl ::std::default::Default for DS3DBUFFER {
                fn default() -> Self {
                    Self {
                        dwSize: 0,
                        vPosition: ::std::default::Default::default(),
                        vVelocity: ::std::default::Default::default(),
                        dwInsideConeAngle: 0,
                        dwOutsideConeAngle: 0,
                        vConeOrientation: ::std::default::Default::default(),
                        lConeOutsideVolume: 0,
                        flMinDistance: 0.0,
                        flMaxDistance: 0.0,
                        dwMode: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DS3DBUFFER {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DS3DBUFFER")
                        .field("dwSize", &format_args!("{:?}", self.dwSize))
                        .field("vPosition", &format_args!("{:?}", self.vPosition))
                        .field("vVelocity", &format_args!("{:?}", self.vVelocity))
                        .field(
                            "dwInsideConeAngle",
                            &format_args!("{:?}", self.dwInsideConeAngle),
                        )
                        .field(
                            "dwOutsideConeAngle",
                            &format_args!("{:?}", self.dwOutsideConeAngle),
                        )
                        .field(
                            "vConeOrientation",
                            &format_args!("{:?}", self.vConeOrientation),
                        )
                        .field(
                            "lConeOutsideVolume",
                            &format_args!("{:?}", self.lConeOutsideVolume),
                        )
                        .field("flMinDistance", &format_args!("{:?}", self.flMinDistance))
                        .field("flMaxDistance", &format_args!("{:?}", self.flMaxDistance))
                        .field("dwMode", &format_args!("{:?}", self.dwMode))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DS3DBUFFER {
                fn eq(&self, other: &Self) -> bool {
                    self.dwSize == other.dwSize
                        && self.vPosition == other.vPosition
                        && self.vVelocity == other.vVelocity
                        && self.dwInsideConeAngle == other.dwInsideConeAngle
                        && self.dwOutsideConeAngle == other.dwOutsideConeAngle
                        && self.vConeOrientation == other.vConeOrientation
                        && self.lConeOutsideVolume == other.lConeOutsideVolume
                        && self.flMinDistance == other.flMinDistance
                        && self.flMaxDistance == other.flMaxDistance
                        && self.dwMode == other.dwMode
                }
            }
            impl ::std::cmp::Eq for DS3DBUFFER {}
            unsafe impl ::windows::Abi for DS3DBUFFER {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DS3DLISTENER {
                pub dwSize: u32,
                pub vPosition: super::Direct3D9::D3DVECTOR,
                pub vVelocity: super::Direct3D9::D3DVECTOR,
                pub vOrientFront: super::Direct3D9::D3DVECTOR,
                pub vOrientTop: super::Direct3D9::D3DVECTOR,
                pub flDistanceFactor: f32,
                pub flRolloffFactor: f32,
                pub flDopplerFactor: f32,
            }
            impl DS3DLISTENER {}
            impl ::std::default::Default for DS3DLISTENER {
                fn default() -> Self {
                    Self {
                        dwSize: 0,
                        vPosition: ::std::default::Default::default(),
                        vVelocity: ::std::default::Default::default(),
                        vOrientFront: ::std::default::Default::default(),
                        vOrientTop: ::std::default::Default::default(),
                        flDistanceFactor: 0.0,
                        flRolloffFactor: 0.0,
                        flDopplerFactor: 0.0,
                    }
                }
            }
            impl ::std::fmt::Debug for DS3DLISTENER {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DS3DLISTENER")
                        .field("dwSize", &format_args!("{:?}", self.dwSize))
                        .field("vPosition", &format_args!("{:?}", self.vPosition))
                        .field("vVelocity", &format_args!("{:?}", self.vVelocity))
                        .field("vOrientFront", &format_args!("{:?}", self.vOrientFront))
                        .field("vOrientTop", &format_args!("{:?}", self.vOrientTop))
                        .field(
                            "flDistanceFactor",
                            &format_args!("{:?}", self.flDistanceFactor),
                        )
                        .field(
                            "flRolloffFactor",
                            &format_args!("{:?}", self.flRolloffFactor),
                        )
                        .field(
                            "flDopplerFactor",
                            &format_args!("{:?}", self.flDopplerFactor),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DS3DLISTENER {
                fn eq(&self, other: &Self) -> bool {
                    self.dwSize == other.dwSize
                        && self.vPosition == other.vPosition
                        && self.vVelocity == other.vVelocity
                        && self.vOrientFront == other.vOrientFront
                        && self.vOrientTop == other.vOrientTop
                        && self.flDistanceFactor == other.flDistanceFactor
                        && self.flRolloffFactor == other.flRolloffFactor
                        && self.flDopplerFactor == other.flDopplerFactor
                }
            }
            impl ::std::cmp::Eq for DS3DLISTENER {}
            unsafe impl ::windows::Abi for DS3DLISTENER {
                type Abi = Self;
            }
            pub const DS3DMODE_DISABLE: u32 = 2u32;
            pub const DS3DMODE_HEADRELATIVE: u32 = 1u32;
            pub const DS3DMODE_NORMAL: u32 = 0u32;
            pub const DS3D_DEFAULTCONEANGLE: u32 = 360u32;
            pub const DS3D_DEFAULTDISTANCEFACTOR: f32 = 1f32;
            pub const DS3D_DEFAULTDOPPLERFACTOR: f32 = 1f32;
            pub const DS3D_DEFAULTMAXDISTANCE: f32 = 1000000000f32;
            pub const DS3D_DEFAULTMINDISTANCE: f32 = 1f32;
            pub const DS3D_DEFAULTROLLOFFFACTOR: f32 = 1f32;
            pub const DS3D_DEFERRED: u32 = 1u32;
            pub const DS3D_IMMEDIATE: u32 = 0u32;
            pub const DS3D_MAXCONEANGLE: u32 = 360u32;
            pub const DS3D_MAXDOPPLERFACTOR: f32 = 10f32;
            pub const DS3D_MAXROLLOFFFACTOR: f32 = 10f32;
            pub const DS3D_MINCONEANGLE: u32 = 0u32;
            pub const DS3D_MINDOPPLERFACTOR: f32 = 0f32;
            pub const DS3D_MINROLLOFFFACTOR: f32 = 0f32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DSBCAPS {
                pub dwSize: u32,
                pub dwFlags: u32,
                pub dwBufferBytes: u32,
                pub dwUnlockTransferRate: u32,
                pub dwPlayCpuOverhead: u32,
            }
            impl DSBCAPS {}
            impl ::std::default::Default for DSBCAPS {
                fn default() -> Self {
                    Self {
                        dwSize: 0,
                        dwFlags: 0,
                        dwBufferBytes: 0,
                        dwUnlockTransferRate: 0,
                        dwPlayCpuOverhead: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DSBCAPS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DSBCAPS")
                        .field("dwSize", &format_args!("{:?}", self.dwSize))
                        .field("dwFlags", &format_args!("{:?}", self.dwFlags))
                        .field("dwBufferBytes", &format_args!("{:?}", self.dwBufferBytes))
                        .field(
                            "dwUnlockTransferRate",
                            &format_args!("{:?}", self.dwUnlockTransferRate),
                        )
                        .field(
                            "dwPlayCpuOverhead",
                            &format_args!("{:?}", self.dwPlayCpuOverhead),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DSBCAPS {
                fn eq(&self, other: &Self) -> bool {
                    self.dwSize == other.dwSize
                        && self.dwFlags == other.dwFlags
                        && self.dwBufferBytes == other.dwBufferBytes
                        && self.dwUnlockTransferRate == other.dwUnlockTransferRate
                        && self.dwPlayCpuOverhead == other.dwPlayCpuOverhead
                }
            }
            impl ::std::cmp::Eq for DSBCAPS {}
            unsafe impl ::windows::Abi for DSBCAPS {
                type Abi = Self;
            }
            pub const DSBCAPS_CTRL3D: u32 = 16u32;
            pub const DSBCAPS_CTRLFREQUENCY: u32 = 32u32;
            pub const DSBCAPS_CTRLFX: u32 = 512u32;
            pub const DSBCAPS_CTRLPAN: u32 = 64u32;
            pub const DSBCAPS_CTRLPOSITIONNOTIFY: u32 = 256u32;
            pub const DSBCAPS_CTRLVOLUME: u32 = 128u32;
            pub const DSBCAPS_GETCURRENTPOSITION2: u32 = 65536u32;
            pub const DSBCAPS_GLOBALFOCUS: u32 = 32768u32;
            pub const DSBCAPS_LOCDEFER: u32 = 262144u32;
            pub const DSBCAPS_LOCHARDWARE: u32 = 4u32;
            pub const DSBCAPS_LOCSOFTWARE: u32 = 8u32;
            pub const DSBCAPS_MUTE3DATMAXDISTANCE: u32 = 131072u32;
            pub const DSBCAPS_PRIMARYBUFFER: u32 = 1u32;
            pub const DSBCAPS_STATIC: u32 = 2u32;
            pub const DSBCAPS_STICKYFOCUS: u32 = 16384u32;
            pub const DSBCAPS_TRUEPLAYPOSITION: u32 = 524288u32;
            pub const DSBFREQUENCY_MAX: u32 = 200000u32;
            pub const DSBFREQUENCY_MIN: u32 = 100u32;
            pub const DSBFREQUENCY_ORIGINAL: u32 = 0u32;
            pub const DSBLOCK_ENTIREBUFFER: u32 = 2u32;
            pub const DSBLOCK_FROMWRITECURSOR: u32 = 1u32;
            pub const DSBNOTIFICATIONS_MAX: u32 = 100000u32;
            pub const DSBPAN_CENTER: u32 = 0u32;
            pub const DSBPAN_LEFT: i32 = -10000i32;
            pub const DSBPAN_RIGHT: u32 = 10000u32;
            pub const DSBPLAY_LOCHARDWARE: u32 = 2u32;
            pub const DSBPLAY_LOCSOFTWARE: u32 = 4u32;
            pub const DSBPLAY_LOOPING: u32 = 1u32;
            pub const DSBPLAY_TERMINATEBY_DISTANCE: u64 = 16u64;
            pub const DSBPLAY_TERMINATEBY_PRIORITY: u64 = 32u64;
            pub const DSBPLAY_TERMINATEBY_TIME: u32 = 8u32;
            pub const DSBPN_OFFSETSTOP: u32 = 4294967295u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DSBPOSITIONNOTIFY {
                pub dwOffset: u32,
                pub hEventNotify: super::SystemServices::HANDLE,
            }
            impl DSBPOSITIONNOTIFY {}
            impl ::std::default::Default for DSBPOSITIONNOTIFY {
                fn default() -> Self {
                    Self {
                        dwOffset: 0,
                        hEventNotify: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for DSBPOSITIONNOTIFY {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DSBPOSITIONNOTIFY")
                        .field("dwOffset", &format_args!("{:?}", self.dwOffset))
                        .field("hEventNotify", &format_args!("{:?}", self.hEventNotify))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DSBPOSITIONNOTIFY {
                fn eq(&self, other: &Self) -> bool {
                    self.dwOffset == other.dwOffset && self.hEventNotify == other.hEventNotify
                }
            }
            impl ::std::cmp::Eq for DSBPOSITIONNOTIFY {}
            unsafe impl ::windows::Abi for DSBPOSITIONNOTIFY {
                type Abi = Self;
            }
            pub const DSBSIZE_FX_MIN: u32 = 150u32;
            pub const DSBSIZE_MAX: u32 = 268435455u32;
            pub const DSBSIZE_MIN: u32 = 4u32;
            pub const DSBSTATUS_BUFFERLOST: u32 = 2u32;
            pub const DSBSTATUS_LOCHARDWARE: u32 = 8u32;
            pub const DSBSTATUS_LOCSOFTWARE: u32 = 16u32;
            pub const DSBSTATUS_LOOPING: u32 = 4u32;
            pub const DSBSTATUS_PLAYING: u32 = 1u32;
            pub const DSBSTATUS_TERMINATED: u32 = 32u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DSBUFFERDESC {
                pub dwSize: u32,
                pub dwFlags: u32,
                pub dwBufferBytes: u32,
                pub dwReserved: u32,
                pub lpwfxFormat: *mut super::Multimedia::WAVEFORMATEX,
                pub guid3DAlgorithm: ::windows::Guid,
            }
            impl DSBUFFERDESC {}
            impl ::std::default::Default for DSBUFFERDESC {
                fn default() -> Self {
                    Self {
                        dwSize: 0,
                        dwFlags: 0,
                        dwBufferBytes: 0,
                        dwReserved: 0,
                        lpwfxFormat: ::std::ptr::null_mut(),
                        guid3DAlgorithm: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for DSBUFFERDESC {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DSBUFFERDESC")
                        .field("dwSize", &format_args!("{:?}", self.dwSize))
                        .field("dwFlags", &format_args!("{:?}", self.dwFlags))
                        .field("dwBufferBytes", &format_args!("{:?}", self.dwBufferBytes))
                        .field("dwReserved", &format_args!("{:?}", self.dwReserved))
                        .field("lpwfxFormat", &format_args!("{:?}", self.lpwfxFormat))
                        .field(
                            "guid3DAlgorithm",
                            &format_args!("{:?}", self.guid3DAlgorithm),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DSBUFFERDESC {
                fn eq(&self, other: &Self) -> bool {
                    self.dwSize == other.dwSize
                        && self.dwFlags == other.dwFlags
                        && self.dwBufferBytes == other.dwBufferBytes
                        && self.dwReserved == other.dwReserved
                        && self.lpwfxFormat == other.lpwfxFormat
                        && self.guid3DAlgorithm == other.guid3DAlgorithm
                }
            }
            impl ::std::cmp::Eq for DSBUFFERDESC {}
            unsafe impl ::windows::Abi for DSBUFFERDESC {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DSBUFFERDESC1 {
                pub dwSize: u32,
                pub dwFlags: u32,
                pub dwBufferBytes: u32,
                pub dwReserved: u32,
                pub lpwfxFormat: *mut super::Multimedia::WAVEFORMATEX,
            }
            impl DSBUFFERDESC1 {}
            impl ::std::default::Default for DSBUFFERDESC1 {
                fn default() -> Self {
                    Self {
                        dwSize: 0,
                        dwFlags: 0,
                        dwBufferBytes: 0,
                        dwReserved: 0,
                        lpwfxFormat: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for DSBUFFERDESC1 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DSBUFFERDESC1")
                        .field("dwSize", &format_args!("{:?}", self.dwSize))
                        .field("dwFlags", &format_args!("{:?}", self.dwFlags))
                        .field("dwBufferBytes", &format_args!("{:?}", self.dwBufferBytes))
                        .field("dwReserved", &format_args!("{:?}", self.dwReserved))
                        .field("lpwfxFormat", &format_args!("{:?}", self.lpwfxFormat))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DSBUFFERDESC1 {
                fn eq(&self, other: &Self) -> bool {
                    self.dwSize == other.dwSize
                        && self.dwFlags == other.dwFlags
                        && self.dwBufferBytes == other.dwBufferBytes
                        && self.dwReserved == other.dwReserved
                        && self.lpwfxFormat == other.lpwfxFormat
                }
            }
            impl ::std::cmp::Eq for DSBUFFERDESC1 {}
            unsafe impl ::windows::Abi for DSBUFFERDESC1 {
                type Abi = Self;
            }
            pub const DSBUSID_BACK_CENTER: u32 = 8u32;
            pub const DSBUSID_BACK_LEFT: u32 = 4u32;
            pub const DSBUSID_BACK_RIGHT: u32 = 5u32;
            pub const DSBUSID_CHORUS_SEND: u32 = 65u32;
            pub const DSBUSID_DYNAMIC_0: u32 = 512u32;
            pub const DSBUSID_FIRST_SPKR_LOC: u32 = 0u32;
            pub const DSBUSID_FRONT_CENTER: u32 = 2u32;
            pub const DSBUSID_FRONT_LEFT: u32 = 0u32;
            pub const DSBUSID_FRONT_LEFT_OF_CENTER: u32 = 6u32;
            pub const DSBUSID_FRONT_RIGHT: u32 = 1u32;
            pub const DSBUSID_FRONT_RIGHT_OF_CENTER: u32 = 7u32;
            pub const DSBUSID_LAST_SPKR_LOC: u32 = 17u32;
            pub const DSBUSID_LEFT: u32 = 0u32;
            pub const DSBUSID_LOW_FREQUENCY: u32 = 3u32;
            pub const DSBUSID_NULL: u32 = 4294967295u32;
            pub const DSBUSID_REVERB_SEND: u32 = 64u32;
            pub const DSBUSID_RIGHT: u32 = 1u32;
            pub const DSBUSID_SIDE_LEFT: u32 = 9u32;
            pub const DSBUSID_SIDE_RIGHT: u32 = 10u32;
            pub const DSBUSID_TOP_BACK_CENTER: u32 = 16u32;
            pub const DSBUSID_TOP_BACK_LEFT: u32 = 15u32;
            pub const DSBUSID_TOP_BACK_RIGHT: u32 = 17u32;
            pub const DSBUSID_TOP_CENTER: u32 = 11u32;
            pub const DSBUSID_TOP_FRONT_CENTER: u32 = 13u32;
            pub const DSBUSID_TOP_FRONT_LEFT: u32 = 12u32;
            pub const DSBUSID_TOP_FRONT_RIGHT: u32 = 14u32;
            pub const DSBVOLUME_MAX: u32 = 0u32;
            pub const DSBVOLUME_MIN: i32 = -10000i32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DSCAPS {
                pub dwSize: u32,
                pub dwFlags: u32,
                pub dwMinSecondarySampleRate: u32,
                pub dwMaxSecondarySampleRate: u32,
                pub dwPrimaryBuffers: u32,
                pub dwMaxHwMixingAllBuffers: u32,
                pub dwMaxHwMixingStaticBuffers: u32,
                pub dwMaxHwMixingStreamingBuffers: u32,
                pub dwFreeHwMixingAllBuffers: u32,
                pub dwFreeHwMixingStaticBuffers: u32,
                pub dwFreeHwMixingStreamingBuffers: u32,
                pub dwMaxHw3DAllBuffers: u32,
                pub dwMaxHw3DStaticBuffers: u32,
                pub dwMaxHw3DStreamingBuffers: u32,
                pub dwFreeHw3DAllBuffers: u32,
                pub dwFreeHw3DStaticBuffers: u32,
                pub dwFreeHw3DStreamingBuffers: u32,
                pub dwTotalHwMemBytes: u32,
                pub dwFreeHwMemBytes: u32,
                pub dwMaxContigFreeHwMemBytes: u32,
                pub dwUnlockTransferRateHwBuffers: u32,
                pub dwPlayCpuOverheadSwBuffers: u32,
                pub dwReserved1: u32,
                pub dwReserved2: u32,
            }
            impl DSCAPS {}
            impl ::std::default::Default for DSCAPS {
                fn default() -> Self {
                    Self {
                        dwSize: 0,
                        dwFlags: 0,
                        dwMinSecondarySampleRate: 0,
                        dwMaxSecondarySampleRate: 0,
                        dwPrimaryBuffers: 0,
                        dwMaxHwMixingAllBuffers: 0,
                        dwMaxHwMixingStaticBuffers: 0,
                        dwMaxHwMixingStreamingBuffers: 0,
                        dwFreeHwMixingAllBuffers: 0,
                        dwFreeHwMixingStaticBuffers: 0,
                        dwFreeHwMixingStreamingBuffers: 0,
                        dwMaxHw3DAllBuffers: 0,
                        dwMaxHw3DStaticBuffers: 0,
                        dwMaxHw3DStreamingBuffers: 0,
                        dwFreeHw3DAllBuffers: 0,
                        dwFreeHw3DStaticBuffers: 0,
                        dwFreeHw3DStreamingBuffers: 0,
                        dwTotalHwMemBytes: 0,
                        dwFreeHwMemBytes: 0,
                        dwMaxContigFreeHwMemBytes: 0,
                        dwUnlockTransferRateHwBuffers: 0,
                        dwPlayCpuOverheadSwBuffers: 0,
                        dwReserved1: 0,
                        dwReserved2: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DSCAPS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DSCAPS")
                        .field("dwSize", &format_args!("{:?}", self.dwSize))
                        .field("dwFlags", &format_args!("{:?}", self.dwFlags))
                        .field(
                            "dwMinSecondarySampleRate",
                            &format_args!("{:?}", self.dwMinSecondarySampleRate),
                        )
                        .field(
                            "dwMaxSecondarySampleRate",
                            &format_args!("{:?}", self.dwMaxSecondarySampleRate),
                        )
                        .field(
                            "dwPrimaryBuffers",
                            &format_args!("{:?}", self.dwPrimaryBuffers),
                        )
                        .field(
                            "dwMaxHwMixingAllBuffers",
                            &format_args!("{:?}", self.dwMaxHwMixingAllBuffers),
                        )
                        .field(
                            "dwMaxHwMixingStaticBuffers",
                            &format_args!("{:?}", self.dwMaxHwMixingStaticBuffers),
                        )
                        .field(
                            "dwMaxHwMixingStreamingBuffers",
                            &format_args!("{:?}", self.dwMaxHwMixingStreamingBuffers),
                        )
                        .field(
                            "dwFreeHwMixingAllBuffers",
                            &format_args!("{:?}", self.dwFreeHwMixingAllBuffers),
                        )
                        .field(
                            "dwFreeHwMixingStaticBuffers",
                            &format_args!("{:?}", self.dwFreeHwMixingStaticBuffers),
                        )
                        .field(
                            "dwFreeHwMixingStreamingBuffers",
                            &format_args!("{:?}", self.dwFreeHwMixingStreamingBuffers),
                        )
                        .field(
                            "dwMaxHw3DAllBuffers",
                            &format_args!("{:?}", self.dwMaxHw3DAllBuffers),
                        )
                        .field(
                            "dwMaxHw3DStaticBuffers",
                            &format_args!("{:?}", self.dwMaxHw3DStaticBuffers),
                        )
                        .field(
                            "dwMaxHw3DStreamingBuffers",
                            &format_args!("{:?}", self.dwMaxHw3DStreamingBuffers),
                        )
                        .field(
                            "dwFreeHw3DAllBuffers",
                            &format_args!("{:?}", self.dwFreeHw3DAllBuffers),
                        )
                        .field(
                            "dwFreeHw3DStaticBuffers",
                            &format_args!("{:?}", self.dwFreeHw3DStaticBuffers),
                        )
                        .field(
                            "dwFreeHw3DStreamingBuffers",
                            &format_args!("{:?}", self.dwFreeHw3DStreamingBuffers),
                        )
                        .field(
                            "dwTotalHwMemBytes",
                            &format_args!("{:?}", self.dwTotalHwMemBytes),
                        )
                        .field(
                            "dwFreeHwMemBytes",
                            &format_args!("{:?}", self.dwFreeHwMemBytes),
                        )
                        .field(
                            "dwMaxContigFreeHwMemBytes",
                            &format_args!("{:?}", self.dwMaxContigFreeHwMemBytes),
                        )
                        .field(
                            "dwUnlockTransferRateHwBuffers",
                            &format_args!("{:?}", self.dwUnlockTransferRateHwBuffers),
                        )
                        .field(
                            "dwPlayCpuOverheadSwBuffers",
                            &format_args!("{:?}", self.dwPlayCpuOverheadSwBuffers),
                        )
                        .field("dwReserved1", &format_args!("{:?}", self.dwReserved1))
                        .field("dwReserved2", &format_args!("{:?}", self.dwReserved2))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DSCAPS {
                fn eq(&self, other: &Self) -> bool {
                    self.dwSize == other.dwSize
                        && self.dwFlags == other.dwFlags
                        && self.dwMinSecondarySampleRate == other.dwMinSecondarySampleRate
                        && self.dwMaxSecondarySampleRate == other.dwMaxSecondarySampleRate
                        && self.dwPrimaryBuffers == other.dwPrimaryBuffers
                        && self.dwMaxHwMixingAllBuffers == other.dwMaxHwMixingAllBuffers
                        && self.dwMaxHwMixingStaticBuffers == other.dwMaxHwMixingStaticBuffers
                        && self.dwMaxHwMixingStreamingBuffers == other.dwMaxHwMixingStreamingBuffers
                        && self.dwFreeHwMixingAllBuffers == other.dwFreeHwMixingAllBuffers
                        && self.dwFreeHwMixingStaticBuffers == other.dwFreeHwMixingStaticBuffers
                        && self.dwFreeHwMixingStreamingBuffers
                            == other.dwFreeHwMixingStreamingBuffers
                        && self.dwMaxHw3DAllBuffers == other.dwMaxHw3DAllBuffers
                        && self.dwMaxHw3DStaticBuffers == other.dwMaxHw3DStaticBuffers
                        && self.dwMaxHw3DStreamingBuffers == other.dwMaxHw3DStreamingBuffers
                        && self.dwFreeHw3DAllBuffers == other.dwFreeHw3DAllBuffers
                        && self.dwFreeHw3DStaticBuffers == other.dwFreeHw3DStaticBuffers
                        && self.dwFreeHw3DStreamingBuffers == other.dwFreeHw3DStreamingBuffers
                        && self.dwTotalHwMemBytes == other.dwTotalHwMemBytes
                        && self.dwFreeHwMemBytes == other.dwFreeHwMemBytes
                        && self.dwMaxContigFreeHwMemBytes == other.dwMaxContigFreeHwMemBytes
                        && self.dwUnlockTransferRateHwBuffers == other.dwUnlockTransferRateHwBuffers
                        && self.dwPlayCpuOverheadSwBuffers == other.dwPlayCpuOverheadSwBuffers
                        && self.dwReserved1 == other.dwReserved1
                        && self.dwReserved2 == other.dwReserved2
                }
            }
            impl ::std::cmp::Eq for DSCAPS {}
            unsafe impl ::windows::Abi for DSCAPS {
                type Abi = Self;
            }
            pub const DSCAPS_CERTIFIED: u32 = 64u32;
            pub const DSCAPS_CONTINUOUSRATE: u32 = 16u32;
            pub const DSCAPS_EMULDRIVER: u32 = 32u32;
            pub const DSCAPS_PRIMARY16BIT: u32 = 8u32;
            pub const DSCAPS_PRIMARY8BIT: u32 = 4u32;
            pub const DSCAPS_PRIMARYMONO: u32 = 1u32;
            pub const DSCAPS_PRIMARYSTEREO: u32 = 2u32;
            pub const DSCAPS_SECONDARY16BIT: u32 = 2048u32;
            pub const DSCAPS_SECONDARY8BIT: u32 = 1024u32;
            pub const DSCAPS_SECONDARYMONO: u32 = 256u32;
            pub const DSCAPS_SECONDARYSTEREO: u32 = 512u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DSCBCAPS {
                pub dwSize: u32,
                pub dwFlags: u32,
                pub dwBufferBytes: u32,
                pub dwReserved: u32,
            }
            impl DSCBCAPS {}
            impl ::std::default::Default for DSCBCAPS {
                fn default() -> Self {
                    Self {
                        dwSize: 0,
                        dwFlags: 0,
                        dwBufferBytes: 0,
                        dwReserved: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DSCBCAPS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DSCBCAPS")
                        .field("dwSize", &format_args!("{:?}", self.dwSize))
                        .field("dwFlags", &format_args!("{:?}", self.dwFlags))
                        .field("dwBufferBytes", &format_args!("{:?}", self.dwBufferBytes))
                        .field("dwReserved", &format_args!("{:?}", self.dwReserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DSCBCAPS {
                fn eq(&self, other: &Self) -> bool {
                    self.dwSize == other.dwSize
                        && self.dwFlags == other.dwFlags
                        && self.dwBufferBytes == other.dwBufferBytes
                        && self.dwReserved == other.dwReserved
                }
            }
            impl ::std::cmp::Eq for DSCBCAPS {}
            unsafe impl ::windows::Abi for DSCBCAPS {
                type Abi = Self;
            }
            pub const DSCBCAPS_CTRLFX: u32 = 512u32;
            pub const DSCBCAPS_WAVEMAPPED: u32 = 2147483648u32;
            pub const DSCBLOCK_ENTIREBUFFER: u32 = 1u32;
            pub const DSCBSTART_LOOPING: u32 = 1u32;
            pub const DSCBSTATUS_CAPTURING: u32 = 1u32;
            pub const DSCBSTATUS_LOOPING: u32 = 2u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DSCEFFECTDESC {
                pub dwSize: u32,
                pub dwFlags: u32,
                pub guidDSCFXClass: ::windows::Guid,
                pub guidDSCFXInstance: ::windows::Guid,
                pub dwReserved1: u32,
                pub dwReserved2: u32,
            }
            impl DSCEFFECTDESC {}
            impl ::std::default::Default for DSCEFFECTDESC {
                fn default() -> Self {
                    Self {
                        dwSize: 0,
                        dwFlags: 0,
                        guidDSCFXClass: ::std::default::Default::default(),
                        guidDSCFXInstance: ::std::default::Default::default(),
                        dwReserved1: 0,
                        dwReserved2: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DSCEFFECTDESC {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DSCEFFECTDESC")
                        .field("dwSize", &format_args!("{:?}", self.dwSize))
                        .field("dwFlags", &format_args!("{:?}", self.dwFlags))
                        .field("guidDSCFXClass", &format_args!("{:?}", self.guidDSCFXClass))
                        .field(
                            "guidDSCFXInstance",
                            &format_args!("{:?}", self.guidDSCFXInstance),
                        )
                        .field("dwReserved1", &format_args!("{:?}", self.dwReserved1))
                        .field("dwReserved2", &format_args!("{:?}", self.dwReserved2))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DSCEFFECTDESC {
                fn eq(&self, other: &Self) -> bool {
                    self.dwSize == other.dwSize
                        && self.dwFlags == other.dwFlags
                        && self.guidDSCFXClass == other.guidDSCFXClass
                        && self.guidDSCFXInstance == other.guidDSCFXInstance
                        && self.dwReserved1 == other.dwReserved1
                        && self.dwReserved2 == other.dwReserved2
                }
            }
            impl ::std::cmp::Eq for DSCEFFECTDESC {}
            unsafe impl ::windows::Abi for DSCEFFECTDESC {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DSCBUFFERDESC {
                pub dwSize: u32,
                pub dwFlags: u32,
                pub dwBufferBytes: u32,
                pub dwReserved: u32,
                pub lpwfxFormat: *mut super::Multimedia::WAVEFORMATEX,
                pub dwFXCount: u32,
                pub lpDSCFXDesc: *mut DSCEFFECTDESC,
            }
            impl DSCBUFFERDESC {}
            impl ::std::default::Default for DSCBUFFERDESC {
                fn default() -> Self {
                    Self {
                        dwSize: 0,
                        dwFlags: 0,
                        dwBufferBytes: 0,
                        dwReserved: 0,
                        lpwfxFormat: ::std::ptr::null_mut(),
                        dwFXCount: 0,
                        lpDSCFXDesc: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for DSCBUFFERDESC {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DSCBUFFERDESC")
                        .field("dwSize", &format_args!("{:?}", self.dwSize))
                        .field("dwFlags", &format_args!("{:?}", self.dwFlags))
                        .field("dwBufferBytes", &format_args!("{:?}", self.dwBufferBytes))
                        .field("dwReserved", &format_args!("{:?}", self.dwReserved))
                        .field("lpwfxFormat", &format_args!("{:?}", self.lpwfxFormat))
                        .field("dwFXCount", &format_args!("{:?}", self.dwFXCount))
                        .field("lpDSCFXDesc", &format_args!("{:?}", self.lpDSCFXDesc))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DSCBUFFERDESC {
                fn eq(&self, other: &Self) -> bool {
                    self.dwSize == other.dwSize
                        && self.dwFlags == other.dwFlags
                        && self.dwBufferBytes == other.dwBufferBytes
                        && self.dwReserved == other.dwReserved
                        && self.lpwfxFormat == other.lpwfxFormat
                        && self.dwFXCount == other.dwFXCount
                        && self.lpDSCFXDesc == other.lpDSCFXDesc
                }
            }
            impl ::std::cmp::Eq for DSCBUFFERDESC {}
            unsafe impl ::windows::Abi for DSCBUFFERDESC {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DSCBUFFERDESC1 {
                pub dwSize: u32,
                pub dwFlags: u32,
                pub dwBufferBytes: u32,
                pub dwReserved: u32,
                pub lpwfxFormat: *mut super::Multimedia::WAVEFORMATEX,
            }
            impl DSCBUFFERDESC1 {}
            impl ::std::default::Default for DSCBUFFERDESC1 {
                fn default() -> Self {
                    Self {
                        dwSize: 0,
                        dwFlags: 0,
                        dwBufferBytes: 0,
                        dwReserved: 0,
                        lpwfxFormat: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for DSCBUFFERDESC1 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DSCBUFFERDESC1")
                        .field("dwSize", &format_args!("{:?}", self.dwSize))
                        .field("dwFlags", &format_args!("{:?}", self.dwFlags))
                        .field("dwBufferBytes", &format_args!("{:?}", self.dwBufferBytes))
                        .field("dwReserved", &format_args!("{:?}", self.dwReserved))
                        .field("lpwfxFormat", &format_args!("{:?}", self.lpwfxFormat))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DSCBUFFERDESC1 {
                fn eq(&self, other: &Self) -> bool {
                    self.dwSize == other.dwSize
                        && self.dwFlags == other.dwFlags
                        && self.dwBufferBytes == other.dwBufferBytes
                        && self.dwReserved == other.dwReserved
                        && self.lpwfxFormat == other.lpwfxFormat
                }
            }
            impl ::std::cmp::Eq for DSCBUFFERDESC1 {}
            unsafe impl ::windows::Abi for DSCBUFFERDESC1 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DSCCAPS {
                pub dwSize: u32,
                pub dwFlags: u32,
                pub dwFormats: u32,
                pub dwChannels: u32,
            }
            impl DSCCAPS {}
            impl ::std::default::Default for DSCCAPS {
                fn default() -> Self {
                    Self {
                        dwSize: 0,
                        dwFlags: 0,
                        dwFormats: 0,
                        dwChannels: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DSCCAPS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DSCCAPS")
                        .field("dwSize", &format_args!("{:?}", self.dwSize))
                        .field("dwFlags", &format_args!("{:?}", self.dwFlags))
                        .field("dwFormats", &format_args!("{:?}", self.dwFormats))
                        .field("dwChannels", &format_args!("{:?}", self.dwChannels))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DSCCAPS {
                fn eq(&self, other: &Self) -> bool {
                    self.dwSize == other.dwSize
                        && self.dwFlags == other.dwFlags
                        && self.dwFormats == other.dwFormats
                        && self.dwChannels == other.dwChannels
                }
            }
            impl ::std::cmp::Eq for DSCCAPS {}
            unsafe impl ::windows::Abi for DSCCAPS {
                type Abi = Self;
            }
            pub const DSCCAPS_MULTIPLECAPTURE: u32 = 1u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DSCFXAec {
                pub fEnable: super::SystemServices::BOOL,
                pub fNoiseFill: super::SystemServices::BOOL,
                pub dwMode: u32,
            }
            impl DSCFXAec {}
            impl ::std::default::Default for DSCFXAec {
                fn default() -> Self {
                    Self {
                        fEnable: ::std::default::Default::default(),
                        fNoiseFill: ::std::default::Default::default(),
                        dwMode: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DSCFXAec {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DSCFXAec")
                        .field("fEnable", &format_args!("{:?}", self.fEnable))
                        .field("fNoiseFill", &format_args!("{:?}", self.fNoiseFill))
                        .field("dwMode", &format_args!("{:?}", self.dwMode))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DSCFXAec {
                fn eq(&self, other: &Self) -> bool {
                    self.fEnable == other.fEnable
                        && self.fNoiseFill == other.fNoiseFill
                        && self.dwMode == other.dwMode
                }
            }
            impl ::std::cmp::Eq for DSCFXAec {}
            unsafe impl ::windows::Abi for DSCFXAec {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DSCFXNoiseSuppress {
                pub fEnable: super::SystemServices::BOOL,
            }
            impl DSCFXNoiseSuppress {}
            impl ::std::default::Default for DSCFXNoiseSuppress {
                fn default() -> Self {
                    Self {
                        fEnable: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for DSCFXNoiseSuppress {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DSCFXNoiseSuppress")
                        .field("fEnable", &format_args!("{:?}", self.fEnable))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DSCFXNoiseSuppress {
                fn eq(&self, other: &Self) -> bool {
                    self.fEnable == other.fEnable
                }
            }
            impl ::std::cmp::Eq for DSCFXNoiseSuppress {}
            unsafe impl ::windows::Abi for DSCFXNoiseSuppress {
                type Abi = Self;
            }
            pub const DSCFX_AEC_MODE_FULL_DUPLEX: u32 = 2u32;
            pub const DSCFX_AEC_MODE_HALF_DUPLEX: u32 = 1u32;
            pub const DSCFX_AEC_MODE_PASS_THROUGH: u32 = 0u32;
            pub const DSCFX_AEC_STATUS_CURRENTLY_CONVERGED: u32 = 8u32;
            pub const DSCFX_AEC_STATUS_HISTORY_CONTINUOUSLY_CONVERGED: u32 = 1u32;
            pub const DSCFX_AEC_STATUS_HISTORY_PREVIOUSLY_DIVERGED: u32 = 2u32;
            pub const DSCFX_AEC_STATUS_HISTORY_UNINITIALIZED: u32 = 0u32;
            pub const DSDEVID_DefaultCapture: ::windows::Guid = ::windows::Guid::from_values(
                3740270593,
                40045,
                18413,
                [170, 241, 77, 218, 143, 43, 92, 3],
            );
            pub const DSDEVID_DefaultPlayback: ::windows::Guid = ::windows::Guid::from_values(
                3740270592,
                40045,
                18413,
                [170, 241, 77, 218, 143, 43, 92, 3],
            );
            pub const DSDEVID_DefaultVoiceCapture: ::windows::Guid = ::windows::Guid::from_values(
                3740270595,
                40045,
                18413,
                [170, 241, 77, 218, 143, 43, 92, 3],
            );
            pub const DSDEVID_DefaultVoicePlayback: ::windows::Guid = ::windows::Guid::from_values(
                3740270594,
                40045,
                18413,
                [170, 241, 77, 218, 143, 43, 92, 3],
            );
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DSEFFECTDESC {
                pub dwSize: u32,
                pub dwFlags: u32,
                pub guidDSFXClass: ::windows::Guid,
                pub dwReserved1: usize,
                pub dwReserved2: usize,
            }
            impl DSEFFECTDESC {}
            impl ::std::default::Default for DSEFFECTDESC {
                fn default() -> Self {
                    Self {
                        dwSize: 0,
                        dwFlags: 0,
                        guidDSFXClass: ::std::default::Default::default(),
                        dwReserved1: 0,
                        dwReserved2: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DSEFFECTDESC {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DSEFFECTDESC")
                        .field("dwSize", &format_args!("{:?}", self.dwSize))
                        .field("dwFlags", &format_args!("{:?}", self.dwFlags))
                        .field("guidDSFXClass", &format_args!("{:?}", self.guidDSFXClass))
                        .field("dwReserved1", &format_args!("{:?}", self.dwReserved1))
                        .field("dwReserved2", &format_args!("{:?}", self.dwReserved2))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DSEFFECTDESC {
                fn eq(&self, other: &Self) -> bool {
                    self.dwSize == other.dwSize
                        && self.dwFlags == other.dwFlags
                        && self.guidDSFXClass == other.guidDSFXClass
                        && self.dwReserved1 == other.dwReserved1
                        && self.dwReserved2 == other.dwReserved2
                }
            }
            impl ::std::cmp::Eq for DSEFFECTDESC {}
            unsafe impl ::windows::Abi for DSEFFECTDESC {
                type Abi = Self;
            }
            pub const DSFXCHORUS_DELAY_MAX: f32 = 20f32;
            pub const DSFXCHORUS_DELAY_MIN: f32 = 0f32;
            pub const DSFXCHORUS_DEPTH_MAX: f32 = 100f32;
            pub const DSFXCHORUS_DEPTH_MIN: f32 = 0f32;
            pub const DSFXCHORUS_FEEDBACK_MAX: f32 = 99f32;
            pub const DSFXCHORUS_FEEDBACK_MIN: f32 = -99f32;
            pub const DSFXCHORUS_FREQUENCY_MAX: f32 = 10f32;
            pub const DSFXCHORUS_FREQUENCY_MIN: f32 = 0f32;
            pub const DSFXCHORUS_PHASE_180: u32 = 4u32;
            pub const DSFXCHORUS_PHASE_90: u32 = 3u32;
            pub const DSFXCHORUS_PHASE_MAX: u32 = 4u32;
            pub const DSFXCHORUS_PHASE_MIN: u32 = 0u32;
            pub const DSFXCHORUS_PHASE_NEG_180: u32 = 0u32;
            pub const DSFXCHORUS_PHASE_NEG_90: u32 = 1u32;
            pub const DSFXCHORUS_PHASE_ZERO: u32 = 2u32;
            pub const DSFXCHORUS_WAVE_SIN: u32 = 1u32;
            pub const DSFXCHORUS_WAVE_TRIANGLE: u32 = 0u32;
            pub const DSFXCHORUS_WETDRYMIX_MAX: f32 = 100f32;
            pub const DSFXCHORUS_WETDRYMIX_MIN: f32 = 0f32;
            pub const DSFXCOMPRESSOR_ATTACK_MAX: f32 = 500f32;
            pub const DSFXCOMPRESSOR_ATTACK_MIN: f32 = 0.01f32;
            pub const DSFXCOMPRESSOR_GAIN_MAX: f32 = 60f32;
            pub const DSFXCOMPRESSOR_GAIN_MIN: f32 = -60f32;
            pub const DSFXCOMPRESSOR_PREDELAY_MAX: f32 = 4f32;
            pub const DSFXCOMPRESSOR_PREDELAY_MIN: f32 = 0f32;
            pub const DSFXCOMPRESSOR_RATIO_MAX: f32 = 100f32;
            pub const DSFXCOMPRESSOR_RATIO_MIN: f32 = 1f32;
            pub const DSFXCOMPRESSOR_RELEASE_MAX: f32 = 3000f32;
            pub const DSFXCOMPRESSOR_RELEASE_MIN: f32 = 50f32;
            pub const DSFXCOMPRESSOR_THRESHOLD_MAX: f32 = 0f32;
            pub const DSFXCOMPRESSOR_THRESHOLD_MIN: f32 = -60f32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DSFXChorus {
                pub fWetDryMix: f32,
                pub fDepth: f32,
                pub fFeedback: f32,
                pub fFrequency: f32,
                pub lWaveform: i32,
                pub fDelay: f32,
                pub lPhase: i32,
            }
            impl DSFXChorus {}
            impl ::std::default::Default for DSFXChorus {
                fn default() -> Self {
                    Self {
                        fWetDryMix: 0.0,
                        fDepth: 0.0,
                        fFeedback: 0.0,
                        fFrequency: 0.0,
                        lWaveform: 0,
                        fDelay: 0.0,
                        lPhase: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DSFXChorus {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DSFXChorus")
                        .field("fWetDryMix", &format_args!("{:?}", self.fWetDryMix))
                        .field("fDepth", &format_args!("{:?}", self.fDepth))
                        .field("fFeedback", &format_args!("{:?}", self.fFeedback))
                        .field("fFrequency", &format_args!("{:?}", self.fFrequency))
                        .field("lWaveform", &format_args!("{:?}", self.lWaveform))
                        .field("fDelay", &format_args!("{:?}", self.fDelay))
                        .field("lPhase", &format_args!("{:?}", self.lPhase))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DSFXChorus {
                fn eq(&self, other: &Self) -> bool {
                    self.fWetDryMix == other.fWetDryMix
                        && self.fDepth == other.fDepth
                        && self.fFeedback == other.fFeedback
                        && self.fFrequency == other.fFrequency
                        && self.lWaveform == other.lWaveform
                        && self.fDelay == other.fDelay
                        && self.lPhase == other.lPhase
                }
            }
            impl ::std::cmp::Eq for DSFXChorus {}
            unsafe impl ::windows::Abi for DSFXChorus {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DSFXCompressor {
                pub fGain: f32,
                pub fAttack: f32,
                pub fRelease: f32,
                pub fThreshold: f32,
                pub fRatio: f32,
                pub fPredelay: f32,
            }
            impl DSFXCompressor {}
            impl ::std::default::Default for DSFXCompressor {
                fn default() -> Self {
                    Self {
                        fGain: 0.0,
                        fAttack: 0.0,
                        fRelease: 0.0,
                        fThreshold: 0.0,
                        fRatio: 0.0,
                        fPredelay: 0.0,
                    }
                }
            }
            impl ::std::fmt::Debug for DSFXCompressor {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DSFXCompressor")
                        .field("fGain", &format_args!("{:?}", self.fGain))
                        .field("fAttack", &format_args!("{:?}", self.fAttack))
                        .field("fRelease", &format_args!("{:?}", self.fRelease))
                        .field("fThreshold", &format_args!("{:?}", self.fThreshold))
                        .field("fRatio", &format_args!("{:?}", self.fRatio))
                        .field("fPredelay", &format_args!("{:?}", self.fPredelay))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DSFXCompressor {
                fn eq(&self, other: &Self) -> bool {
                    self.fGain == other.fGain
                        && self.fAttack == other.fAttack
                        && self.fRelease == other.fRelease
                        && self.fThreshold == other.fThreshold
                        && self.fRatio == other.fRatio
                        && self.fPredelay == other.fPredelay
                }
            }
            impl ::std::cmp::Eq for DSFXCompressor {}
            unsafe impl ::windows::Abi for DSFXCompressor {
                type Abi = Self;
            }
            pub const DSFXDISTORTION_EDGE_MAX: f32 = 100f32;
            pub const DSFXDISTORTION_EDGE_MIN: f32 = 0f32;
            pub const DSFXDISTORTION_GAIN_MAX: f32 = 0f32;
            pub const DSFXDISTORTION_GAIN_MIN: f32 = -60f32;
            pub const DSFXDISTORTION_POSTEQBANDWIDTH_MAX: f32 = 8000f32;
            pub const DSFXDISTORTION_POSTEQBANDWIDTH_MIN: f32 = 100f32;
            pub const DSFXDISTORTION_POSTEQCENTERFREQUENCY_MAX: f32 = 8000f32;
            pub const DSFXDISTORTION_POSTEQCENTERFREQUENCY_MIN: f32 = 100f32;
            pub const DSFXDISTORTION_PRELOWPASSCUTOFF_MAX: f32 = 8000f32;
            pub const DSFXDISTORTION_PRELOWPASSCUTOFF_MIN: f32 = 100f32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DSFXDistortion {
                pub fGain: f32,
                pub fEdge: f32,
                pub fPostEQCenterFrequency: f32,
                pub fPostEQBandwidth: f32,
                pub fPreLowpassCutoff: f32,
            }
            impl DSFXDistortion {}
            impl ::std::default::Default for DSFXDistortion {
                fn default() -> Self {
                    Self {
                        fGain: 0.0,
                        fEdge: 0.0,
                        fPostEQCenterFrequency: 0.0,
                        fPostEQBandwidth: 0.0,
                        fPreLowpassCutoff: 0.0,
                    }
                }
            }
            impl ::std::fmt::Debug for DSFXDistortion {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DSFXDistortion")
                        .field("fGain", &format_args!("{:?}", self.fGain))
                        .field("fEdge", &format_args!("{:?}", self.fEdge))
                        .field(
                            "fPostEQCenterFrequency",
                            &format_args!("{:?}", self.fPostEQCenterFrequency),
                        )
                        .field(
                            "fPostEQBandwidth",
                            &format_args!("{:?}", self.fPostEQBandwidth),
                        )
                        .field(
                            "fPreLowpassCutoff",
                            &format_args!("{:?}", self.fPreLowpassCutoff),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DSFXDistortion {
                fn eq(&self, other: &Self) -> bool {
                    self.fGain == other.fGain
                        && self.fEdge == other.fEdge
                        && self.fPostEQCenterFrequency == other.fPostEQCenterFrequency
                        && self.fPostEQBandwidth == other.fPostEQBandwidth
                        && self.fPreLowpassCutoff == other.fPreLowpassCutoff
                }
            }
            impl ::std::cmp::Eq for DSFXDistortion {}
            unsafe impl ::windows::Abi for DSFXDistortion {
                type Abi = Self;
            }
            pub const DSFXECHO_FEEDBACK_MAX: f32 = 100f32;
            pub const DSFXECHO_FEEDBACK_MIN: f32 = 0f32;
            pub const DSFXECHO_LEFTDELAY_MAX: f32 = 2000f32;
            pub const DSFXECHO_LEFTDELAY_MIN: f32 = 1f32;
            pub const DSFXECHO_PANDELAY_MAX: u32 = 1u32;
            pub const DSFXECHO_PANDELAY_MIN: u32 = 0u32;
            pub const DSFXECHO_RIGHTDELAY_MAX: f32 = 2000f32;
            pub const DSFXECHO_RIGHTDELAY_MIN: f32 = 1f32;
            pub const DSFXECHO_WETDRYMIX_MAX: f32 = 100f32;
            pub const DSFXECHO_WETDRYMIX_MIN: f32 = 0f32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DSFXEcho {
                pub fWetDryMix: f32,
                pub fFeedback: f32,
                pub fLeftDelay: f32,
                pub fRightDelay: f32,
                pub lPanDelay: i32,
            }
            impl DSFXEcho {}
            impl ::std::default::Default for DSFXEcho {
                fn default() -> Self {
                    Self {
                        fWetDryMix: 0.0,
                        fFeedback: 0.0,
                        fLeftDelay: 0.0,
                        fRightDelay: 0.0,
                        lPanDelay: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DSFXEcho {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DSFXEcho")
                        .field("fWetDryMix", &format_args!("{:?}", self.fWetDryMix))
                        .field("fFeedback", &format_args!("{:?}", self.fFeedback))
                        .field("fLeftDelay", &format_args!("{:?}", self.fLeftDelay))
                        .field("fRightDelay", &format_args!("{:?}", self.fRightDelay))
                        .field("lPanDelay", &format_args!("{:?}", self.lPanDelay))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DSFXEcho {
                fn eq(&self, other: &Self) -> bool {
                    self.fWetDryMix == other.fWetDryMix
                        && self.fFeedback == other.fFeedback
                        && self.fLeftDelay == other.fLeftDelay
                        && self.fRightDelay == other.fRightDelay
                        && self.lPanDelay == other.lPanDelay
                }
            }
            impl ::std::cmp::Eq for DSFXEcho {}
            unsafe impl ::windows::Abi for DSFXEcho {
                type Abi = Self;
            }
            pub const DSFXFLANGER_DELAY_MAX: f32 = 4f32;
            pub const DSFXFLANGER_DELAY_MIN: f32 = 0f32;
            pub const DSFXFLANGER_DEPTH_MAX: f32 = 100f32;
            pub const DSFXFLANGER_DEPTH_MIN: f32 = 0f32;
            pub const DSFXFLANGER_FEEDBACK_MAX: f32 = 99f32;
            pub const DSFXFLANGER_FEEDBACK_MIN: f32 = -99f32;
            pub const DSFXFLANGER_FREQUENCY_MAX: f32 = 10f32;
            pub const DSFXFLANGER_FREQUENCY_MIN: f32 = 0f32;
            pub const DSFXFLANGER_PHASE_180: u32 = 4u32;
            pub const DSFXFLANGER_PHASE_90: u32 = 3u32;
            pub const DSFXFLANGER_PHASE_MAX: u32 = 4u32;
            pub const DSFXFLANGER_PHASE_MIN: u32 = 0u32;
            pub const DSFXFLANGER_PHASE_NEG_180: u32 = 0u32;
            pub const DSFXFLANGER_PHASE_NEG_90: u32 = 1u32;
            pub const DSFXFLANGER_PHASE_ZERO: u32 = 2u32;
            pub const DSFXFLANGER_WAVE_SIN: u32 = 1u32;
            pub const DSFXFLANGER_WAVE_TRIANGLE: u32 = 0u32;
            pub const DSFXFLANGER_WETDRYMIX_MAX: f32 = 100f32;
            pub const DSFXFLANGER_WETDRYMIX_MIN: f32 = 0f32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DSFXFlanger {
                pub fWetDryMix: f32,
                pub fDepth: f32,
                pub fFeedback: f32,
                pub fFrequency: f32,
                pub lWaveform: i32,
                pub fDelay: f32,
                pub lPhase: i32,
            }
            impl DSFXFlanger {}
            impl ::std::default::Default for DSFXFlanger {
                fn default() -> Self {
                    Self {
                        fWetDryMix: 0.0,
                        fDepth: 0.0,
                        fFeedback: 0.0,
                        fFrequency: 0.0,
                        lWaveform: 0,
                        fDelay: 0.0,
                        lPhase: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DSFXFlanger {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DSFXFlanger")
                        .field("fWetDryMix", &format_args!("{:?}", self.fWetDryMix))
                        .field("fDepth", &format_args!("{:?}", self.fDepth))
                        .field("fFeedback", &format_args!("{:?}", self.fFeedback))
                        .field("fFrequency", &format_args!("{:?}", self.fFrequency))
                        .field("lWaveform", &format_args!("{:?}", self.lWaveform))
                        .field("fDelay", &format_args!("{:?}", self.fDelay))
                        .field("lPhase", &format_args!("{:?}", self.lPhase))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DSFXFlanger {
                fn eq(&self, other: &Self) -> bool {
                    self.fWetDryMix == other.fWetDryMix
                        && self.fDepth == other.fDepth
                        && self.fFeedback == other.fFeedback
                        && self.fFrequency == other.fFrequency
                        && self.lWaveform == other.lWaveform
                        && self.fDelay == other.fDelay
                        && self.lPhase == other.lPhase
                }
            }
            impl ::std::cmp::Eq for DSFXFlanger {}
            unsafe impl ::windows::Abi for DSFXFlanger {
                type Abi = Self;
            }
            pub const DSFXGARGLE_RATEHZ_MAX: u32 = 1000u32;
            pub const DSFXGARGLE_RATEHZ_MIN: u32 = 1u32;
            pub const DSFXGARGLE_WAVE_SQUARE: u32 = 1u32;
            pub const DSFXGARGLE_WAVE_TRIANGLE: u32 = 0u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DSFXGargle {
                pub dwRateHz: u32,
                pub dwWaveShape: u32,
            }
            impl DSFXGargle {}
            impl ::std::default::Default for DSFXGargle {
                fn default() -> Self {
                    Self {
                        dwRateHz: 0,
                        dwWaveShape: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DSFXGargle {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DSFXGargle")
                        .field("dwRateHz", &format_args!("{:?}", self.dwRateHz))
                        .field("dwWaveShape", &format_args!("{:?}", self.dwWaveShape))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DSFXGargle {
                fn eq(&self, other: &Self) -> bool {
                    self.dwRateHz == other.dwRateHz && self.dwWaveShape == other.dwWaveShape
                }
            }
            impl ::std::cmp::Eq for DSFXGargle {}
            unsafe impl ::windows::Abi for DSFXGargle {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DSFXI3DL2Reverb {
                pub lRoom: i32,
                pub lRoomHF: i32,
                pub flRoomRolloffFactor: f32,
                pub flDecayTime: f32,
                pub flDecayHFRatio: f32,
                pub lReflections: i32,
                pub flReflectionsDelay: f32,
                pub lReverb: i32,
                pub flReverbDelay: f32,
                pub flDiffusion: f32,
                pub flDensity: f32,
                pub flHFReference: f32,
            }
            impl DSFXI3DL2Reverb {}
            impl ::std::default::Default for DSFXI3DL2Reverb {
                fn default() -> Self {
                    Self {
                        lRoom: 0,
                        lRoomHF: 0,
                        flRoomRolloffFactor: 0.0,
                        flDecayTime: 0.0,
                        flDecayHFRatio: 0.0,
                        lReflections: 0,
                        flReflectionsDelay: 0.0,
                        lReverb: 0,
                        flReverbDelay: 0.0,
                        flDiffusion: 0.0,
                        flDensity: 0.0,
                        flHFReference: 0.0,
                    }
                }
            }
            impl ::std::fmt::Debug for DSFXI3DL2Reverb {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DSFXI3DL2Reverb")
                        .field("lRoom", &format_args!("{:?}", self.lRoom))
                        .field("lRoomHF", &format_args!("{:?}", self.lRoomHF))
                        .field(
                            "flRoomRolloffFactor",
                            &format_args!("{:?}", self.flRoomRolloffFactor),
                        )
                        .field("flDecayTime", &format_args!("{:?}", self.flDecayTime))
                        .field("flDecayHFRatio", &format_args!("{:?}", self.flDecayHFRatio))
                        .field("lReflections", &format_args!("{:?}", self.lReflections))
                        .field(
                            "flReflectionsDelay",
                            &format_args!("{:?}", self.flReflectionsDelay),
                        )
                        .field("lReverb", &format_args!("{:?}", self.lReverb))
                        .field("flReverbDelay", &format_args!("{:?}", self.flReverbDelay))
                        .field("flDiffusion", &format_args!("{:?}", self.flDiffusion))
                        .field("flDensity", &format_args!("{:?}", self.flDensity))
                        .field("flHFReference", &format_args!("{:?}", self.flHFReference))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DSFXI3DL2Reverb {
                fn eq(&self, other: &Self) -> bool {
                    self.lRoom == other.lRoom
                        && self.lRoomHF == other.lRoomHF
                        && self.flRoomRolloffFactor == other.flRoomRolloffFactor
                        && self.flDecayTime == other.flDecayTime
                        && self.flDecayHFRatio == other.flDecayHFRatio
                        && self.lReflections == other.lReflections
                        && self.flReflectionsDelay == other.flReflectionsDelay
                        && self.lReverb == other.lReverb
                        && self.flReverbDelay == other.flReverbDelay
                        && self.flDiffusion == other.flDiffusion
                        && self.flDensity == other.flDensity
                        && self.flHFReference == other.flHFReference
                }
            }
            impl ::std::cmp::Eq for DSFXI3DL2Reverb {}
            unsafe impl ::windows::Abi for DSFXI3DL2Reverb {
                type Abi = Self;
            }
            pub const DSFXPARAMEQ_BANDWIDTH_MAX: f32 = 36f32;
            pub const DSFXPARAMEQ_BANDWIDTH_MIN: f32 = 1f32;
            pub const DSFXPARAMEQ_CENTER_MAX: f32 = 16000f32;
            pub const DSFXPARAMEQ_CENTER_MIN: f32 = 80f32;
            pub const DSFXPARAMEQ_GAIN_MAX: f32 = 15f32;
            pub const DSFXPARAMEQ_GAIN_MIN: f32 = -15f32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DSFXParamEq {
                pub fCenter: f32,
                pub fBandwidth: f32,
                pub fGain: f32,
            }
            impl DSFXParamEq {}
            impl ::std::default::Default for DSFXParamEq {
                fn default() -> Self {
                    Self {
                        fCenter: 0.0,
                        fBandwidth: 0.0,
                        fGain: 0.0,
                    }
                }
            }
            impl ::std::fmt::Debug for DSFXParamEq {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DSFXParamEq")
                        .field("fCenter", &format_args!("{:?}", self.fCenter))
                        .field("fBandwidth", &format_args!("{:?}", self.fBandwidth))
                        .field("fGain", &format_args!("{:?}", self.fGain))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DSFXParamEq {
                fn eq(&self, other: &Self) -> bool {
                    self.fCenter == other.fCenter
                        && self.fBandwidth == other.fBandwidth
                        && self.fGain == other.fGain
                }
            }
            impl ::std::cmp::Eq for DSFXParamEq {}
            unsafe impl ::windows::Abi for DSFXParamEq {
                type Abi = Self;
            }
            pub const DSFXR_FAILED: i32 = 4i32;
            pub const DSFXR_LOCHARDWARE: i32 = 1i32;
            pub const DSFXR_LOCSOFTWARE: i32 = 2i32;
            pub const DSFXR_PRESENT: i32 = 0i32;
            pub const DSFXR_SENDLOOP: i32 = 6i32;
            pub const DSFXR_UNALLOCATED: i32 = 3i32;
            pub const DSFXR_UNKNOWN: i32 = 5i32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DSFXWavesReverb {
                pub fInGain: f32,
                pub fReverbMix: f32,
                pub fReverbTime: f32,
                pub fHighFreqRTRatio: f32,
            }
            impl DSFXWavesReverb {}
            impl ::std::default::Default for DSFXWavesReverb {
                fn default() -> Self {
                    Self {
                        fInGain: 0.0,
                        fReverbMix: 0.0,
                        fReverbTime: 0.0,
                        fHighFreqRTRatio: 0.0,
                    }
                }
            }
            impl ::std::fmt::Debug for DSFXWavesReverb {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DSFXWavesReverb")
                        .field("fInGain", &format_args!("{:?}", self.fInGain))
                        .field("fReverbMix", &format_args!("{:?}", self.fReverbMix))
                        .field("fReverbTime", &format_args!("{:?}", self.fReverbTime))
                        .field(
                            "fHighFreqRTRatio",
                            &format_args!("{:?}", self.fHighFreqRTRatio),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DSFXWavesReverb {
                fn eq(&self, other: &Self) -> bool {
                    self.fInGain == other.fInGain
                        && self.fReverbMix == other.fReverbMix
                        && self.fReverbTime == other.fReverbTime
                        && self.fHighFreqRTRatio == other.fHighFreqRTRatio
                }
            }
            impl ::std::cmp::Eq for DSFXWavesReverb {}
            unsafe impl ::windows::Abi for DSFXWavesReverb {
                type Abi = Self;
            }
            pub const DSFX_I3DL2REVERB_DECAYHFRATIO_DEFAULT: f32 = 0.83f32;
            pub const DSFX_I3DL2REVERB_DECAYHFRATIO_MAX: f32 = 2f32;
            pub const DSFX_I3DL2REVERB_DECAYHFRATIO_MIN: f32 = 0.1f32;
            pub const DSFX_I3DL2REVERB_DECAYTIME_DEFAULT: f32 = 1.49f32;
            pub const DSFX_I3DL2REVERB_DECAYTIME_MAX: f32 = 20f32;
            pub const DSFX_I3DL2REVERB_DECAYTIME_MIN: f32 = 0.1f32;
            pub const DSFX_I3DL2REVERB_DENSITY_DEFAULT: f32 = 100f32;
            pub const DSFX_I3DL2REVERB_DENSITY_MAX: f32 = 100f32;
            pub const DSFX_I3DL2REVERB_DENSITY_MIN: f32 = 0f32;
            pub const DSFX_I3DL2REVERB_DIFFUSION_DEFAULT: f32 = 100f32;
            pub const DSFX_I3DL2REVERB_DIFFUSION_MAX: f32 = 100f32;
            pub const DSFX_I3DL2REVERB_DIFFUSION_MIN: f32 = 0f32;
            pub const DSFX_I3DL2REVERB_HFREFERENCE_DEFAULT: f32 = 5000f32;
            pub const DSFX_I3DL2REVERB_HFREFERENCE_MAX: f32 = 20000f32;
            pub const DSFX_I3DL2REVERB_HFREFERENCE_MIN: f32 = 20f32;
            pub const DSFX_I3DL2REVERB_QUALITY_DEFAULT: u32 = 2u32;
            pub const DSFX_I3DL2REVERB_QUALITY_MAX: u32 = 3u32;
            pub const DSFX_I3DL2REVERB_QUALITY_MIN: u32 = 0u32;
            pub const DSFX_I3DL2REVERB_REFLECTIONSDELAY_DEFAULT: f32 = 0.007f32;
            pub const DSFX_I3DL2REVERB_REFLECTIONSDELAY_MAX: f32 = 0.3f32;
            pub const DSFX_I3DL2REVERB_REFLECTIONSDELAY_MIN: f32 = 0f32;
            pub const DSFX_I3DL2REVERB_REFLECTIONS_DEFAULT: i32 = -2602i32;
            pub const DSFX_I3DL2REVERB_REFLECTIONS_MAX: u32 = 1000u32;
            pub const DSFX_I3DL2REVERB_REFLECTIONS_MIN: i32 = -10000i32;
            pub const DSFX_I3DL2REVERB_REVERBDELAY_DEFAULT: f32 = 0.011f32;
            pub const DSFX_I3DL2REVERB_REVERBDELAY_MAX: f32 = 0.1f32;
            pub const DSFX_I3DL2REVERB_REVERBDELAY_MIN: f32 = 0f32;
            pub const DSFX_I3DL2REVERB_REVERB_DEFAULT: u32 = 200u32;
            pub const DSFX_I3DL2REVERB_REVERB_MAX: u32 = 2000u32;
            pub const DSFX_I3DL2REVERB_REVERB_MIN: i32 = -10000i32;
            pub const DSFX_I3DL2REVERB_ROOMHF_DEFAULT: i32 = -100i32;
            pub const DSFX_I3DL2REVERB_ROOMHF_MAX: u32 = 0u32;
            pub const DSFX_I3DL2REVERB_ROOMHF_MIN: i32 = -10000i32;
            pub const DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_DEFAULT: f32 = 0f32;
            pub const DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MAX: f32 = 10f32;
            pub const DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MIN: f32 = 0f32;
            pub const DSFX_I3DL2REVERB_ROOM_DEFAULT: i32 = -1000i32;
            pub const DSFX_I3DL2REVERB_ROOM_MAX: u32 = 0u32;
            pub const DSFX_I3DL2REVERB_ROOM_MIN: i32 = -10000i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_ALLEY: i32 = 15i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_ARENA: i32 = 10i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_AUDITORIUM: i32 = 7i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_BATHROOM: i32 = 4i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY: i32 = 12i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_CAVE: i32 = 9i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_CITY: i32 = 17i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_CONCERTHALL: i32 = 8i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_DEFAULT: i32 = 0i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_FOREST: i32 = 16i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_GENERIC: i32 = 1i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_HALLWAY: i32 = 13i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_HANGAR: i32 = 11i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEHALL: i32 = 28i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEROOM: i32 = 26i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_LIVINGROOM: i32 = 5i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL: i32 = 27i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM: i32 = 25i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_MOUNTAINS: i32 = 18i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_PADDEDCELL: i32 = 2i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_PARKINGLOT: i32 = 21i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_PLAIN: i32 = 20i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_PLATE: i32 = 29i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_QUARRY: i32 = 19i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_ROOM: i32 = 3i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_SEWERPIPE: i32 = 22i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_SMALLROOM: i32 = 24i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR: i32 = 14i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_STONEROOM: i32 = 6i32;
            pub const DSFX_I3DL2_ENVIRONMENT_PRESET_UNDERWATER: i32 = 23i32;
            pub const DSFX_I3DL2_MATERIAL_PRESET_BRICKWALL: i32 = 5i32;
            pub const DSFX_I3DL2_MATERIAL_PRESET_CURTAIN: i32 = 7i32;
            pub const DSFX_I3DL2_MATERIAL_PRESET_DOUBLEWINDOW: i32 = 1i32;
            pub const DSFX_I3DL2_MATERIAL_PRESET_SINGLEWINDOW: i32 = 0i32;
            pub const DSFX_I3DL2_MATERIAL_PRESET_STONEWALL: i32 = 6i32;
            pub const DSFX_I3DL2_MATERIAL_PRESET_THICKDOOR: i32 = 3i32;
            pub const DSFX_I3DL2_MATERIAL_PRESET_THINDOOR: i32 = 2i32;
            pub const DSFX_I3DL2_MATERIAL_PRESET_WOODWALL: i32 = 4i32;
            pub const DSFX_WAVESREVERB_HIGHFREQRTRATIO_DEFAULT: f32 = 0.001f32;
            pub const DSFX_WAVESREVERB_HIGHFREQRTRATIO_MAX: f32 = 0.999f32;
            pub const DSFX_WAVESREVERB_HIGHFREQRTRATIO_MIN: f32 = 0.001f32;
            pub const DSFX_WAVESREVERB_INGAIN_DEFAULT: f32 = 0f32;
            pub const DSFX_WAVESREVERB_INGAIN_MAX: f32 = 0f32;
            pub const DSFX_WAVESREVERB_INGAIN_MIN: f32 = -96f32;
            pub const DSFX_WAVESREVERB_REVERBMIX_DEFAULT: f32 = 0f32;
            pub const DSFX_WAVESREVERB_REVERBMIX_MAX: f32 = 0f32;
            pub const DSFX_WAVESREVERB_REVERBMIX_MIN: f32 = -96f32;
            pub const DSFX_WAVESREVERB_REVERBTIME_DEFAULT: f32 = 1000f32;
            pub const DSFX_WAVESREVERB_REVERBTIME_MAX: f32 = 3000f32;
            pub const DSFX_WAVESREVERB_REVERBTIME_MIN: f32 = 0.001f32;
            pub const DSSCL_EXCLUSIVE: u32 = 3u32;
            pub const DSSCL_NORMAL: u32 = 1u32;
            pub const DSSCL_PRIORITY: u32 = 2u32;
            pub const DSSCL_WRITEPRIMARY: u32 = 4u32;
            pub const DSSPEAKER_5POINT1: u32 = 6u32;
            pub const DSSPEAKER_5POINT1_SURROUND: u32 = 9u32;
            pub const DSSPEAKER_7POINT1: u32 = 7u32;
            pub const DSSPEAKER_7POINT1_SURROUND: u32 = 8u32;
            pub const DSSPEAKER_DIRECTOUT: u32 = 0u32;
            pub const DSSPEAKER_GEOMETRY_MAX: u32 = 180u32;
            pub const DSSPEAKER_GEOMETRY_MIN: u32 = 5u32;
            pub const DSSPEAKER_GEOMETRY_NARROW: u32 = 10u32;
            pub const DSSPEAKER_GEOMETRY_WIDE: u32 = 20u32;
            pub const DSSPEAKER_HEADPHONE: u32 = 1u32;
            pub const DSSPEAKER_MONO: u32 = 2u32;
            pub const DSSPEAKER_QUAD: u32 = 3u32;
            pub const DSSPEAKER_STEREO: u32 = 4u32;
            pub const DSSPEAKER_SURROUND: u32 = 5u32;
            pub const DS_CERTIFIED: u32 = 0u32;
            pub const DS_UNCERTIFIED: u32 = 1u32;
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectSoundCapture(::windows::IUnknown);
            impl IDirectSoundCapture {}
            unsafe impl ::windows::Interface for IDirectSoundCapture {
                type Vtable = IDirectSoundCapture_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2954954625,
                    35277,
                    4560,
                    [175, 8, 0, 160, 201, 37, 205, 22],
                );
            }
            impl IDirectSoundCapture {
                pub unsafe fn CreateCaptureBuffer<'a>(
                    &self,
                    pcdscbufferdesc: *mut DSCBUFFERDESC,
                    ppdscbuffer: *mut ::std::option::Option<IDirectSoundCaptureBuffer>,
                    punkouter: impl ::windows::IntoParam<'a, ::windows::IUnknown>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcdscbufferdesc),
                        ::std::mem::transmute(ppdscbuffer),
                        punkouter.into_param().abi(),
                    )
                }
                pub unsafe fn GetCaps(&self, pdsccaps: *mut DSCCAPS) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdsccaps),
                    )
                }
                pub unsafe fn Initialize(
                    &self,
                    pcguiddevice: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcguiddevice),
                    )
                }
            }
            impl ::std::convert::From<IDirectSoundCapture> for ::windows::IUnknown {
                fn from(value: IDirectSoundCapture) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectSoundCapture> for ::windows::IUnknown {
                fn from(value: &IDirectSoundCapture) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectSoundCapture {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectSoundCapture {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectSoundCapture_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcdscbufferdesc: *mut DSCBUFFERDESC,
                    ppdscbuffer: *mut ::windows::RawPtr,
                    punkouter: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdsccaps: *mut DSCCAPS,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcguiddevice: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
            );
            pub unsafe fn DirectSoundCaptureCreate<'a>(
                pcguiddevice: *mut ::windows::Guid,
                ppdsc: *mut ::std::option::Option<IDirectSoundCapture>,
                punkouter: impl ::windows::IntoParam<'a, ::windows::IUnknown>,
            ) -> ::windows::HRESULT {
                panic!("Unsupported target OS");
            }
            pub unsafe fn DirectSoundCaptureCreate8<'a>(
                pcguiddevice: *mut ::windows::Guid,
                ppdsc8: *mut ::std::option::Option<IDirectSoundCapture>,
                punkouter: impl ::windows::IntoParam<'a, ::windows::IUnknown>,
            ) -> ::windows::HRESULT {
                panic!("Unsupported target OS");
            }
            pub type LPDSENUMCALLBACKA = extern "system" fn(
                param0: *mut ::windows::Guid,
                param1: super::SystemServices::PSTR,
                param2: super::SystemServices::PSTR,
                param3: *mut ::std::ffi::c_void,
            )
                -> super::SystemServices::BOOL;
            pub unsafe fn DirectSoundCaptureEnumerateA(
                pdsenumcallback: ::std::option::Option<LPDSENUMCALLBACKA>,
                pcontext: *mut ::std::ffi::c_void,
            ) -> ::windows::HRESULT {
                panic!("Unsupported target OS");
            }
            pub type LPDSENUMCALLBACKW = extern "system" fn(
                param0: *mut ::windows::Guid,
                param1: super::SystemServices::PWSTR,
                param2: super::SystemServices::PWSTR,
                param3: *mut ::std::ffi::c_void,
            )
                -> super::SystemServices::BOOL;
            pub unsafe fn DirectSoundCaptureEnumerateW(
                pdsenumcallback: ::std::option::Option<LPDSENUMCALLBACKW>,
                pcontext: *mut ::std::ffi::c_void,
            ) -> ::windows::HRESULT {
                panic!("Unsupported target OS");
            }
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectSound(::windows::IUnknown);
            impl IDirectSound {}
            unsafe impl ::windows::Interface for IDirectSound {
                type Vtable = IDirectSound_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    664468099,
                    18817,
                    4558,
                    [165, 33, 0, 32, 175, 11, 229, 96],
                );
            }
            impl IDirectSound {
                pub unsafe fn CreateSoundBuffer<'a>(
                    &self,
                    pcdsbufferdesc: *mut DSBUFFERDESC,
                    ppdsbuffer: *mut ::std::option::Option<IDirectSoundBuffer>,
                    punkouter: impl ::windows::IntoParam<'a, ::windows::IUnknown>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcdsbufferdesc),
                        ::std::mem::transmute(ppdsbuffer),
                        punkouter.into_param().abi(),
                    )
                }
                pub unsafe fn GetCaps(&self, pdscaps: *mut DSCAPS) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdscaps),
                    )
                }
                pub unsafe fn DuplicateSoundBuffer<'a>(
                    &self,
                    pdsbufferoriginal: impl ::windows::IntoParam<'a, IDirectSoundBuffer>,
                    ppdsbufferduplicate: *mut ::std::option::Option<IDirectSoundBuffer>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        pdsbufferoriginal.into_param().abi(),
                        ::std::mem::transmute(ppdsbufferduplicate),
                    )
                }
                pub unsafe fn SetCooperativeLevel<'a>(
                    &self,
                    hwnd: impl ::windows::IntoParam<'a, super::WindowsAndMessaging::HWND>,
                    dwlevel: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        hwnd.into_param().abi(),
                        ::std::mem::transmute(dwlevel),
                    )
                }
                pub unsafe fn Compact(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(::windows::Abi::abi(self))
                }
                pub unsafe fn GetSpeakerConfig(
                    &self,
                    pdwspeakerconfig: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwspeakerconfig),
                    )
                }
                pub unsafe fn SetSpeakerConfig(&self, dwspeakerconfig: u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwspeakerconfig),
                    )
                }
                pub unsafe fn Initialize(
                    &self,
                    pcguiddevice: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcguiddevice),
                    )
                }
            }
            impl ::std::convert::From<IDirectSound> for ::windows::IUnknown {
                fn from(value: IDirectSound) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectSound> for ::windows::IUnknown {
                fn from(value: &IDirectSound) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectSound {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectSound {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectSound_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcdsbufferdesc: *mut DSBUFFERDESC,
                    ppdsbuffer: *mut ::windows::RawPtr,
                    punkouter: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdscaps: *mut DSCAPS,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdsbufferoriginal: ::windows::RawPtr,
                    ppdsbufferduplicate: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    hwnd: super::WindowsAndMessaging::HWND,
                    dwlevel: u32,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwspeakerconfig: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwspeakerconfig: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcguiddevice: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
            );
            pub unsafe fn DirectSoundCreate<'a>(
                pcguiddevice: *mut ::windows::Guid,
                ppds: *mut ::std::option::Option<IDirectSound>,
                punkouter: impl ::windows::IntoParam<'a, ::windows::IUnknown>,
            ) -> ::windows::HRESULT {
                panic!("Unsupported target OS");
            }
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectSound8(::windows::IUnknown);
            impl IDirectSound8 {}
            unsafe impl ::windows::Interface for IDirectSound8 {
                type Vtable = IDirectSound8_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3305799315,
                    62357,
                    18484,
                    [158, 246, 127, 169, 157, 229, 9, 102],
                );
            }
            impl IDirectSound8 {
                pub unsafe fn CreateSoundBuffer<'a>(
                    &self,
                    pcdsbufferdesc: *mut DSBUFFERDESC,
                    ppdsbuffer: *mut ::std::option::Option<IDirectSoundBuffer>,
                    punkouter: impl ::windows::IntoParam<'a, ::windows::IUnknown>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcdsbufferdesc),
                        ::std::mem::transmute(ppdsbuffer),
                        punkouter.into_param().abi(),
                    )
                }
                pub unsafe fn GetCaps(&self, pdscaps: *mut DSCAPS) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdscaps),
                    )
                }
                pub unsafe fn DuplicateSoundBuffer<'a>(
                    &self,
                    pdsbufferoriginal: impl ::windows::IntoParam<'a, IDirectSoundBuffer>,
                    ppdsbufferduplicate: *mut ::std::option::Option<IDirectSoundBuffer>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        pdsbufferoriginal.into_param().abi(),
                        ::std::mem::transmute(ppdsbufferduplicate),
                    )
                }
                pub unsafe fn SetCooperativeLevel<'a>(
                    &self,
                    hwnd: impl ::windows::IntoParam<'a, super::WindowsAndMessaging::HWND>,
                    dwlevel: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        hwnd.into_param().abi(),
                        ::std::mem::transmute(dwlevel),
                    )
                }
                pub unsafe fn Compact(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(::windows::Abi::abi(self))
                }
                pub unsafe fn GetSpeakerConfig(
                    &self,
                    pdwspeakerconfig: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwspeakerconfig),
                    )
                }
                pub unsafe fn SetSpeakerConfig(&self, dwspeakerconfig: u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwspeakerconfig),
                    )
                }
                pub unsafe fn Initialize(
                    &self,
                    pcguiddevice: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcguiddevice),
                    )
                }
                pub unsafe fn VerifyCertification(
                    &self,
                    pdwcertified: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).11)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwcertified),
                    )
                }
            }
            impl ::std::convert::From<IDirectSound8> for ::windows::IUnknown {
                fn from(value: IDirectSound8) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectSound8> for ::windows::IUnknown {
                fn from(value: &IDirectSound8) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectSound8 {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectSound8 {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            impl ::std::convert::From<IDirectSound8> for IDirectSound {
                fn from(value: IDirectSound8) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectSound8> for IDirectSound {
                fn from(value: &IDirectSound8) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IDirectSound> for IDirectSound8 {
                fn into_param(self) -> ::windows::Param<'a, IDirectSound> {
                    ::windows::Param::Owned(::std::convert::Into::<IDirectSound>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IDirectSound> for &'a IDirectSound8 {
                fn into_param(self) -> ::windows::Param<'a, IDirectSound> {
                    ::windows::Param::Owned(::std::convert::Into::<IDirectSound>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectSound8_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcdsbufferdesc: *mut DSBUFFERDESC,
                    ppdsbuffer: *mut ::windows::RawPtr,
                    punkouter: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdscaps: *mut DSCAPS,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdsbufferoriginal: ::windows::RawPtr,
                    ppdsbufferduplicate: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    hwnd: super::WindowsAndMessaging::HWND,
                    dwlevel: u32,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwspeakerconfig: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwspeakerconfig: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcguiddevice: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwcertified: *mut u32,
                ) -> ::windows::HRESULT,
            );
            pub unsafe fn DirectSoundCreate8<'a>(
                pcguiddevice: *mut ::windows::Guid,
                ppds8: *mut ::std::option::Option<IDirectSound8>,
                punkouter: impl ::windows::IntoParam<'a, ::windows::IUnknown>,
            ) -> ::windows::HRESULT {
                panic!("Unsupported target OS");
            }
            pub unsafe fn DirectSoundEnumerateA(
                pdsenumcallback: ::std::option::Option<LPDSENUMCALLBACKA>,
                pcontext: *mut ::std::ffi::c_void,
            ) -> ::windows::HRESULT {
                panic!("Unsupported target OS");
            }
            pub unsafe fn DirectSoundEnumerateW(
                pdsenumcallback: ::std::option::Option<LPDSENUMCALLBACKW>,
                pcontext: *mut ::std::ffi::c_void,
            ) -> ::windows::HRESULT {
                panic!("Unsupported target OS");
            }
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectSoundFullDuplex(::windows::IUnknown);
            impl IDirectSoundFullDuplex {}
            unsafe impl ::windows::Interface for IDirectSoundFullDuplex {
                type Vtable = IDirectSoundFullDuplex_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3989523578,
                    55979,
                    16918,
                    [164, 46, 108, 80, 89, 109, 220, 29],
                );
            }
            impl IDirectSoundFullDuplex {
                pub unsafe fn Initialize<'a>(
                    &self,
                    pcaptureguid: *mut ::windows::Guid,
                    prenderguid: *mut ::windows::Guid,
                    lpdscbufferdesc: *mut DSCBUFFERDESC,
                    lpdsbufferdesc: *mut DSBUFFERDESC,
                    hwnd: impl ::windows::IntoParam<'a, super::WindowsAndMessaging::HWND>,
                    dwlevel: u32,
                    lplpdirectsoundcapturebuffer8: *mut ::std::option::Option<
                        IDirectSoundCaptureBuffer8,
                    >,
                    lplpdirectsoundbuffer8: *mut ::std::option::Option<IDirectSoundBuffer8>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcaptureguid),
                        ::std::mem::transmute(prenderguid),
                        ::std::mem::transmute(lpdscbufferdesc),
                        ::std::mem::transmute(lpdsbufferdesc),
                        hwnd.into_param().abi(),
                        ::std::mem::transmute(dwlevel),
                        ::std::mem::transmute(lplpdirectsoundcapturebuffer8),
                        ::std::mem::transmute(lplpdirectsoundbuffer8),
                    )
                }
            }
            impl ::std::convert::From<IDirectSoundFullDuplex> for ::windows::IUnknown {
                fn from(value: IDirectSoundFullDuplex) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectSoundFullDuplex> for ::windows::IUnknown {
                fn from(value: &IDirectSoundFullDuplex) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectSoundFullDuplex {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectSoundFullDuplex {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectSoundFullDuplex_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcaptureguid: *mut ::windows::Guid,
                    prenderguid: *mut ::windows::Guid,
                    lpdscbufferdesc: *mut DSCBUFFERDESC,
                    lpdsbufferdesc: *mut DSBUFFERDESC,
                    hwnd: super::WindowsAndMessaging::HWND,
                    dwlevel: u32,
                    lplpdirectsoundcapturebuffer8: *mut ::windows::RawPtr,
                    lplpdirectsoundbuffer8: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectSoundCaptureBuffer(::windows::IUnknown);
            impl IDirectSoundCaptureBuffer {}
            unsafe impl ::windows::Interface for IDirectSoundCaptureBuffer {
                type Vtable = IDirectSoundCaptureBuffer_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2954954626,
                    35277,
                    4560,
                    [175, 8, 0, 160, 201, 37, 205, 22],
                );
            }
            impl IDirectSoundCaptureBuffer {
                pub unsafe fn GetCaps(&self, pdscbcaps: *mut DSCBCAPS) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdscbcaps),
                    )
                }
                pub unsafe fn GetCurrentPosition(
                    &self,
                    pdwcaptureposition: *mut u32,
                    pdwreadposition: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwcaptureposition),
                        ::std::mem::transmute(pdwreadposition),
                    )
                }
                pub unsafe fn GetFormat(
                    &self,
                    pwfxformat: *mut super::Multimedia::WAVEFORMATEX,
                    dwsizeallocated: u32,
                    pdwsizewritten: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pwfxformat),
                        ::std::mem::transmute(dwsizeallocated),
                        ::std::mem::transmute(pdwsizewritten),
                    )
                }
                pub unsafe fn GetStatus(&self, pdwstatus: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwstatus),
                    )
                }
                pub unsafe fn Initialize<'a>(
                    &self,
                    pdirectsoundcapture: impl ::windows::IntoParam<'a, IDirectSoundCapture>,
                    pcdscbufferdesc: *mut DSCBUFFERDESC,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        pdirectsoundcapture.into_param().abi(),
                        ::std::mem::transmute(pcdscbufferdesc),
                    )
                }
                pub unsafe fn Lock(
                    &self,
                    dwoffset: u32,
                    dwbytes: u32,
                    ppvaudioptr1: *mut *mut ::std::ffi::c_void,
                    pdwaudiobytes1: *mut u32,
                    ppvaudioptr2: *mut *mut ::std::ffi::c_void,
                    pdwaudiobytes2: *mut u32,
                    dwflags: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwoffset),
                        ::std::mem::transmute(dwbytes),
                        ::std::mem::transmute(ppvaudioptr1),
                        ::std::mem::transmute(pdwaudiobytes1),
                        ::std::mem::transmute(ppvaudioptr2),
                        ::std::mem::transmute(pdwaudiobytes2),
                        ::std::mem::transmute(dwflags),
                    )
                }
                pub unsafe fn Start(&self, dwflags: u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwflags),
                    )
                }
                pub unsafe fn Stop(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(::windows::Abi::abi(self))
                }
                pub unsafe fn Unlock(
                    &self,
                    pvaudioptr1: *mut ::std::ffi::c_void,
                    dwaudiobytes1: u32,
                    pvaudioptr2: *mut ::std::ffi::c_void,
                    dwaudiobytes2: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).11)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pvaudioptr1),
                        ::std::mem::transmute(dwaudiobytes1),
                        ::std::mem::transmute(pvaudioptr2),
                        ::std::mem::transmute(dwaudiobytes2),
                    )
                }
            }
            impl ::std::convert::From<IDirectSoundCaptureBuffer> for ::windows::IUnknown {
                fn from(value: IDirectSoundCaptureBuffer) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectSoundCaptureBuffer> for ::windows::IUnknown {
                fn from(value: &IDirectSoundCaptureBuffer) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectSoundCaptureBuffer {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectSoundCaptureBuffer {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectSoundCaptureBuffer_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdscbcaps: *mut DSCBCAPS,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwcaptureposition: *mut u32,
                    pdwreadposition: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pwfxformat: *mut super::Multimedia::WAVEFORMATEX,
                    dwsizeallocated: u32,
                    pdwsizewritten: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwstatus: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdirectsoundcapture: ::windows::RawPtr,
                    pcdscbufferdesc: *mut DSCBUFFERDESC,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwoffset: u32,
                    dwbytes: u32,
                    ppvaudioptr1: *mut *mut ::std::ffi::c_void,
                    pdwaudiobytes1: *mut u32,
                    ppvaudioptr2: *mut *mut ::std::ffi::c_void,
                    pdwaudiobytes2: *mut u32,
                    dwflags: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwflags: u32,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pvaudioptr1: *mut ::std::ffi::c_void,
                    dwaudiobytes1: u32,
                    pvaudioptr2: *mut ::std::ffi::c_void,
                    dwaudiobytes2: u32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectSoundCaptureBuffer8(::windows::IUnknown);
            impl IDirectSoundCaptureBuffer8 {}
            unsafe impl ::windows::Interface for IDirectSoundCaptureBuffer8 {
                type Vtable = IDirectSoundCaptureBuffer8_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    10030580,
                    3515,
                    18546,
                    [131, 62, 109, 48, 62, 128, 174, 182],
                );
            }
            impl IDirectSoundCaptureBuffer8 {
                pub unsafe fn GetCaps(&self, pdscbcaps: *mut DSCBCAPS) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdscbcaps),
                    )
                }
                pub unsafe fn GetCurrentPosition(
                    &self,
                    pdwcaptureposition: *mut u32,
                    pdwreadposition: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwcaptureposition),
                        ::std::mem::transmute(pdwreadposition),
                    )
                }
                pub unsafe fn GetFormat(
                    &self,
                    pwfxformat: *mut super::Multimedia::WAVEFORMATEX,
                    dwsizeallocated: u32,
                    pdwsizewritten: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pwfxformat),
                        ::std::mem::transmute(dwsizeallocated),
                        ::std::mem::transmute(pdwsizewritten),
                    )
                }
                pub unsafe fn GetStatus(&self, pdwstatus: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwstatus),
                    )
                }
                pub unsafe fn Initialize<'a>(
                    &self,
                    pdirectsoundcapture: impl ::windows::IntoParam<'a, IDirectSoundCapture>,
                    pcdscbufferdesc: *mut DSCBUFFERDESC,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        pdirectsoundcapture.into_param().abi(),
                        ::std::mem::transmute(pcdscbufferdesc),
                    )
                }
                pub unsafe fn Lock(
                    &self,
                    dwoffset: u32,
                    dwbytes: u32,
                    ppvaudioptr1: *mut *mut ::std::ffi::c_void,
                    pdwaudiobytes1: *mut u32,
                    ppvaudioptr2: *mut *mut ::std::ffi::c_void,
                    pdwaudiobytes2: *mut u32,
                    dwflags: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwoffset),
                        ::std::mem::transmute(dwbytes),
                        ::std::mem::transmute(ppvaudioptr1),
                        ::std::mem::transmute(pdwaudiobytes1),
                        ::std::mem::transmute(ppvaudioptr2),
                        ::std::mem::transmute(pdwaudiobytes2),
                        ::std::mem::transmute(dwflags),
                    )
                }
                pub unsafe fn Start(&self, dwflags: u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwflags),
                    )
                }
                pub unsafe fn Stop(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(::windows::Abi::abi(self))
                }
                pub unsafe fn Unlock(
                    &self,
                    pvaudioptr1: *mut ::std::ffi::c_void,
                    dwaudiobytes1: u32,
                    pvaudioptr2: *mut ::std::ffi::c_void,
                    dwaudiobytes2: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).11)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pvaudioptr1),
                        ::std::mem::transmute(dwaudiobytes1),
                        ::std::mem::transmute(pvaudioptr2),
                        ::std::mem::transmute(dwaudiobytes2),
                    )
                }
                pub unsafe fn GetObjectInPath(
                    &self,
                    rguidobject: *const ::windows::Guid,
                    dwindex: u32,
                    rguidinterface: *const ::windows::Guid,
                    ppobject: *mut *mut ::std::ffi::c_void,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).12)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(rguidobject),
                        ::std::mem::transmute(dwindex),
                        ::std::mem::transmute(rguidinterface),
                        ::std::mem::transmute(ppobject),
                    )
                }
                pub unsafe fn GetFXStatus(
                    &self,
                    dweffectscount: u32,
                    pdwfxstatus: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).13)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dweffectscount),
                        ::std::mem::transmute(pdwfxstatus),
                    )
                }
            }
            impl ::std::convert::From<IDirectSoundCaptureBuffer8> for ::windows::IUnknown {
                fn from(value: IDirectSoundCaptureBuffer8) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectSoundCaptureBuffer8> for ::windows::IUnknown {
                fn from(value: &IDirectSoundCaptureBuffer8) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectSoundCaptureBuffer8 {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectSoundCaptureBuffer8 {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            impl ::std::convert::From<IDirectSoundCaptureBuffer8> for IDirectSoundCaptureBuffer {
                fn from(value: IDirectSoundCaptureBuffer8) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectSoundCaptureBuffer8> for IDirectSoundCaptureBuffer {
                fn from(value: &IDirectSoundCaptureBuffer8) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IDirectSoundCaptureBuffer> for IDirectSoundCaptureBuffer8 {
                fn into_param(self) -> ::windows::Param<'a, IDirectSoundCaptureBuffer> {
                    ::windows::Param::Owned(
                        ::std::convert::Into::<IDirectSoundCaptureBuffer>::into(self),
                    )
                }
            }
            impl<'a> ::windows::IntoParam<'a, IDirectSoundCaptureBuffer> for &'a IDirectSoundCaptureBuffer8 {
                fn into_param(self) -> ::windows::Param<'a, IDirectSoundCaptureBuffer> {
                    ::windows::Param::Owned(
                        ::std::convert::Into::<IDirectSoundCaptureBuffer>::into(
                            ::std::clone::Clone::clone(self),
                        ),
                    )
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectSoundCaptureBuffer8_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdscbcaps: *mut DSCBCAPS,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwcaptureposition: *mut u32,
                    pdwreadposition: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pwfxformat: *mut super::Multimedia::WAVEFORMATEX,
                    dwsizeallocated: u32,
                    pdwsizewritten: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwstatus: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdirectsoundcapture: ::windows::RawPtr,
                    pcdscbufferdesc: *mut DSCBUFFERDESC,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwoffset: u32,
                    dwbytes: u32,
                    ppvaudioptr1: *mut *mut ::std::ffi::c_void,
                    pdwaudiobytes1: *mut u32,
                    ppvaudioptr2: *mut *mut ::std::ffi::c_void,
                    pdwaudiobytes2: *mut u32,
                    dwflags: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwflags: u32,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pvaudioptr1: *mut ::std::ffi::c_void,
                    dwaudiobytes1: u32,
                    pvaudioptr2: *mut ::std::ffi::c_void,
                    dwaudiobytes2: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    rguidobject: *const ::windows::Guid,
                    dwindex: u32,
                    rguidinterface: *const ::windows::Guid,
                    ppobject: *mut *mut ::std::ffi::c_void,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dweffectscount: u32,
                    pdwfxstatus: *mut u32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectSoundBuffer(::windows::IUnknown);
            impl IDirectSoundBuffer {}
            unsafe impl ::windows::Interface for IDirectSoundBuffer {
                type Vtable = IDirectSoundBuffer_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    664468101,
                    18817,
                    4558,
                    [165, 33, 0, 32, 175, 11, 229, 96],
                );
            }
            impl IDirectSoundBuffer {
                pub unsafe fn GetCaps(&self, pdsbuffercaps: *mut DSBCAPS) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdsbuffercaps),
                    )
                }
                pub unsafe fn GetCurrentPosition(
                    &self,
                    pdwcurrentplaycursor: *mut u32,
                    pdwcurrentwritecursor: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwcurrentplaycursor),
                        ::std::mem::transmute(pdwcurrentwritecursor),
                    )
                }
                pub unsafe fn GetFormat(
                    &self,
                    pwfxformat: *mut super::Multimedia::WAVEFORMATEX,
                    dwsizeallocated: u32,
                    pdwsizewritten: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pwfxformat),
                        ::std::mem::transmute(dwsizeallocated),
                        ::std::mem::transmute(pdwsizewritten),
                    )
                }
                pub unsafe fn GetVolume(&self, plvolume: *mut i32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(plvolume),
                    )
                }
                pub unsafe fn GetPan(&self, plpan: *mut i32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(plpan),
                    )
                }
                pub unsafe fn GetFrequency(&self, pdwfrequency: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwfrequency),
                    )
                }
                pub unsafe fn GetStatus(&self, pdwstatus: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwstatus),
                    )
                }
                pub unsafe fn Initialize<'a>(
                    &self,
                    pdirectsound: impl ::windows::IntoParam<'a, IDirectSound>,
                    pcdsbufferdesc: *mut DSBUFFERDESC,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(
                        ::windows::Abi::abi(self),
                        pdirectsound.into_param().abi(),
                        ::std::mem::transmute(pcdsbufferdesc),
                    )
                }
                pub unsafe fn Lock(
                    &self,
                    dwoffset: u32,
                    dwbytes: u32,
                    ppvaudioptr1: *mut *mut ::std::ffi::c_void,
                    pdwaudiobytes1: *mut u32,
                    ppvaudioptr2: *mut *mut ::std::ffi::c_void,
                    pdwaudiobytes2: *mut u32,
                    dwflags: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).11)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwoffset),
                        ::std::mem::transmute(dwbytes),
                        ::std::mem::transmute(ppvaudioptr1),
                        ::std::mem::transmute(pdwaudiobytes1),
                        ::std::mem::transmute(ppvaudioptr2),
                        ::std::mem::transmute(pdwaudiobytes2),
                        ::std::mem::transmute(dwflags),
                    )
                }
                pub unsafe fn Play(
                    &self,
                    dwreserved1: u32,
                    dwpriority: u32,
                    dwflags: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).12)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwreserved1),
                        ::std::mem::transmute(dwpriority),
                        ::std::mem::transmute(dwflags),
                    )
                }
                pub unsafe fn SetCurrentPosition(&self, dwnewposition: u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).13)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwnewposition),
                    )
                }
                pub unsafe fn SetFormat(
                    &self,
                    pcfxformat: *mut super::Multimedia::WAVEFORMATEX,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).14)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcfxformat),
                    )
                }
                pub unsafe fn SetVolume(&self, lvolume: i32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).15)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(lvolume),
                    )
                }
                pub unsafe fn SetPan(&self, lpan: i32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).16)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(lpan),
                    )
                }
                pub unsafe fn SetFrequency(&self, dwfrequency: u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).17)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwfrequency),
                    )
                }
                pub unsafe fn Stop(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).18)(::windows::Abi::abi(self))
                }
                pub unsafe fn Unlock(
                    &self,
                    pvaudioptr1: *mut ::std::ffi::c_void,
                    dwaudiobytes1: u32,
                    pvaudioptr2: *mut ::std::ffi::c_void,
                    dwaudiobytes2: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).19)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pvaudioptr1),
                        ::std::mem::transmute(dwaudiobytes1),
                        ::std::mem::transmute(pvaudioptr2),
                        ::std::mem::transmute(dwaudiobytes2),
                    )
                }
                pub unsafe fn Restore(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).20)(::windows::Abi::abi(self))
                }
            }
            impl ::std::convert::From<IDirectSoundBuffer> for ::windows::IUnknown {
                fn from(value: IDirectSoundBuffer) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectSoundBuffer> for ::windows::IUnknown {
                fn from(value: &IDirectSoundBuffer) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectSoundBuffer {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectSoundBuffer {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectSoundBuffer_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdsbuffercaps: *mut DSBCAPS,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwcurrentplaycursor: *mut u32,
                    pdwcurrentwritecursor: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pwfxformat: *mut super::Multimedia::WAVEFORMATEX,
                    dwsizeallocated: u32,
                    pdwsizewritten: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    plvolume: *mut i32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    plpan: *mut i32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwfrequency: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwstatus: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdirectsound: ::windows::RawPtr,
                    pcdsbufferdesc: *mut DSBUFFERDESC,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwoffset: u32,
                    dwbytes: u32,
                    ppvaudioptr1: *mut *mut ::std::ffi::c_void,
                    pdwaudiobytes1: *mut u32,
                    ppvaudioptr2: *mut *mut ::std::ffi::c_void,
                    pdwaudiobytes2: *mut u32,
                    dwflags: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwreserved1: u32,
                    dwpriority: u32,
                    dwflags: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwnewposition: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcfxformat: *mut super::Multimedia::WAVEFORMATEX,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    lvolume: i32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    lpan: i32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwfrequency: u32,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pvaudioptr1: *mut ::std::ffi::c_void,
                    dwaudiobytes1: u32,
                    pvaudioptr2: *mut ::std::ffi::c_void,
                    dwaudiobytes2: u32,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectSoundBuffer8(::windows::IUnknown);
            impl IDirectSoundBuffer8 {}
            unsafe impl ::windows::Interface for IDirectSoundBuffer8 {
                type Vtable = IDirectSoundBuffer8_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    1747297353,
                    29988,
                    19842,
                    [146, 15, 80, 227, 106, 179, 171, 30],
                );
            }
            impl IDirectSoundBuffer8 {
                pub unsafe fn GetCaps(&self, pdsbuffercaps: *mut DSBCAPS) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdsbuffercaps),
                    )
                }
                pub unsafe fn GetCurrentPosition(
                    &self,
                    pdwcurrentplaycursor: *mut u32,
                    pdwcurrentwritecursor: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwcurrentplaycursor),
                        ::std::mem::transmute(pdwcurrentwritecursor),
                    )
                }
                pub unsafe fn GetFormat(
                    &self,
                    pwfxformat: *mut super::Multimedia::WAVEFORMATEX,
                    dwsizeallocated: u32,
                    pdwsizewritten: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pwfxformat),
                        ::std::mem::transmute(dwsizeallocated),
                        ::std::mem::transmute(pdwsizewritten),
                    )
                }
                pub unsafe fn GetVolume(&self, plvolume: *mut i32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(plvolume),
                    )
                }
                pub unsafe fn GetPan(&self, plpan: *mut i32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(plpan),
                    )
                }
                pub unsafe fn GetFrequency(&self, pdwfrequency: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwfrequency),
                    )
                }
                pub unsafe fn GetStatus(&self, pdwstatus: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwstatus),
                    )
                }
                pub unsafe fn Initialize<'a>(
                    &self,
                    pdirectsound: impl ::windows::IntoParam<'a, IDirectSound>,
                    pcdsbufferdesc: *mut DSBUFFERDESC,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(
                        ::windows::Abi::abi(self),
                        pdirectsound.into_param().abi(),
                        ::std::mem::transmute(pcdsbufferdesc),
                    )
                }
                pub unsafe fn Lock(
                    &self,
                    dwoffset: u32,
                    dwbytes: u32,
                    ppvaudioptr1: *mut *mut ::std::ffi::c_void,
                    pdwaudiobytes1: *mut u32,
                    ppvaudioptr2: *mut *mut ::std::ffi::c_void,
                    pdwaudiobytes2: *mut u32,
                    dwflags: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).11)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwoffset),
                        ::std::mem::transmute(dwbytes),
                        ::std::mem::transmute(ppvaudioptr1),
                        ::std::mem::transmute(pdwaudiobytes1),
                        ::std::mem::transmute(ppvaudioptr2),
                        ::std::mem::transmute(pdwaudiobytes2),
                        ::std::mem::transmute(dwflags),
                    )
                }
                pub unsafe fn Play(
                    &self,
                    dwreserved1: u32,
                    dwpriority: u32,
                    dwflags: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).12)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwreserved1),
                        ::std::mem::transmute(dwpriority),
                        ::std::mem::transmute(dwflags),
                    )
                }
                pub unsafe fn SetCurrentPosition(&self, dwnewposition: u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).13)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwnewposition),
                    )
                }
                pub unsafe fn SetFormat(
                    &self,
                    pcfxformat: *mut super::Multimedia::WAVEFORMATEX,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).14)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcfxformat),
                    )
                }
                pub unsafe fn SetVolume(&self, lvolume: i32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).15)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(lvolume),
                    )
                }
                pub unsafe fn SetPan(&self, lpan: i32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).16)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(lpan),
                    )
                }
                pub unsafe fn SetFrequency(&self, dwfrequency: u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).17)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwfrequency),
                    )
                }
                pub unsafe fn Stop(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).18)(::windows::Abi::abi(self))
                }
                pub unsafe fn Unlock(
                    &self,
                    pvaudioptr1: *mut ::std::ffi::c_void,
                    dwaudiobytes1: u32,
                    pvaudioptr2: *mut ::std::ffi::c_void,
                    dwaudiobytes2: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).19)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pvaudioptr1),
                        ::std::mem::transmute(dwaudiobytes1),
                        ::std::mem::transmute(pvaudioptr2),
                        ::std::mem::transmute(dwaudiobytes2),
                    )
                }
                pub unsafe fn Restore(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).20)(::windows::Abi::abi(self))
                }
                pub unsafe fn SetFX(
                    &self,
                    dweffectscount: u32,
                    pdsfxdesc: *mut DSEFFECTDESC,
                    pdwresultcodes: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).21)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dweffectscount),
                        ::std::mem::transmute(pdsfxdesc),
                        ::std::mem::transmute(pdwresultcodes),
                    )
                }
                pub unsafe fn AcquireResources(
                    &self,
                    dwflags: u32,
                    dweffectscount: u32,
                    pdwresultcodes: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).22)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwflags),
                        ::std::mem::transmute(dweffectscount),
                        ::std::mem::transmute(pdwresultcodes),
                    )
                }
                pub unsafe fn GetObjectInPath(
                    &self,
                    rguidobject: *const ::windows::Guid,
                    dwindex: u32,
                    rguidinterface: *const ::windows::Guid,
                    ppobject: *mut *mut ::std::ffi::c_void,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).23)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(rguidobject),
                        ::std::mem::transmute(dwindex),
                        ::std::mem::transmute(rguidinterface),
                        ::std::mem::transmute(ppobject),
                    )
                }
            }
            impl ::std::convert::From<IDirectSoundBuffer8> for ::windows::IUnknown {
                fn from(value: IDirectSoundBuffer8) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectSoundBuffer8> for ::windows::IUnknown {
                fn from(value: &IDirectSoundBuffer8) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectSoundBuffer8 {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectSoundBuffer8 {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            impl ::std::convert::From<IDirectSoundBuffer8> for IDirectSoundBuffer {
                fn from(value: IDirectSoundBuffer8) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectSoundBuffer8> for IDirectSoundBuffer {
                fn from(value: &IDirectSoundBuffer8) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IDirectSoundBuffer> for IDirectSoundBuffer8 {
                fn into_param(self) -> ::windows::Param<'a, IDirectSoundBuffer> {
                    ::windows::Param::Owned(::std::convert::Into::<IDirectSoundBuffer>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IDirectSoundBuffer> for &'a IDirectSoundBuffer8 {
                fn into_param(self) -> ::windows::Param<'a, IDirectSoundBuffer> {
                    ::windows::Param::Owned(::std::convert::Into::<IDirectSoundBuffer>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectSoundBuffer8_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdsbuffercaps: *mut DSBCAPS,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwcurrentplaycursor: *mut u32,
                    pdwcurrentwritecursor: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pwfxformat: *mut super::Multimedia::WAVEFORMATEX,
                    dwsizeallocated: u32,
                    pdwsizewritten: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    plvolume: *mut i32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    plpan: *mut i32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwfrequency: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwstatus: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdirectsound: ::windows::RawPtr,
                    pcdsbufferdesc: *mut DSBUFFERDESC,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwoffset: u32,
                    dwbytes: u32,
                    ppvaudioptr1: *mut *mut ::std::ffi::c_void,
                    pdwaudiobytes1: *mut u32,
                    ppvaudioptr2: *mut *mut ::std::ffi::c_void,
                    pdwaudiobytes2: *mut u32,
                    dwflags: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwreserved1: u32,
                    dwpriority: u32,
                    dwflags: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwnewposition: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcfxformat: *mut super::Multimedia::WAVEFORMATEX,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    lvolume: i32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    lpan: i32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwfrequency: u32,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pvaudioptr1: *mut ::std::ffi::c_void,
                    dwaudiobytes1: u32,
                    pvaudioptr2: *mut ::std::ffi::c_void,
                    dwaudiobytes2: u32,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dweffectscount: u32,
                    pdsfxdesc: *mut DSEFFECTDESC,
                    pdwresultcodes: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwflags: u32,
                    dweffectscount: u32,
                    pdwresultcodes: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    rguidobject: *const ::windows::Guid,
                    dwindex: u32,
                    rguidinterface: *const ::windows::Guid,
                    ppobject: *mut *mut ::std::ffi::c_void,
                ) -> ::windows::HRESULT,
            );
            pub unsafe fn DirectSoundFullDuplexCreate<'a>(
                pcguidcapturedevice: *mut ::windows::Guid,
                pcguidrenderdevice: *mut ::windows::Guid,
                pcdscbufferdesc: *mut DSCBUFFERDESC,
                pcdsbufferdesc: *mut DSBUFFERDESC,
                hwnd: impl ::windows::IntoParam<'a, super::WindowsAndMessaging::HWND>,
                dwlevel: u32,
                ppdsfd: *mut ::std::option::Option<IDirectSoundFullDuplex>,
                ppdscbuffer8: *mut ::std::option::Option<IDirectSoundCaptureBuffer8>,
                ppdsbuffer8: *mut ::std::option::Option<IDirectSoundBuffer8>,
                punkouter: impl ::windows::IntoParam<'a, ::windows::IUnknown>,
            ) -> ::windows::HRESULT {
                panic!("Unsupported target OS");
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct EAudioConstriction(pub i32);
            impl EAudioConstriction {
                pub const eAudioConstrictionOff: Self = Self(0i32);
                pub const eAudioConstriction48_16: Self = Self(1i32);
                pub const eAudioConstriction44_16: Self = Self(2i32);
                pub const eAudioConstriction14_14: Self = Self(3i32);
                pub const eAudioConstrictionMute: Self = Self(4i32);
            }
            impl ::std::convert::From<i32> for EAudioConstriction {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for EAudioConstriction {
                type Abi = Self;
            }
            pub type FNAPONOTIFICATIONCALLBACK = extern "system" fn(
                pproperties: *mut APO_REG_PROPERTIES,
                pvrefdata: *mut ::std::ffi::c_void,
            )
                -> ::windows::HRESULT;
            pub const F_INSTRUMENT_DRUMS: u32 = 2147483648u32;
            pub const F_RGN_OPTION_SELFNONEXCLUSIVE: u32 = 1u32;
            pub const F_WAVELINK_PHASE_MASTER: u32 = 1u32;
            pub const F_WSMP_NO_COMPRESSION: i32 = 2i32;
            pub const F_WSMP_NO_TRUNCATION: i32 = 1i32;
            pub const GUID_All_Objects: ::windows::Guid = ::windows::Guid::from_values(
                2853260773,
                49762,
                16745,
                [161, 200, 35, 214, 152, 204, 115, 181],
            );
            pub const GUID_DMUS_PROP_DLS1: ::windows::Guid = ::windows::Guid::from_values(
                395259687,
                50020,
                4561,
                [167, 96, 0, 0, 248, 117, 172, 18],
            );
            pub const GUID_DMUS_PROP_DLS2: ::windows::Guid = ::windows::Guid::from_values(
                4047870437,
                18057,
                4562,
                [175, 166, 0, 170, 0, 36, 216, 182],
            );
            pub const GUID_DMUS_PROP_Effects: ::windows::Guid = ::windows::Guid::from_values(
                3450394129,
                26698,
                4562,
                [135, 30, 0, 96, 8, 147, 177, 189],
            );
            pub const GUID_DMUS_PROP_GM_Hardware: ::windows::Guid = ::windows::Guid::from_values(
                395259684,
                50020,
                4561,
                [167, 96, 0, 0, 248, 117, 172, 18],
            );
            pub const GUID_DMUS_PROP_GS_Capable: ::windows::Guid = ::windows::Guid::from_values(
                1687595938,
                25008,
                4562,
                [175, 166, 0, 170, 0, 36, 216, 182],
            );
            pub const GUID_DMUS_PROP_GS_Hardware: ::windows::Guid = ::windows::Guid::from_values(
                395259685,
                50020,
                4561,
                [167, 96, 0, 0, 248, 117, 172, 18],
            );
            pub const GUID_DMUS_PROP_INSTRUMENT2: ::windows::Guid = ::windows::Guid::from_values(
                2254426994,
                40807,
                4562,
                [135, 42, 0, 96, 8, 147, 177, 189],
            );
            pub const GUID_DMUS_PROP_LegacyCaps: ::windows::Guid = ::windows::Guid::from_values(
                3483880898,
                161,
                4562,
                [170, 213, 0, 0, 248, 117, 172, 18],
            );
            pub const GUID_DMUS_PROP_MemorySize: ::windows::Guid = ::windows::Guid::from_values(
                395259688,
                50020,
                4561,
                [167, 96, 0, 0, 248, 117, 172, 18],
            );
            pub const GUID_DMUS_PROP_SampleMemorySize: ::windows::Guid =
                ::windows::Guid::from_values(
                    395259688,
                    50020,
                    4561,
                    [167, 96, 0, 0, 248, 117, 172, 18],
                );
            pub const GUID_DMUS_PROP_SamplePlaybackRate: ::windows::Guid =
                ::windows::Guid::from_values(
                    714209043,
                    42175,
                    4562,
                    [187, 223, 0, 96, 8, 51, 219, 216],
                );
            pub const GUID_DMUS_PROP_SetSynthSink: ::windows::Guid = ::windows::Guid::from_values(
                171596709,
                14262,
                4562,
                [185, 249, 0, 0, 248, 117, 172, 18],
            );
            pub const GUID_DMUS_PROP_SinkUsesDSound: ::windows::Guid = ::windows::Guid::from_values(
                3189803095,
                35154,
                4562,
                [186, 28, 0, 0, 248, 117, 172, 18],
            );
            pub const GUID_DMUS_PROP_SynthSink_DSOUND: ::windows::Guid =
                ::windows::Guid::from_values(
                    178878532,
                    51319,
                    4561,
                    [135, 12, 0, 96, 8, 147, 177, 189],
                );
            pub const GUID_DMUS_PROP_SynthSink_WAVE: ::windows::Guid = ::windows::Guid::from_values(
                178878533,
                51319,
                4561,
                [135, 12, 0, 96, 8, 147, 177, 189],
            );
            pub const GUID_DMUS_PROP_Volume: ::windows::Guid = ::windows::Guid::from_values(
                4276071973,
                58478,
                4561,
                [170, 206, 0, 0, 248, 117, 172, 18],
            );
            pub const GUID_DMUS_PROP_WavesReverb: ::windows::Guid = ::windows::Guid::from_values(
                80434722,
                13029,
                4562,
                [175, 166, 0, 170, 0, 36, 216, 182],
            );
            pub const GUID_DMUS_PROP_WriteLatency: ::windows::Guid = ::windows::Guid::from_values(
                646582176,
                24818,
                4562,
                [175, 166, 0, 170, 0, 36, 216, 182],
            );
            pub const GUID_DMUS_PROP_WritePeriod: ::windows::Guid = ::windows::Guid::from_values(
                646582177,
                24818,
                4562,
                [175, 166, 0, 170, 0, 36, 216, 182],
            );
            pub const GUID_DMUS_PROP_XG_Capable: ::windows::Guid = ::windows::Guid::from_values(
                1687595937,
                25008,
                4562,
                [175, 166, 0, 170, 0, 36, 216, 182],
            );
            pub const GUID_DMUS_PROP_XG_Hardware: ::windows::Guid = ::windows::Guid::from_values(
                395259686,
                50020,
                4561,
                [167, 96, 0, 0, 248, 117, 172, 18],
            );
            pub const GUID_DSCFX_CLASS_AEC: ::windows::Guid = ::windows::Guid::from_values(
                3214294400,
                50521,
                4560,
                [138, 43, 0, 160, 201, 37, 90, 193],
            );
            pub const GUID_DSCFX_CLASS_NS: ::windows::Guid = ::windows::Guid::from_values(
                3766456383,
                25341,
                20064,
                [140, 221, 222, 167, 35, 102, 101, 181],
            );
            pub const GUID_DSCFX_MS_AEC: ::windows::Guid = ::windows::Guid::from_values(
                3454777625,
                14234,
                18570,
                [135, 101, 245, 60, 253, 54, 222, 64],
            );
            pub const GUID_DSCFX_MS_NS: ::windows::Guid = ::windows::Guid::from_values(
                298174267,
                26345,
                19361,
                [160, 186, 232, 20, 198, 238, 217, 45],
            );
            pub const GUID_DSCFX_SYSTEM_AEC: ::windows::Guid = ::windows::Guid::from_values(
                472040813,
                39033,
                20315,
                [163, 137, 39, 153, 109, 220, 40, 16],
            );
            pub const GUID_DSCFX_SYSTEM_NS: ::windows::Guid = ::windows::Guid::from_values(
                1521518638,
                29300,
                17686,
                [135, 125, 78, 238, 153, 186, 79, 208],
            );
            pub const GUID_DSFX_STANDARD_CHORUS: ::windows::Guid = ::windows::Guid::from_values(
                4024853148,
                33271,
                17025,
                [189, 145, 201, 214, 4, 169, 90, 246],
            );
            pub const GUID_DSFX_STANDARD_COMPRESSOR: ::windows::Guid = ::windows::Guid::from_values(
                4009828217,
                16384,
                16493,
                [135, 175, 191, 251, 63, 195, 157, 87],
            );
            pub const GUID_DSFX_STANDARD_DISTORTION: ::windows::Guid = ::windows::Guid::from_values(
                4010888336,
                52509,
                18510,
                [150, 229, 9, 207, 175, 145, 42, 33],
            );
            pub const GUID_DSFX_STANDARD_ECHO: ::windows::Guid = ::windows::Guid::from_values(
                4013855532,
                54283,
                20305,
                [140, 207, 63, 152, 241, 178, 157, 93],
            );
            pub const GUID_DSFX_STANDARD_FLANGER: ::windows::Guid = ::windows::Guid::from_values(
                4023008658,
                57304,
                18034,
                [166, 3, 116, 32, 137, 75, 173, 152],
            );
            pub const GUID_DSFX_STANDARD_GARGLE: ::windows::Guid = ::windows::Guid::from_values(
                3674046992,
                22289,
                19345,
                [159, 227, 247, 91, 122, 226, 121, 191],
            );
            pub const GUID_DSFX_STANDARD_I3DL2REVERB: ::windows::Guid =
                ::windows::Guid::from_values(
                    4019740273,
                    54727,
                    17108,
                    [186, 77, 45, 7, 62, 46, 150, 244],
                );
            pub const GUID_DSFX_STANDARD_PARAMEQ: ::windows::Guid = ::windows::Guid::from_values(
                302837129,
                15348,
                16755,
                [161, 50, 60, 180, 6, 207, 50, 49],
            );
            pub const GUID_DSFX_WAVES_REVERB: ::windows::Guid = ::windows::Guid::from_values(
                2281439848,
                39509,
                17248,
                [149, 170, 0, 74, 29, 157, 226, 108],
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioDeviceModulesClient(::windows::IUnknown);
            impl IAudioDeviceModulesClient {}
            unsafe impl ::windows::Interface for IAudioDeviceModulesClient {
                type Vtable = IAudioDeviceModulesClient_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2566094252,
                    53430,
                    18933,
                    [137, 106, 170, 77, 22, 154, 76, 72],
                );
            }
            impl IAudioDeviceModulesClient {
                pub unsafe fn SetAudioDeviceModulesManager<'a>(
                    &self,
                    paudiodevicemodulesmanager: impl ::windows::IntoParam<'a, ::windows::IUnknown>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        paudiodevicemodulesmanager.into_param().abi(),
                    )
                }
            }
            impl ::std::convert::From<IAudioDeviceModulesClient> for ::windows::IUnknown {
                fn from(value: IAudioDeviceModulesClient) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioDeviceModulesClient> for ::windows::IUnknown {
                fn from(value: &IAudioDeviceModulesClient) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioDeviceModulesClient {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioDeviceModulesClient {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioDeviceModulesClient_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    paudiodevicemodulesmanager: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioProcessingObject(::windows::IUnknown);
            impl IAudioProcessingObject {}
            unsafe impl ::windows::Interface for IAudioProcessingObject {
                type Vtable = IAudioProcessingObject_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    4252969769,
                    9424,
                    19292,
                    [177, 119, 89, 44, 57, 249, 202, 16],
                );
            }
            impl IAudioProcessingObject {
                pub unsafe fn Reset(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(::windows::Abi::abi(self))
                }
                pub unsafe fn GetLatency(&self, ptime: *mut i64) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(ptime),
                    )
                }
                pub unsafe fn GetRegistrationProperties(
                    &self,
                    ppregprops: *mut *mut APO_REG_PROPERTIES,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(ppregprops),
                    )
                }
                pub unsafe fn Initialize(
                    &self,
                    cbdatasize: u32,
                    pbydata: *mut u8,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(cbdatasize),
                        ::std::mem::transmute(pbydata),
                    )
                }
                pub unsafe fn IsInputFormatSupported<'a>(
                    &self,
                    poppositeformat: impl ::windows::IntoParam<'a, IAudioMediaType>,
                    prequestedinputformat: impl ::windows::IntoParam<'a, IAudioMediaType>,
                    ppsupportedinputformat: *mut ::std::option::Option<IAudioMediaType>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        poppositeformat.into_param().abi(),
                        prequestedinputformat.into_param().abi(),
                        ::std::mem::transmute(ppsupportedinputformat),
                    )
                }
                pub unsafe fn IsOutputFormatSupported<'a>(
                    &self,
                    poppositeformat: impl ::windows::IntoParam<'a, IAudioMediaType>,
                    prequestedoutputformat: impl ::windows::IntoParam<'a, IAudioMediaType>,
                    ppsupportedoutputformat: *mut ::std::option::Option<IAudioMediaType>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        poppositeformat.into_param().abi(),
                        prequestedoutputformat.into_param().abi(),
                        ::std::mem::transmute(ppsupportedoutputformat),
                    )
                }
                pub unsafe fn GetInputChannelCount(
                    &self,
                    pu32channelcount: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pu32channelcount),
                    )
                }
            }
            impl ::std::convert::From<IAudioProcessingObject> for ::windows::IUnknown {
                fn from(value: IAudioProcessingObject) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioProcessingObject> for ::windows::IUnknown {
                fn from(value: &IAudioProcessingObject) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioProcessingObject {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioProcessingObject {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioProcessingObject_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    ptime: *mut i64,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    ppregprops: *mut *mut APO_REG_PROPERTIES,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    cbdatasize: u32,
                    pbydata: *mut u8,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    poppositeformat: ::windows::RawPtr,
                    prequestedinputformat: ::windows::RawPtr,
                    ppsupportedinputformat: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    poppositeformat: ::windows::RawPtr,
                    prequestedoutputformat: ::windows::RawPtr,
                    ppsupportedoutputformat: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pu32channelcount: *mut u32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioProcessingObjectConfiguration(::windows::IUnknown);
            impl IAudioProcessingObjectConfiguration {}
            unsafe impl ::windows::Interface for IAudioProcessingObjectConfiguration {
                type Vtable = IAudioProcessingObjectConfiguration_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    241096709,
                    43942,
                    18883,
                    [143, 154, 43, 140, 136, 156, 79, 168],
                );
            }
            impl IAudioProcessingObjectConfiguration {
                pub unsafe fn LockForProcess(
                    &self,
                    u32numinputconnections: u32,
                    ppinputconnections: *mut *mut APO_CONNECTION_DESCRIPTOR,
                    u32numoutputconnections: u32,
                    ppoutputconnections: *mut *mut APO_CONNECTION_DESCRIPTOR,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(u32numinputconnections),
                        ::std::mem::transmute(ppinputconnections),
                        ::std::mem::transmute(u32numoutputconnections),
                        ::std::mem::transmute(ppoutputconnections),
                    )
                }
                pub unsafe fn UnlockForProcess(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(::windows::Abi::abi(self))
                }
            }
            impl ::std::convert::From<IAudioProcessingObjectConfiguration> for ::windows::IUnknown {
                fn from(value: IAudioProcessingObjectConfiguration) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioProcessingObjectConfiguration> for ::windows::IUnknown {
                fn from(value: &IAudioProcessingObjectConfiguration) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioProcessingObjectConfiguration {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioProcessingObjectConfiguration {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioProcessingObjectConfiguration_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    u32numinputconnections: u32,
                    ppinputconnections: *mut *mut APO_CONNECTION_DESCRIPTOR_abi,
                    u32numoutputconnections: u32,
                    ppoutputconnections: *mut *mut APO_CONNECTION_DESCRIPTOR_abi,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioProcessingObjectRT(::windows::IUnknown);
            impl IAudioProcessingObjectRT {}
            unsafe impl ::windows::Interface for IAudioProcessingObjectRT {
                type Vtable = IAudioProcessingObjectRT_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2652727917,
                    56764,
                    20117,
                    [164, 199, 173, 100, 186, 55, 132, 108],
                );
            }
            impl IAudioProcessingObjectRT {
                pub unsafe fn CalcInputFrames(&self, u32outputframecount: u32) -> u32 {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(u32outputframecount),
                    )
                }
                pub unsafe fn CalcOutputFrames(&self, u32inputframecount: u32) -> u32 {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(u32inputframecount),
                    )
                }
            }
            impl ::std::convert::From<IAudioProcessingObjectRT> for ::windows::IUnknown {
                fn from(value: IAudioProcessingObjectRT) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioProcessingObjectRT> for ::windows::IUnknown {
                fn from(value: &IAudioProcessingObjectRT) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioProcessingObjectRT {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioProcessingObjectRT {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioProcessingObjectRT_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(),
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    u32outputframecount: u32,
                ) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    u32inputframecount: u32,
                ) -> u32,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioProcessingObjectVBR(::windows::IUnknown);
            impl IAudioProcessingObjectVBR {}
            unsafe impl ::windows::Interface for IAudioProcessingObjectVBR {
                type Vtable = IAudioProcessingObjectVBR_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2074205071,
                    30893,
                    18893,
                    [149, 145, 247, 157, 128, 161, 124, 129],
                );
            }
            impl IAudioProcessingObjectVBR {
                pub unsafe fn CalcMaxInputFrames(
                    &self,
                    u32maxoutputframecount: u32,
                    pu32inputframecount: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(u32maxoutputframecount),
                        ::std::mem::transmute(pu32inputframecount),
                    )
                }
                pub unsafe fn CalcMaxOutputFrames(
                    &self,
                    u32maxinputframecount: u32,
                    pu32outputframecount: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(u32maxinputframecount),
                        ::std::mem::transmute(pu32outputframecount),
                    )
                }
            }
            impl ::std::convert::From<IAudioProcessingObjectVBR> for ::windows::IUnknown {
                fn from(value: IAudioProcessingObjectVBR) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioProcessingObjectVBR> for ::windows::IUnknown {
                fn from(value: &IAudioProcessingObjectVBR) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioProcessingObjectVBR {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioProcessingObjectVBR {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioProcessingObjectVBR_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    u32maxoutputframecount: u32,
                    pu32inputframecount: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    u32maxinputframecount: u32,
                    pu32outputframecount: *mut u32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioSystemEffects(::windows::IUnknown);
            impl IAudioSystemEffects {}
            unsafe impl ::windows::Interface for IAudioSystemEffects {
                type Vtable = IAudioSystemEffects_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    1604325159,
                    44502,
                    18842,
                    [138, 157, 107, 152, 82, 31, 167, 91],
                );
            }
            impl IAudioSystemEffects {}
            impl ::std::convert::From<IAudioSystemEffects> for ::windows::IUnknown {
                fn from(value: IAudioSystemEffects) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioSystemEffects> for ::windows::IUnknown {
                fn from(value: &IAudioSystemEffects) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioSystemEffects {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioSystemEffects {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioSystemEffects_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioSystemEffects2(::windows::IUnknown);
            impl IAudioSystemEffects2 {}
            unsafe impl ::windows::Interface for IAudioSystemEffects2 {
                type Vtable = IAudioSystemEffects2_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3137247698,
                    29750,
                    17614,
                    [158, 14, 77, 137, 175, 191, 255, 86],
                );
            }
            impl IAudioSystemEffects2 {
                pub unsafe fn GetEffectsList<'a>(
                    &self,
                    ppeffectsids: *mut *mut ::windows::Guid,
                    pceffects: *mut u32,
                    event: impl ::windows::IntoParam<'a, super::SystemServices::HANDLE>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(ppeffectsids),
                        ::std::mem::transmute(pceffects),
                        event.into_param().abi(),
                    )
                }
            }
            impl ::std::convert::From<IAudioSystemEffects2> for ::windows::IUnknown {
                fn from(value: IAudioSystemEffects2) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioSystemEffects2> for ::windows::IUnknown {
                fn from(value: &IAudioSystemEffects2) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioSystemEffects2 {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioSystemEffects2 {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            impl ::std::convert::From<IAudioSystemEffects2> for IAudioSystemEffects {
                fn from(value: IAudioSystemEffects2) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioSystemEffects2> for IAudioSystemEffects {
                fn from(value: &IAudioSystemEffects2) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IAudioSystemEffects> for IAudioSystemEffects2 {
                fn into_param(self) -> ::windows::Param<'a, IAudioSystemEffects> {
                    ::windows::Param::Owned(::std::convert::Into::<IAudioSystemEffects>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IAudioSystemEffects> for &'a IAudioSystemEffects2 {
                fn into_param(self) -> ::windows::Param<'a, IAudioSystemEffects> {
                    ::windows::Param::Owned(::std::convert::Into::<IAudioSystemEffects>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioSystemEffects2_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    ppeffectsids: *mut *mut ::windows::Guid,
                    pceffects: *mut u32,
                    event: super::SystemServices::HANDLE,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioSystemEffectsCustomFormats(::windows::IUnknown);
            impl IAudioSystemEffectsCustomFormats {}
            unsafe impl ::windows::Interface for IAudioSystemEffectsCustomFormats {
                type Vtable = IAudioSystemEffectsCustomFormats_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2971102772,
                    47999,
                    20229,
                    [190, 189, 27, 24, 165, 52, 224, 151],
                );
            }
            impl IAudioSystemEffectsCustomFormats {
                pub unsafe fn GetFormatCount(&self, pcformats: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcformats),
                    )
                }
                pub unsafe fn GetFormat(
                    &self,
                    nformat: u32,
                    ppformat: *mut ::std::option::Option<IAudioMediaType>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nformat),
                        ::std::mem::transmute(ppformat),
                    )
                }
                pub unsafe fn GetFormatRepresentation(
                    &self,
                    nformat: u32,
                    ppwstrformatrep: *mut super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nformat),
                        ::std::mem::transmute(ppwstrformatrep),
                    )
                }
            }
            impl ::std::convert::From<IAudioSystemEffectsCustomFormats> for ::windows::IUnknown {
                fn from(value: IAudioSystemEffectsCustomFormats) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioSystemEffectsCustomFormats> for ::windows::IUnknown {
                fn from(value: &IAudioSystemEffectsCustomFormats) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioSystemEffectsCustomFormats {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioSystemEffectsCustomFormats {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioSystemEffectsCustomFormats_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcformats: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nformat: u32,
                    ppformat: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nformat: u32,
                    ppwstrformatrep: *mut super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectMusic(::windows::IUnknown);
            impl IDirectMusic {}
            unsafe impl ::windows::Interface for IDirectMusic {
                type Vtable = IDirectMusic_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    1698042202,
                    31533,
                    4562,
                    [186, 24, 0, 0, 248, 117, 172, 18],
                );
            }
            impl IDirectMusic {
                pub unsafe fn EnumPort(
                    &self,
                    dwindex: u32,
                    pportcaps: *mut DMUS_PORTCAPS,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwindex),
                        ::std::mem::transmute(pportcaps),
                    )
                }
                pub unsafe fn CreateMusicBuffer<'a>(
                    &self,
                    pbufferdesc: *mut DMUS_BUFFERDESC,
                    ppbuffer: *mut ::std::option::Option<IDirectMusicBuffer>,
                    punkouter: impl ::windows::IntoParam<'a, ::windows::IUnknown>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pbufferdesc),
                        ::std::mem::transmute(ppbuffer),
                        punkouter.into_param().abi(),
                    )
                }
                pub unsafe fn CreatePort<'a>(
                    &self,
                    rclsidport: *const ::windows::Guid,
                    pportparams: *mut DMUS_PORTPARAMS8,
                    ppport: *mut ::std::option::Option<IDirectMusicPort>,
                    punkouter: impl ::windows::IntoParam<'a, ::windows::IUnknown>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(rclsidport),
                        ::std::mem::transmute(pportparams),
                        ::std::mem::transmute(ppport),
                        punkouter.into_param().abi(),
                    )
                }
                pub unsafe fn EnumMasterClock(
                    &self,
                    dwindex: u32,
                    lpclockinfo: *mut DMUS_CLOCKINFO8,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwindex),
                        ::std::mem::transmute(lpclockinfo),
                    )
                }
                pub unsafe fn SetMasterClock(
                    &self,
                    rguidclock: *const ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(rguidclock),
                    )
                }
                pub unsafe fn Activate<'a>(
                    &self,
                    fenable: impl ::windows::IntoParam<'a, super::SystemServices::BOOL>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        fenable.into_param().abi(),
                    )
                }
                pub unsafe fn GetDefaultPort(
                    &self,
                    pguidport: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pguidport),
                    )
                }
                pub unsafe fn SetDirectSound<'a>(
                    &self,
                    pdirectsound: impl ::windows::IntoParam<'a, IDirectSound>,
                    hwnd: impl ::windows::IntoParam<'a, super::WindowsAndMessaging::HWND>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).11)(
                        ::windows::Abi::abi(self),
                        pdirectsound.into_param().abi(),
                        hwnd.into_param().abi(),
                    )
                }
            }
            impl ::std::convert::From<IDirectMusic> for ::windows::IUnknown {
                fn from(value: IDirectMusic) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectMusic> for ::windows::IUnknown {
                fn from(value: &IDirectMusic) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectMusic {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectMusic {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectMusic_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwindex: u32,
                    pportcaps: *mut DMUS_PORTCAPS,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pbufferdesc: *mut DMUS_BUFFERDESC,
                    ppbuffer: *mut ::windows::RawPtr,
                    punkouter: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    rclsidport: *const ::windows::Guid,
                    pportparams: *mut DMUS_PORTPARAMS8,
                    ppport: *mut ::windows::RawPtr,
                    punkouter: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwindex: u32,
                    lpclockinfo: *mut DMUS_CLOCKINFO8,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(),
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    rguidclock: *const ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    fenable: super::SystemServices::BOOL,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pguidport: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdirectsound: ::windows::RawPtr,
                    hwnd: super::WindowsAndMessaging::HWND,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectMusic8(::windows::IUnknown);
            impl IDirectMusic8 {}
            unsafe impl ::windows::Interface for IDirectMusic8 {
                type Vtable = IDirectMusic8_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    758524407,
                    33085,
                    18745,
                    [133, 8, 240, 92, 107, 117, 253, 151],
                );
            }
            impl IDirectMusic8 {
                pub unsafe fn EnumPort(
                    &self,
                    dwindex: u32,
                    pportcaps: *mut DMUS_PORTCAPS,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwindex),
                        ::std::mem::transmute(pportcaps),
                    )
                }
                pub unsafe fn CreateMusicBuffer<'a>(
                    &self,
                    pbufferdesc: *mut DMUS_BUFFERDESC,
                    ppbuffer: *mut ::std::option::Option<IDirectMusicBuffer>,
                    punkouter: impl ::windows::IntoParam<'a, ::windows::IUnknown>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pbufferdesc),
                        ::std::mem::transmute(ppbuffer),
                        punkouter.into_param().abi(),
                    )
                }
                pub unsafe fn CreatePort<'a>(
                    &self,
                    rclsidport: *const ::windows::Guid,
                    pportparams: *mut DMUS_PORTPARAMS8,
                    ppport: *mut ::std::option::Option<IDirectMusicPort>,
                    punkouter: impl ::windows::IntoParam<'a, ::windows::IUnknown>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(rclsidport),
                        ::std::mem::transmute(pportparams),
                        ::std::mem::transmute(ppport),
                        punkouter.into_param().abi(),
                    )
                }
                pub unsafe fn EnumMasterClock(
                    &self,
                    dwindex: u32,
                    lpclockinfo: *mut DMUS_CLOCKINFO8,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwindex),
                        ::std::mem::transmute(lpclockinfo),
                    )
                }
                pub unsafe fn SetMasterClock(
                    &self,
                    rguidclock: *const ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(rguidclock),
                    )
                }
                pub unsafe fn Activate<'a>(
                    &self,
                    fenable: impl ::windows::IntoParam<'a, super::SystemServices::BOOL>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        fenable.into_param().abi(),
                    )
                }
                pub unsafe fn GetDefaultPort(
                    &self,
                    pguidport: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pguidport),
                    )
                }
                pub unsafe fn SetDirectSound<'a>(
                    &self,
                    pdirectsound: impl ::windows::IntoParam<'a, IDirectSound>,
                    hwnd: impl ::windows::IntoParam<'a, super::WindowsAndMessaging::HWND>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).11)(
                        ::windows::Abi::abi(self),
                        pdirectsound.into_param().abi(),
                        hwnd.into_param().abi(),
                    )
                }
            }
            impl ::std::convert::From<IDirectMusic8> for ::windows::IUnknown {
                fn from(value: IDirectMusic8) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectMusic8> for ::windows::IUnknown {
                fn from(value: &IDirectMusic8) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectMusic8 {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectMusic8 {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            impl ::std::convert::From<IDirectMusic8> for IDirectMusic {
                fn from(value: IDirectMusic8) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectMusic8> for IDirectMusic {
                fn from(value: &IDirectMusic8) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IDirectMusic> for IDirectMusic8 {
                fn into_param(self) -> ::windows::Param<'a, IDirectMusic> {
                    ::windows::Param::Owned(::std::convert::Into::<IDirectMusic>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IDirectMusic> for &'a IDirectMusic8 {
                fn into_param(self) -> ::windows::Param<'a, IDirectMusic> {
                    ::windows::Param::Owned(::std::convert::Into::<IDirectMusic>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectMusic8_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwindex: u32,
                    pportcaps: *mut DMUS_PORTCAPS,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pbufferdesc: *mut DMUS_BUFFERDESC,
                    ppbuffer: *mut ::windows::RawPtr,
                    punkouter: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    rclsidport: *const ::windows::Guid,
                    pportparams: *mut DMUS_PORTPARAMS8,
                    ppport: *mut ::windows::RawPtr,
                    punkouter: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwindex: u32,
                    lpclockinfo: *mut DMUS_CLOCKINFO8,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(),
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    rguidclock: *const ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    fenable: super::SystemServices::BOOL,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pguidport: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdirectsound: ::windows::RawPtr,
                    hwnd: super::WindowsAndMessaging::HWND,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(),
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectMusicBuffer(::windows::IUnknown);
            impl IDirectMusicBuffer {}
            unsafe impl ::windows::Interface for IDirectMusicBuffer {
                type Vtable = IDirectMusicBuffer_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3534497912,
                    45979,
                    4561,
                    [135, 4, 0, 96, 8, 147, 177, 189],
                );
            }
            impl IDirectMusicBuffer {
                pub unsafe fn Flush(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(::windows::Abi::abi(self))
                }
                pub unsafe fn TotalTime(&self, prttime: *mut i64) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(prttime),
                    )
                }
                pub unsafe fn PackStructured(
                    &self,
                    rt: i64,
                    dwchannelgroup: u32,
                    dwchannelmessage: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(rt),
                        ::std::mem::transmute(dwchannelgroup),
                        ::std::mem::transmute(dwchannelmessage),
                    )
                }
                pub unsafe fn PackUnstructured(
                    &self,
                    rt: i64,
                    dwchannelgroup: u32,
                    cb: u32,
                    lpb: *mut u8,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(rt),
                        ::std::mem::transmute(dwchannelgroup),
                        ::std::mem::transmute(cb),
                        ::std::mem::transmute(lpb),
                    )
                }
                pub unsafe fn ResetReadPtr(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(::windows::Abi::abi(self))
                }
                pub unsafe fn GetNextEvent(
                    &self,
                    prt: *mut i64,
                    pdwchannelgroup: *mut u32,
                    pdwlength: *mut u32,
                    ppdata: *mut *mut u8,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(prt),
                        ::std::mem::transmute(pdwchannelgroup),
                        ::std::mem::transmute(pdwlength),
                        ::std::mem::transmute(ppdata),
                    )
                }
                pub unsafe fn GetRawBufferPtr(&self, ppdata: *mut *mut u8) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(ppdata),
                    )
                }
                pub unsafe fn GetStartTime(&self, prt: *mut i64) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(prt),
                    )
                }
                pub unsafe fn GetUsedBytes(&self, pcb: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).11)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcb),
                    )
                }
                pub unsafe fn GetMaxBytes(&self, pcb: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).12)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcb),
                    )
                }
                pub unsafe fn GetBufferFormat(
                    &self,
                    pguidformat: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).13)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pguidformat),
                    )
                }
                pub unsafe fn SetStartTime(&self, rt: i64) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).14)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(rt),
                    )
                }
                pub unsafe fn SetUsedBytes(&self, cb: u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).15)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(cb),
                    )
                }
            }
            impl ::std::convert::From<IDirectMusicBuffer> for ::windows::IUnknown {
                fn from(value: IDirectMusicBuffer) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectMusicBuffer> for ::windows::IUnknown {
                fn from(value: &IDirectMusicBuffer) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectMusicBuffer {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectMusicBuffer {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectMusicBuffer_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    prttime: *mut i64,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    rt: i64,
                    dwchannelgroup: u32,
                    dwchannelmessage: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    rt: i64,
                    dwchannelgroup: u32,
                    cb: u32,
                    lpb: *mut u8,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    prt: *mut i64,
                    pdwchannelgroup: *mut u32,
                    pdwlength: *mut u32,
                    ppdata: *mut *mut u8,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    ppdata: *mut *mut u8,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    prt: *mut i64,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcb: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcb: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pguidformat: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    rt: i64,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    cb: u32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectMusicCollection(::windows::IUnknown);
            impl IDirectMusicCollection {}
            unsafe impl ::windows::Interface for IDirectMusicCollection {
                type Vtable = IDirectMusicCollection_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3534497916,
                    45979,
                    4561,
                    [135, 4, 0, 96, 8, 147, 177, 189],
                );
            }
            impl IDirectMusicCollection {
                pub unsafe fn GetInstrument(
                    &self,
                    dwpatch: u32,
                    ppinstrument: *mut ::std::option::Option<IDirectMusicInstrument>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwpatch),
                        ::std::mem::transmute(ppinstrument),
                    )
                }
                pub unsafe fn EnumInstrument<'a>(
                    &self,
                    dwindex: u32,
                    pdwpatch: *mut u32,
                    pwszname: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                    dwnamelen: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwindex),
                        ::std::mem::transmute(pdwpatch),
                        pwszname.into_param().abi(),
                        ::std::mem::transmute(dwnamelen),
                    )
                }
            }
            impl ::std::convert::From<IDirectMusicCollection> for ::windows::IUnknown {
                fn from(value: IDirectMusicCollection) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectMusicCollection> for ::windows::IUnknown {
                fn from(value: &IDirectMusicCollection) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectMusicCollection {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectMusicCollection {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectMusicCollection_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwpatch: u32,
                    ppinstrument: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwindex: u32,
                    pdwpatch: *mut u32,
                    pwszname: super::SystemServices::PWSTR,
                    dwnamelen: u32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectMusicDownload(::windows::IUnknown);
            impl IDirectMusicDownload {}
            unsafe impl ::windows::Interface for IDirectMusicDownload {
                type Vtable = IDirectMusicDownload_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3534497915,
                    45979,
                    4561,
                    [135, 4, 0, 96, 8, 147, 177, 189],
                );
            }
            impl IDirectMusicDownload {
                pub unsafe fn GetBuffer(
                    &self,
                    ppvbuffer: *mut *mut ::std::ffi::c_void,
                    pdwsize: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(ppvbuffer),
                        ::std::mem::transmute(pdwsize),
                    )
                }
            }
            impl ::std::convert::From<IDirectMusicDownload> for ::windows::IUnknown {
                fn from(value: IDirectMusicDownload) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectMusicDownload> for ::windows::IUnknown {
                fn from(value: &IDirectMusicDownload) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectMusicDownload {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectMusicDownload {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectMusicDownload_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    ppvbuffer: *mut *mut ::std::ffi::c_void,
                    pdwsize: *mut u32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectMusicDownloadedInstrument(::windows::IUnknown);
            impl IDirectMusicDownloadedInstrument {}
            unsafe impl ::windows::Interface for IDirectMusicDownloadedInstrument {
                type Vtable = IDirectMusicDownloadedInstrument_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3534497918,
                    45979,
                    4561,
                    [135, 4, 0, 96, 8, 147, 177, 189],
                );
            }
            impl IDirectMusicDownloadedInstrument {}
            impl ::std::convert::From<IDirectMusicDownloadedInstrument> for ::windows::IUnknown {
                fn from(value: IDirectMusicDownloadedInstrument) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectMusicDownloadedInstrument> for ::windows::IUnknown {
                fn from(value: &IDirectMusicDownloadedInstrument) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectMusicDownloadedInstrument {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectMusicDownloadedInstrument {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectMusicDownloadedInstrument_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectMusicInstrument(::windows::IUnknown);
            impl IDirectMusicInstrument {}
            unsafe impl ::windows::Interface for IDirectMusicInstrument {
                type Vtable = IDirectMusicInstrument_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3534497917,
                    45979,
                    4561,
                    [135, 4, 0, 96, 8, 147, 177, 189],
                );
            }
            impl IDirectMusicInstrument {
                pub unsafe fn GetPatch(&self, pdwpatch: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwpatch),
                    )
                }
                pub unsafe fn SetPatch(&self, dwpatch: u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwpatch),
                    )
                }
            }
            impl ::std::convert::From<IDirectMusicInstrument> for ::windows::IUnknown {
                fn from(value: IDirectMusicInstrument) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectMusicInstrument> for ::windows::IUnknown {
                fn from(value: &IDirectMusicInstrument) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectMusicInstrument {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectMusicInstrument {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectMusicInstrument_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwpatch: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwpatch: u32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectMusicPort(::windows::IUnknown);
            impl IDirectMusicPort {}
            unsafe impl ::windows::Interface for IDirectMusicPort {
                type Vtable = IDirectMusicPort_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    150132937,
                    14274,
                    4562,
                    [185, 249, 0, 0, 248, 117, 172, 18],
                );
            }
            impl IDirectMusicPort {
                pub unsafe fn PlayBuffer<'a>(
                    &self,
                    pbuffer: impl ::windows::IntoParam<'a, IDirectMusicBuffer>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        pbuffer.into_param().abi(),
                    )
                }
                pub unsafe fn SetReadNotificationHandle<'a>(
                    &self,
                    hevent: impl ::windows::IntoParam<'a, super::SystemServices::HANDLE>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        hevent.into_param().abi(),
                    )
                }
                pub unsafe fn Read<'a>(
                    &self,
                    pbuffer: impl ::windows::IntoParam<'a, IDirectMusicBuffer>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        pbuffer.into_param().abi(),
                    )
                }
                pub unsafe fn DownloadInstrument<'a>(
                    &self,
                    pinstrument: impl ::windows::IntoParam<'a, IDirectMusicInstrument>,
                    ppdownloadedinstrument: *mut ::std::option::Option<
                        IDirectMusicDownloadedInstrument,
                    >,
                    pnoteranges: *mut DMUS_NOTERANGE,
                    dwnumnoteranges: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        pinstrument.into_param().abi(),
                        ::std::mem::transmute(ppdownloadedinstrument),
                        ::std::mem::transmute(pnoteranges),
                        ::std::mem::transmute(dwnumnoteranges),
                    )
                }
                pub unsafe fn UnloadInstrument<'a>(
                    &self,
                    pdownloadedinstrument: impl ::windows::IntoParam<
                        'a,
                        IDirectMusicDownloadedInstrument,
                    >,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        pdownloadedinstrument.into_param().abi(),
                    )
                }
                pub unsafe fn GetRunningStats(
                    &self,
                    pstats: *mut DMUS_SYNTHSTATS,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pstats),
                    )
                }
                pub unsafe fn Compact(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(::windows::Abi::abi(self))
                }
                pub unsafe fn GetCaps(&self, pportcaps: *mut DMUS_PORTCAPS) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).11)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pportcaps),
                    )
                }
                pub unsafe fn SetNumChannelGroups(
                    &self,
                    dwchannelgroups: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).13)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwchannelgroups),
                    )
                }
                pub unsafe fn GetNumChannelGroups(
                    &self,
                    pdwchannelgroups: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).14)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwchannelgroups),
                    )
                }
                pub unsafe fn Activate<'a>(
                    &self,
                    factive: impl ::windows::IntoParam<'a, super::SystemServices::BOOL>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).15)(
                        ::windows::Abi::abi(self),
                        factive.into_param().abi(),
                    )
                }
                pub unsafe fn SetChannelPriority(
                    &self,
                    dwchannelgroup: u32,
                    dwchannel: u32,
                    dwpriority: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).16)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwchannelgroup),
                        ::std::mem::transmute(dwchannel),
                        ::std::mem::transmute(dwpriority),
                    )
                }
                pub unsafe fn GetChannelPriority(
                    &self,
                    dwchannelgroup: u32,
                    dwchannel: u32,
                    pdwpriority: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).17)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwchannelgroup),
                        ::std::mem::transmute(dwchannel),
                        ::std::mem::transmute(pdwpriority),
                    )
                }
                pub unsafe fn SetDirectSound<'a>(
                    &self,
                    pdirectsound: impl ::windows::IntoParam<'a, IDirectSound>,
                    pdirectsoundbuffer: impl ::windows::IntoParam<'a, IDirectSoundBuffer>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).18)(
                        ::windows::Abi::abi(self),
                        pdirectsound.into_param().abi(),
                        pdirectsoundbuffer.into_param().abi(),
                    )
                }
                pub unsafe fn GetFormat(
                    &self,
                    pwaveformatex: *mut super::Multimedia::WAVEFORMATEX,
                    pdwwaveformatexsize: *mut u32,
                    pdwbuffersize: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).19)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pwaveformatex),
                        ::std::mem::transmute(pdwwaveformatexsize),
                        ::std::mem::transmute(pdwbuffersize),
                    )
                }
            }
            impl ::std::convert::From<IDirectMusicPort> for ::windows::IUnknown {
                fn from(value: IDirectMusicPort) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectMusicPort> for ::windows::IUnknown {
                fn from(value: &IDirectMusicPort) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectMusicPort {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectMusicPort {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectMusicPort_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pbuffer: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    hevent: super::SystemServices::HANDLE,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pbuffer: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pinstrument: ::windows::RawPtr,
                    ppdownloadedinstrument: *mut ::windows::RawPtr,
                    pnoteranges: *mut DMUS_NOTERANGE,
                    dwnumnoteranges: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdownloadedinstrument: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(),
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pstats: *mut DMUS_SYNTHSTATS,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pportcaps: *mut DMUS_PORTCAPS,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(),
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwchannelgroups: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwchannelgroups: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    factive: super::SystemServices::BOOL,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwchannelgroup: u32,
                    dwchannel: u32,
                    dwpriority: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwchannelgroup: u32,
                    dwchannel: u32,
                    pdwpriority: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdirectsound: ::windows::RawPtr,
                    pdirectsoundbuffer: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pwaveformatex: *mut super::Multimedia::WAVEFORMATEX,
                    pdwwaveformatexsize: *mut u32,
                    pdwbuffersize: *mut u32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectMusicPortDownload(::windows::IUnknown);
            impl IDirectMusicPortDownload {}
            unsafe impl ::windows::Interface for IDirectMusicPortDownload {
                type Vtable = IDirectMusicPortDownload_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3534497914,
                    45979,
                    4561,
                    [135, 4, 0, 96, 8, 147, 177, 189],
                );
            }
            impl IDirectMusicPortDownload {
                pub unsafe fn GetBuffer(
                    &self,
                    dwdlid: u32,
                    ppidmdownload: *mut ::std::option::Option<IDirectMusicDownload>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwdlid),
                        ::std::mem::transmute(ppidmdownload),
                    )
                }
                pub unsafe fn AllocateBuffer(
                    &self,
                    dwsize: u32,
                    ppidmdownload: *mut ::std::option::Option<IDirectMusicDownload>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwsize),
                        ::std::mem::transmute(ppidmdownload),
                    )
                }
                pub unsafe fn GetDLId(
                    &self,
                    pdwstartdlid: *mut u32,
                    dwcount: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwstartdlid),
                        ::std::mem::transmute(dwcount),
                    )
                }
                pub unsafe fn GetAppend(&self, pdwappend: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwappend),
                    )
                }
                pub unsafe fn Download<'a>(
                    &self,
                    pidmdownload: impl ::windows::IntoParam<'a, IDirectMusicDownload>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        pidmdownload.into_param().abi(),
                    )
                }
                pub unsafe fn Unload<'a>(
                    &self,
                    pidmdownload: impl ::windows::IntoParam<'a, IDirectMusicDownload>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        pidmdownload.into_param().abi(),
                    )
                }
            }
            impl ::std::convert::From<IDirectMusicPortDownload> for ::windows::IUnknown {
                fn from(value: IDirectMusicPortDownload) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectMusicPortDownload> for ::windows::IUnknown {
                fn from(value: &IDirectMusicPortDownload) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectMusicPortDownload {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectMusicPortDownload {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectMusicPortDownload_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwdlid: u32,
                    ppidmdownload: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwsize: u32,
                    ppidmdownload: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwstartdlid: *mut u32,
                    dwcount: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwappend: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pidmdownload: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pidmdownload: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectMusicSynth(::windows::IUnknown);
            impl IDirectMusicSynth {}
            unsafe impl ::windows::Interface for IDirectMusicSynth {
                type Vtable = IDirectMusicSynth_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    159528545,
                    23685,
                    4562,
                    [175, 166, 0, 170, 0, 36, 216, 182],
                );
            }
            impl IDirectMusicSynth {
                pub unsafe fn Open(
                    &self,
                    pportparams: *mut DMUS_PORTPARAMS8,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pportparams),
                    )
                }
                pub unsafe fn Close(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(::windows::Abi::abi(self))
                }
                pub unsafe fn SetNumChannelGroups(&self, dwgroups: u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwgroups),
                    )
                }
                pub unsafe fn Download(
                    &self,
                    phdownload: *mut super::SystemServices::HANDLE,
                    pvdata: *mut ::std::ffi::c_void,
                    pbfree: *mut i32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(phdownload),
                        ::std::mem::transmute(pvdata),
                        ::std::mem::transmute(pbfree),
                    )
                }
                pub unsafe fn Unload<'a>(
                    &self,
                    hdownload: impl ::windows::IntoParam<'a, super::SystemServices::HANDLE>,
                    lpfreehandle : * mut * mut * mut * mut * mut * mut * mut * mut * mut * mut * mut :: windows :: HRESULT,
                    huserdata: impl ::windows::IntoParam<'a, super::SystemServices::HANDLE>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        hdownload.into_param().abi(),
                        ::std::mem::transmute(lpfreehandle),
                        huserdata.into_param().abi(),
                    )
                }
                pub unsafe fn PlayBuffer(
                    &self,
                    rt: i64,
                    pbbuffer: *mut u8,
                    cbbuffer: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(rt),
                        ::std::mem::transmute(pbbuffer),
                        ::std::mem::transmute(cbbuffer),
                    )
                }
                pub unsafe fn GetRunningStats(
                    &self,
                    pstats: *mut DMUS_SYNTHSTATS,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pstats),
                    )
                }
                pub unsafe fn GetPortCaps(&self, pcaps: *mut DMUS_PORTCAPS) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcaps),
                    )
                }
                pub unsafe fn Activate<'a>(
                    &self,
                    fenable: impl ::windows::IntoParam<'a, super::SystemServices::BOOL>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).13)(
                        ::windows::Abi::abi(self),
                        fenable.into_param().abi(),
                    )
                }
                pub unsafe fn SetSynthSink<'a>(
                    &self,
                    psynthsink: impl ::windows::IntoParam<'a, IDirectMusicSynthSink>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).14)(
                        ::windows::Abi::abi(self),
                        psynthsink.into_param().abi(),
                    )
                }
                pub unsafe fn Render(
                    &self,
                    pbuffer: *mut i16,
                    dwlength: u32,
                    llposition: i64,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).15)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pbuffer),
                        ::std::mem::transmute(dwlength),
                        ::std::mem::transmute(llposition),
                    )
                }
                pub unsafe fn SetChannelPriority(
                    &self,
                    dwchannelgroup: u32,
                    dwchannel: u32,
                    dwpriority: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).16)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwchannelgroup),
                        ::std::mem::transmute(dwchannel),
                        ::std::mem::transmute(dwpriority),
                    )
                }
                pub unsafe fn GetChannelPriority(
                    &self,
                    dwchannelgroup: u32,
                    dwchannel: u32,
                    pdwpriority: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).17)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwchannelgroup),
                        ::std::mem::transmute(dwchannel),
                        ::std::mem::transmute(pdwpriority),
                    )
                }
                pub unsafe fn GetFormat(
                    &self,
                    pwaveformatex: *mut super::Multimedia::WAVEFORMATEX,
                    pdwwaveformatexsize: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).18)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pwaveformatex),
                        ::std::mem::transmute(pdwwaveformatexsize),
                    )
                }
                pub unsafe fn GetAppend(&self, pdwappend: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).19)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwappend),
                    )
                }
            }
            impl ::std::convert::From<IDirectMusicSynth> for ::windows::IUnknown {
                fn from(value: IDirectMusicSynth) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectMusicSynth> for ::windows::IUnknown {
                fn from(value: &IDirectMusicSynth) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectMusicSynth {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectMusicSynth {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectMusicSynth_abi ( pub unsafe extern "system" fn ( this : :: windows :: RawPtr , iid : & :: windows :: Guid , interface : * mut :: windows :: RawPtr ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr ) -> u32 , pub unsafe extern "system" fn ( this : :: windows :: RawPtr ) -> u32 , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , pportparams : * mut DMUS_PORTPARAMS8 , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , dwgroups : u32 , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , phdownload : * mut super :: SystemServices :: HANDLE , pvdata : * mut :: std :: ffi :: c_void , pbfree : * mut i32 , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , hdownload : super :: SystemServices :: HANDLE , lpfreehandle : * mut * mut * mut * mut * mut * mut * mut * mut * mut * mut * mut :: windows :: HRESULT , huserdata : super :: SystemServices :: HANDLE , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , rt : i64 , pbbuffer : * mut u8 , cbbuffer : u32 , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , pstats : * mut DMUS_SYNTHSTATS , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , pcaps : * mut DMUS_PORTCAPS , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( ) , pub unsafe extern "system" fn ( ) , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , fenable : super :: SystemServices :: BOOL , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , psynthsink : :: windows :: RawPtr , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , pbuffer : * mut i16 , dwlength : u32 , llposition : i64 , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , dwchannelgroup : u32 , dwchannel : u32 , dwpriority : u32 , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , dwchannelgroup : u32 , dwchannel : u32 , pdwpriority : * mut u32 , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , pwaveformatex : * mut super :: Multimedia :: WAVEFORMATEX , pdwwaveformatexsize : * mut u32 , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , pdwappend : * mut u32 , ) -> :: windows :: HRESULT , ) ;
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectMusicSynth8(::windows::IUnknown);
            impl IDirectMusicSynth8 {}
            unsafe impl ::windows::Interface for IDirectMusicSynth8 {
                type Vtable = IDirectMusicSynth8_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    1405793829,
                    10001,
                    19615,
                    [157, 231, 27, 127, 146, 95, 111, 200],
                );
            }
            impl IDirectMusicSynth8 {
                pub unsafe fn Open(
                    &self,
                    pportparams: *mut DMUS_PORTPARAMS8,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pportparams),
                    )
                }
                pub unsafe fn Close(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(::windows::Abi::abi(self))
                }
                pub unsafe fn SetNumChannelGroups(&self, dwgroups: u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwgroups),
                    )
                }
                pub unsafe fn Download(
                    &self,
                    phdownload: *mut super::SystemServices::HANDLE,
                    pvdata: *mut ::std::ffi::c_void,
                    pbfree: *mut i32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(phdownload),
                        ::std::mem::transmute(pvdata),
                        ::std::mem::transmute(pbfree),
                    )
                }
                pub unsafe fn Unload<'a>(
                    &self,
                    hdownload: impl ::windows::IntoParam<'a, super::SystemServices::HANDLE>,
                    lpfreehandle : * mut * mut * mut * mut * mut * mut * mut * mut * mut * mut * mut :: windows :: HRESULT,
                    huserdata: impl ::windows::IntoParam<'a, super::SystemServices::HANDLE>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        hdownload.into_param().abi(),
                        ::std::mem::transmute(lpfreehandle),
                        huserdata.into_param().abi(),
                    )
                }
                pub unsafe fn PlayBuffer(
                    &self,
                    rt: i64,
                    pbbuffer: *mut u8,
                    cbbuffer: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(rt),
                        ::std::mem::transmute(pbbuffer),
                        ::std::mem::transmute(cbbuffer),
                    )
                }
                pub unsafe fn GetRunningStats(
                    &self,
                    pstats: *mut DMUS_SYNTHSTATS,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pstats),
                    )
                }
                pub unsafe fn GetPortCaps(&self, pcaps: *mut DMUS_PORTCAPS) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcaps),
                    )
                }
                pub unsafe fn Activate<'a>(
                    &self,
                    fenable: impl ::windows::IntoParam<'a, super::SystemServices::BOOL>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).13)(
                        ::windows::Abi::abi(self),
                        fenable.into_param().abi(),
                    )
                }
                pub unsafe fn SetSynthSink<'a>(
                    &self,
                    psynthsink: impl ::windows::IntoParam<'a, IDirectMusicSynthSink>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).14)(
                        ::windows::Abi::abi(self),
                        psynthsink.into_param().abi(),
                    )
                }
                pub unsafe fn Render(
                    &self,
                    pbuffer: *mut i16,
                    dwlength: u32,
                    llposition: i64,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).15)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pbuffer),
                        ::std::mem::transmute(dwlength),
                        ::std::mem::transmute(llposition),
                    )
                }
                pub unsafe fn SetChannelPriority(
                    &self,
                    dwchannelgroup: u32,
                    dwchannel: u32,
                    dwpriority: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).16)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwchannelgroup),
                        ::std::mem::transmute(dwchannel),
                        ::std::mem::transmute(dwpriority),
                    )
                }
                pub unsafe fn GetChannelPriority(
                    &self,
                    dwchannelgroup: u32,
                    dwchannel: u32,
                    pdwpriority: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).17)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwchannelgroup),
                        ::std::mem::transmute(dwchannel),
                        ::std::mem::transmute(pdwpriority),
                    )
                }
                pub unsafe fn GetFormat(
                    &self,
                    pwaveformatex: *mut super::Multimedia::WAVEFORMATEX,
                    pdwwaveformatexsize: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).18)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pwaveformatex),
                        ::std::mem::transmute(pdwwaveformatexsize),
                    )
                }
                pub unsafe fn GetAppend(&self, pdwappend: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).19)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwappend),
                    )
                }
                pub unsafe fn PlayVoice(
                    &self,
                    rt: i64,
                    dwvoiceid: u32,
                    dwchannelgroup: u32,
                    dwchannel: u32,
                    dwdlid: u32,
                    prpitch: i32,
                    vrvolume: i32,
                    stvoicestart: u64,
                    stloopstart: u64,
                    stloopend: u64,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).20)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(rt),
                        ::std::mem::transmute(dwvoiceid),
                        ::std::mem::transmute(dwchannelgroup),
                        ::std::mem::transmute(dwchannel),
                        ::std::mem::transmute(dwdlid),
                        ::std::mem::transmute(prpitch),
                        ::std::mem::transmute(vrvolume),
                        ::std::mem::transmute(stvoicestart),
                        ::std::mem::transmute(stloopstart),
                        ::std::mem::transmute(stloopend),
                    )
                }
                pub unsafe fn StopVoice(&self, rt: i64, dwvoiceid: u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).21)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(rt),
                        ::std::mem::transmute(dwvoiceid),
                    )
                }
                pub unsafe fn GetVoiceState(
                    &self,
                    dwvoice: *mut u32,
                    cbvoice: u32,
                    dwvoicestate: *mut DMUS_VOICE_STATE,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).22)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwvoice),
                        ::std::mem::transmute(cbvoice),
                        ::std::mem::transmute(dwvoicestate),
                    )
                }
                pub unsafe fn Refresh(
                    &self,
                    dwdownloadid: u32,
                    dwflags: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).23)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwdownloadid),
                        ::std::mem::transmute(dwflags),
                    )
                }
                pub unsafe fn AssignChannelToBuses(
                    &self,
                    dwchannelgroup: u32,
                    dwchannel: u32,
                    pdwbuses: *mut u32,
                    cbuses: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).24)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwchannelgroup),
                        ::std::mem::transmute(dwchannel),
                        ::std::mem::transmute(pdwbuses),
                        ::std::mem::transmute(cbuses),
                    )
                }
            }
            impl ::std::convert::From<IDirectMusicSynth8> for ::windows::IUnknown {
                fn from(value: IDirectMusicSynth8) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectMusicSynth8> for ::windows::IUnknown {
                fn from(value: &IDirectMusicSynth8) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectMusicSynth8 {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectMusicSynth8 {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            impl ::std::convert::From<IDirectMusicSynth8> for IDirectMusicSynth {
                fn from(value: IDirectMusicSynth8) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectMusicSynth8> for IDirectMusicSynth {
                fn from(value: &IDirectMusicSynth8) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IDirectMusicSynth> for IDirectMusicSynth8 {
                fn into_param(self) -> ::windows::Param<'a, IDirectMusicSynth> {
                    ::windows::Param::Owned(::std::convert::Into::<IDirectMusicSynth>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IDirectMusicSynth> for &'a IDirectMusicSynth8 {
                fn into_param(self) -> ::windows::Param<'a, IDirectMusicSynth> {
                    ::windows::Param::Owned(::std::convert::Into::<IDirectMusicSynth>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectMusicSynth8_abi ( pub unsafe extern "system" fn ( this : :: windows :: RawPtr , iid : & :: windows :: Guid , interface : * mut :: windows :: RawPtr ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr ) -> u32 , pub unsafe extern "system" fn ( this : :: windows :: RawPtr ) -> u32 , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , pportparams : * mut DMUS_PORTPARAMS8 , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , dwgroups : u32 , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , phdownload : * mut super :: SystemServices :: HANDLE , pvdata : * mut :: std :: ffi :: c_void , pbfree : * mut i32 , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , hdownload : super :: SystemServices :: HANDLE , lpfreehandle : * mut * mut * mut * mut * mut * mut * mut * mut * mut * mut * mut :: windows :: HRESULT , huserdata : super :: SystemServices :: HANDLE , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , rt : i64 , pbbuffer : * mut u8 , cbbuffer : u32 , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , pstats : * mut DMUS_SYNTHSTATS , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , pcaps : * mut DMUS_PORTCAPS , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( ) , pub unsafe extern "system" fn ( ) , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , fenable : super :: SystemServices :: BOOL , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , psynthsink : :: windows :: RawPtr , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , pbuffer : * mut i16 , dwlength : u32 , llposition : i64 , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , dwchannelgroup : u32 , dwchannel : u32 , dwpriority : u32 , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , dwchannelgroup : u32 , dwchannel : u32 , pdwpriority : * mut u32 , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , pwaveformatex : * mut super :: Multimedia :: WAVEFORMATEX , pdwwaveformatexsize : * mut u32 , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , pdwappend : * mut u32 , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , rt : i64 , dwvoiceid : u32 , dwchannelgroup : u32 , dwchannel : u32 , dwdlid : u32 , prpitch : i32 , vrvolume : i32 , stvoicestart : u64 , stloopstart : u64 , stloopend : u64 , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , rt : i64 , dwvoiceid : u32 , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , dwvoice : * mut u32 , cbvoice : u32 , dwvoicestate : * mut DMUS_VOICE_STATE , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , dwdownloadid : u32 , dwflags : u32 , ) -> :: windows :: HRESULT , pub unsafe extern "system" fn ( this : :: windows :: RawPtr , dwchannelgroup : u32 , dwchannel : u32 , pdwbuses : * mut u32 , cbuses : u32 , ) -> :: windows :: HRESULT , ) ;
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectMusicSynthSink(::windows::IUnknown);
            impl IDirectMusicSynthSink {}
            unsafe impl ::windows::Interface for IDirectMusicSynthSink {
                type Vtable = IDirectMusicSynthSink_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    159528547,
                    23685,
                    4562,
                    [175, 166, 0, 170, 0, 36, 216, 182],
                );
            }
            impl IDirectMusicSynthSink {
                pub unsafe fn Init<'a>(
                    &self,
                    psynth: impl ::windows::IntoParam<'a, IDirectMusicSynth>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        psynth.into_param().abi(),
                    )
                }
                pub unsafe fn Activate<'a>(
                    &self,
                    fenable: impl ::windows::IntoParam<'a, super::SystemServices::BOOL>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        fenable.into_param().abi(),
                    )
                }
                pub unsafe fn SampleToRefTime(
                    &self,
                    llsampletime: i64,
                    prftime: *mut i64,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(llsampletime),
                        ::std::mem::transmute(prftime),
                    )
                }
                pub unsafe fn RefTimeToSample(
                    &self,
                    rftime: i64,
                    pllsampletime: *mut i64,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(rftime),
                        ::std::mem::transmute(pllsampletime),
                    )
                }
                pub unsafe fn SetDirectSound<'a>(
                    &self,
                    pdirectsound: impl ::windows::IntoParam<'a, IDirectSound>,
                    pdirectsoundbuffer: impl ::windows::IntoParam<'a, IDirectSoundBuffer>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        pdirectsound.into_param().abi(),
                        pdirectsoundbuffer.into_param().abi(),
                    )
                }
                pub unsafe fn GetDesiredBufferSize(
                    &self,
                    pdwbuffersizeinsamples: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwbuffersizeinsamples),
                    )
                }
            }
            impl ::std::convert::From<IDirectMusicSynthSink> for ::windows::IUnknown {
                fn from(value: IDirectMusicSynthSink) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectMusicSynthSink> for ::windows::IUnknown {
                fn from(value: &IDirectMusicSynthSink) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectMusicSynthSink {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectMusicSynthSink {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectMusicSynthSink_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    psynth: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(),
                pub unsafe extern "system" fn(),
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    fenable: super::SystemServices::BOOL,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    llsampletime: i64,
                    prftime: *mut i64,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    rftime: i64,
                    pllsampletime: *mut i64,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdirectsound: ::windows::RawPtr,
                    pdirectsoundbuffer: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwbuffersizeinsamples: *mut u32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectMusicThru(::windows::IUnknown);
            impl IDirectMusicThru {}
            unsafe impl ::windows::Interface for IDirectMusicThru {
                type Vtable = IDirectMusicThru_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3469824999,
                    13830,
                    4562,
                    [185, 249, 0, 0, 248, 117, 172, 18],
                );
            }
            impl IDirectMusicThru {
                pub unsafe fn ThruChannel<'a>(
                    &self,
                    dwsourcechannelgroup: u32,
                    dwsourcechannel: u32,
                    dwdestinationchannelgroup: u32,
                    dwdestinationchannel: u32,
                    pdestinationport: impl ::windows::IntoParam<'a, IDirectMusicPort>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwsourcechannelgroup),
                        ::std::mem::transmute(dwsourcechannel),
                        ::std::mem::transmute(dwdestinationchannelgroup),
                        ::std::mem::transmute(dwdestinationchannel),
                        pdestinationport.into_param().abi(),
                    )
                }
            }
            impl ::std::convert::From<IDirectMusicThru> for ::windows::IUnknown {
                fn from(value: IDirectMusicThru) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectMusicThru> for ::windows::IUnknown {
                fn from(value: &IDirectMusicThru) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectMusicThru {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectMusicThru {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectMusicThru_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwsourcechannelgroup: u32,
                    dwsourcechannel: u32,
                    dwdestinationchannelgroup: u32,
                    dwdestinationchannel: u32,
                    pdestinationport: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectSound3DBuffer(::windows::IUnknown);
            impl IDirectSound3DBuffer {}
            unsafe impl ::windows::Interface for IDirectSound3DBuffer {
                type Vtable = IDirectSound3DBuffer_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    664468102,
                    18817,
                    4558,
                    [165, 33, 0, 32, 175, 11, 229, 96],
                );
            }
            impl IDirectSound3DBuffer {
                pub unsafe fn GetAllParameters(
                    &self,
                    pds3dbuffer: *mut DS3DBUFFER,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pds3dbuffer),
                    )
                }
                pub unsafe fn GetConeAngles(
                    &self,
                    pdwinsideconeangle: *mut u32,
                    pdwoutsideconeangle: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwinsideconeangle),
                        ::std::mem::transmute(pdwoutsideconeangle),
                    )
                }
                pub unsafe fn GetConeOrientation(
                    &self,
                    pvorientation: *mut super::Direct3D9::D3DVECTOR,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pvorientation),
                    )
                }
                pub unsafe fn GetConeOutsideVolume(
                    &self,
                    plconeoutsidevolume: *mut i32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(plconeoutsidevolume),
                    )
                }
                pub unsafe fn GetMaxDistance(
                    &self,
                    pflmaxdistance: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pflmaxdistance),
                    )
                }
                pub unsafe fn GetMinDistance(
                    &self,
                    pflmindistance: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pflmindistance),
                    )
                }
                pub unsafe fn GetMode(&self, pdwmode: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwmode),
                    )
                }
                pub unsafe fn GetPosition(
                    &self,
                    pvposition: *mut super::Direct3D9::D3DVECTOR,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pvposition),
                    )
                }
                pub unsafe fn GetVelocity(
                    &self,
                    pvvelocity: *mut super::Direct3D9::D3DVECTOR,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).11)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pvvelocity),
                    )
                }
                pub unsafe fn SetAllParameters(
                    &self,
                    pcds3dbuffer: *mut DS3DBUFFER,
                    dwapply: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).12)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcds3dbuffer),
                        ::std::mem::transmute(dwapply),
                    )
                }
                pub unsafe fn SetConeAngles(
                    &self,
                    dwinsideconeangle: u32,
                    dwoutsideconeangle: u32,
                    dwapply: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).13)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwinsideconeangle),
                        ::std::mem::transmute(dwoutsideconeangle),
                        ::std::mem::transmute(dwapply),
                    )
                }
                pub unsafe fn SetConeOrientation(
                    &self,
                    x: f32,
                    y: f32,
                    z: f32,
                    dwapply: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).14)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(x),
                        ::std::mem::transmute(y),
                        ::std::mem::transmute(z),
                        ::std::mem::transmute(dwapply),
                    )
                }
                pub unsafe fn SetConeOutsideVolume(
                    &self,
                    lconeoutsidevolume: i32,
                    dwapply: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).15)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(lconeoutsidevolume),
                        ::std::mem::transmute(dwapply),
                    )
                }
                pub unsafe fn SetMaxDistance(
                    &self,
                    flmaxdistance: f32,
                    dwapply: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).16)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(flmaxdistance),
                        ::std::mem::transmute(dwapply),
                    )
                }
                pub unsafe fn SetMinDistance(
                    &self,
                    flmindistance: f32,
                    dwapply: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).17)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(flmindistance),
                        ::std::mem::transmute(dwapply),
                    )
                }
                pub unsafe fn SetMode(&self, dwmode: u32, dwapply: u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).18)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwmode),
                        ::std::mem::transmute(dwapply),
                    )
                }
                pub unsafe fn SetPosition(
                    &self,
                    x: f32,
                    y: f32,
                    z: f32,
                    dwapply: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).19)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(x),
                        ::std::mem::transmute(y),
                        ::std::mem::transmute(z),
                        ::std::mem::transmute(dwapply),
                    )
                }
                pub unsafe fn SetVelocity(
                    &self,
                    x: f32,
                    y: f32,
                    z: f32,
                    dwapply: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).20)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(x),
                        ::std::mem::transmute(y),
                        ::std::mem::transmute(z),
                        ::std::mem::transmute(dwapply),
                    )
                }
            }
            impl ::std::convert::From<IDirectSound3DBuffer> for ::windows::IUnknown {
                fn from(value: IDirectSound3DBuffer) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectSound3DBuffer> for ::windows::IUnknown {
                fn from(value: &IDirectSound3DBuffer) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectSound3DBuffer {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectSound3DBuffer {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectSound3DBuffer_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pds3dbuffer: *mut DS3DBUFFER,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwinsideconeangle: *mut u32,
                    pdwoutsideconeangle: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pvorientation: *mut super::Direct3D9::D3DVECTOR,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    plconeoutsidevolume: *mut i32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pflmaxdistance: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pflmindistance: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwmode: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pvposition: *mut super::Direct3D9::D3DVECTOR,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pvvelocity: *mut super::Direct3D9::D3DVECTOR,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcds3dbuffer: *mut DS3DBUFFER,
                    dwapply: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwinsideconeangle: u32,
                    dwoutsideconeangle: u32,
                    dwapply: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    x: f32,
                    y: f32,
                    z: f32,
                    dwapply: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    lconeoutsidevolume: i32,
                    dwapply: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    flmaxdistance: f32,
                    dwapply: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    flmindistance: f32,
                    dwapply: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwmode: u32,
                    dwapply: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    x: f32,
                    y: f32,
                    z: f32,
                    dwapply: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    x: f32,
                    y: f32,
                    z: f32,
                    dwapply: u32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectSound3DListener(::windows::IUnknown);
            impl IDirectSound3DListener {}
            unsafe impl ::windows::Interface for IDirectSound3DListener {
                type Vtable = IDirectSound3DListener_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    664468100,
                    18817,
                    4558,
                    [165, 33, 0, 32, 175, 11, 229, 96],
                );
            }
            impl IDirectSound3DListener {
                pub unsafe fn GetAllParameters(
                    &self,
                    plistener: *mut DS3DLISTENER,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(plistener),
                    )
                }
                pub unsafe fn GetDistanceFactor(
                    &self,
                    pfldistancefactor: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pfldistancefactor),
                    )
                }
                pub unsafe fn GetDopplerFactor(
                    &self,
                    pfldopplerfactor: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pfldopplerfactor),
                    )
                }
                pub unsafe fn GetOrientation(
                    &self,
                    pvorientfront: *mut super::Direct3D9::D3DVECTOR,
                    pvorienttop: *mut super::Direct3D9::D3DVECTOR,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pvorientfront),
                        ::std::mem::transmute(pvorienttop),
                    )
                }
                pub unsafe fn GetPosition(
                    &self,
                    pvposition: *mut super::Direct3D9::D3DVECTOR,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pvposition),
                    )
                }
                pub unsafe fn GetRolloffFactor(
                    &self,
                    pflrollofffactor: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pflrollofffactor),
                    )
                }
                pub unsafe fn GetVelocity(
                    &self,
                    pvvelocity: *mut super::Direct3D9::D3DVECTOR,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pvvelocity),
                    )
                }
                pub unsafe fn SetAllParameters(
                    &self,
                    pclistener: *mut DS3DLISTENER,
                    dwapply: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pclistener),
                        ::std::mem::transmute(dwapply),
                    )
                }
                pub unsafe fn SetDistanceFactor(
                    &self,
                    fldistancefactor: f32,
                    dwapply: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).11)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(fldistancefactor),
                        ::std::mem::transmute(dwapply),
                    )
                }
                pub unsafe fn SetDopplerFactor(
                    &self,
                    fldopplerfactor: f32,
                    dwapply: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).12)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(fldopplerfactor),
                        ::std::mem::transmute(dwapply),
                    )
                }
                pub unsafe fn SetOrientation(
                    &self,
                    xfront: f32,
                    yfront: f32,
                    zfront: f32,
                    xtop: f32,
                    ytop: f32,
                    ztop: f32,
                    dwapply: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).13)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(xfront),
                        ::std::mem::transmute(yfront),
                        ::std::mem::transmute(zfront),
                        ::std::mem::transmute(xtop),
                        ::std::mem::transmute(ytop),
                        ::std::mem::transmute(ztop),
                        ::std::mem::transmute(dwapply),
                    )
                }
                pub unsafe fn SetPosition(
                    &self,
                    x: f32,
                    y: f32,
                    z: f32,
                    dwapply: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).14)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(x),
                        ::std::mem::transmute(y),
                        ::std::mem::transmute(z),
                        ::std::mem::transmute(dwapply),
                    )
                }
                pub unsafe fn SetRolloffFactor(
                    &self,
                    flrollofffactor: f32,
                    dwapply: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).15)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(flrollofffactor),
                        ::std::mem::transmute(dwapply),
                    )
                }
                pub unsafe fn SetVelocity(
                    &self,
                    x: f32,
                    y: f32,
                    z: f32,
                    dwapply: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).16)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(x),
                        ::std::mem::transmute(y),
                        ::std::mem::transmute(z),
                        ::std::mem::transmute(dwapply),
                    )
                }
                pub unsafe fn CommitDeferredSettings(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).17)(::windows::Abi::abi(self))
                }
            }
            impl ::std::convert::From<IDirectSound3DListener> for ::windows::IUnknown {
                fn from(value: IDirectSound3DListener) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectSound3DListener> for ::windows::IUnknown {
                fn from(value: &IDirectSound3DListener) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectSound3DListener {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectSound3DListener {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectSound3DListener_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    plistener: *mut DS3DLISTENER,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pfldistancefactor: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pfldopplerfactor: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pvorientfront: *mut super::Direct3D9::D3DVECTOR,
                    pvorienttop: *mut super::Direct3D9::D3DVECTOR,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pvposition: *mut super::Direct3D9::D3DVECTOR,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pflrollofffactor: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pvvelocity: *mut super::Direct3D9::D3DVECTOR,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pclistener: *mut DS3DLISTENER,
                    dwapply: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    fldistancefactor: f32,
                    dwapply: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    fldopplerfactor: f32,
                    dwapply: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    xfront: f32,
                    yfront: f32,
                    zfront: f32,
                    xtop: f32,
                    ytop: f32,
                    ztop: f32,
                    dwapply: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    x: f32,
                    y: f32,
                    z: f32,
                    dwapply: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    flrollofffactor: f32,
                    dwapply: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    x: f32,
                    y: f32,
                    z: f32,
                    dwapply: u32,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectSoundCaptureFXAec(::windows::IUnknown);
            impl IDirectSoundCaptureFXAec {}
            unsafe impl ::windows::Interface for IDirectSoundCaptureFXAec {
                type Vtable = IDirectSoundCaptureFXAec_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2910065725,
                    36925,
                    19127,
                    [128, 102, 40, 211, 99, 3, 109, 101],
                );
            }
            impl IDirectSoundCaptureFXAec {
                pub unsafe fn SetAllParameters(
                    &self,
                    pdscfxaec: *mut DSCFXAec,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdscfxaec),
                    )
                }
                pub unsafe fn GetAllParameters(
                    &self,
                    pdscfxaec: *mut DSCFXAec,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdscfxaec),
                    )
                }
                pub unsafe fn GetStatus(&self, pdwstatus: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwstatus),
                    )
                }
                pub unsafe fn Reset(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(::windows::Abi::abi(self))
                }
            }
            impl ::std::convert::From<IDirectSoundCaptureFXAec> for ::windows::IUnknown {
                fn from(value: IDirectSoundCaptureFXAec) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectSoundCaptureFXAec> for ::windows::IUnknown {
                fn from(value: &IDirectSoundCaptureFXAec) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectSoundCaptureFXAec {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectSoundCaptureFXAec {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectSoundCaptureFXAec_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdscfxaec: *mut DSCFXAec,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdscfxaec: *mut DSCFXAec,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwstatus: *mut u32,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectSoundCaptureFXNoiseSuppress(::windows::IUnknown);
            impl IDirectSoundCaptureFXNoiseSuppress {}
            unsafe impl ::windows::Interface for IDirectSoundCaptureFXNoiseSuppress {
                type Vtable = IDirectSoundCaptureFXNoiseSuppress_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3979419201,
                    64430,
                    16757,
                    [150, 37, 205, 8, 84, 246, 147, 202],
                );
            }
            impl IDirectSoundCaptureFXNoiseSuppress {
                pub unsafe fn SetAllParameters(
                    &self,
                    pcdscfxnoisesuppress: *mut DSCFXNoiseSuppress,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcdscfxnoisesuppress),
                    )
                }
                pub unsafe fn GetAllParameters(
                    &self,
                    pdscfxnoisesuppress: *mut DSCFXNoiseSuppress,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdscfxnoisesuppress),
                    )
                }
                pub unsafe fn Reset(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(::windows::Abi::abi(self))
                }
            }
            impl ::std::convert::From<IDirectSoundCaptureFXNoiseSuppress> for ::windows::IUnknown {
                fn from(value: IDirectSoundCaptureFXNoiseSuppress) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectSoundCaptureFXNoiseSuppress> for ::windows::IUnknown {
                fn from(value: &IDirectSoundCaptureFXNoiseSuppress) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectSoundCaptureFXNoiseSuppress {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectSoundCaptureFXNoiseSuppress {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectSoundCaptureFXNoiseSuppress_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcdscfxnoisesuppress: *mut DSCFXNoiseSuppress,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdscfxnoisesuppress: *mut DSCFXNoiseSuppress,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectSoundFXChorus(::windows::IUnknown);
            impl IDirectSoundFXChorus {}
            unsafe impl ::windows::Interface for IDirectSoundFXChorus {
                type Vtable = IDirectSoundFXChorus_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2282242787,
                    5215,
                    17382,
                    [169, 52, 167, 24, 6, 229, 5, 71],
                );
            }
            impl IDirectSoundFXChorus {
                pub unsafe fn SetAllParameters(
                    &self,
                    pcdsfxchorus: *mut DSFXChorus,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcdsfxchorus),
                    )
                }
                pub unsafe fn GetAllParameters(
                    &self,
                    pdsfxchorus: *mut DSFXChorus,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdsfxchorus),
                    )
                }
            }
            impl ::std::convert::From<IDirectSoundFXChorus> for ::windows::IUnknown {
                fn from(value: IDirectSoundFXChorus) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectSoundFXChorus> for ::windows::IUnknown {
                fn from(value: &IDirectSoundFXChorus) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectSoundFXChorus {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectSoundFXChorus {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectSoundFXChorus_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcdsfxchorus: *mut DSFXChorus,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdsfxchorus: *mut DSFXChorus,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectSoundFXCompressor(::windows::IUnknown);
            impl IDirectSoundFXCompressor {}
            unsafe impl ::windows::Interface for IDirectSoundFXCompressor {
                type Vtable = IDirectSoundFXCompressor_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    1270681940,
                    25334,
                    20012,
                    [161, 92, 211, 182, 196, 23, 247, 160],
                );
            }
            impl IDirectSoundFXCompressor {
                pub unsafe fn SetAllParameters(
                    &self,
                    pcdsfxcompressor: *mut DSFXCompressor,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcdsfxcompressor),
                    )
                }
                pub unsafe fn GetAllParameters(
                    &self,
                    pdsfxcompressor: *mut DSFXCompressor,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdsfxcompressor),
                    )
                }
            }
            impl ::std::convert::From<IDirectSoundFXCompressor> for ::windows::IUnknown {
                fn from(value: IDirectSoundFXCompressor) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectSoundFXCompressor> for ::windows::IUnknown {
                fn from(value: &IDirectSoundFXCompressor) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectSoundFXCompressor {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectSoundFXCompressor {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectSoundFXCompressor_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcdsfxcompressor: *mut DSFXCompressor,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdsfxcompressor: *mut DSFXCompressor,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectSoundFXDistortion(::windows::IUnknown);
            impl IDirectSoundFXDistortion {}
            unsafe impl ::windows::Interface for IDirectSoundFXDistortion {
                type Vtable = IDirectSoundFXDistortion_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2395947814,
                    17759,
                    19851,
                    [189, 169, 141, 93, 62, 158, 62, 11],
                );
            }
            impl IDirectSoundFXDistortion {
                pub unsafe fn SetAllParameters(
                    &self,
                    pcdsfxdistortion: *mut DSFXDistortion,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcdsfxdistortion),
                    )
                }
                pub unsafe fn GetAllParameters(
                    &self,
                    pdsfxdistortion: *mut DSFXDistortion,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdsfxdistortion),
                    )
                }
            }
            impl ::std::convert::From<IDirectSoundFXDistortion> for ::windows::IUnknown {
                fn from(value: IDirectSoundFXDistortion) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectSoundFXDistortion> for ::windows::IUnknown {
                fn from(value: &IDirectSoundFXDistortion) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectSoundFXDistortion {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectSoundFXDistortion {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectSoundFXDistortion_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcdsfxdistortion: *mut DSFXDistortion,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdsfxdistortion: *mut DSFXDistortion,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectSoundFXEcho(::windows::IUnknown);
            impl IDirectSoundFXEcho {}
            unsafe impl ::windows::Interface for IDirectSoundFXEcho {
                type Vtable = IDirectSoundFXEcho_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2345832159,
                    20699,
                    20114,
                    [162, 189, 68, 84, 136, 209, 237, 66],
                );
            }
            impl IDirectSoundFXEcho {
                pub unsafe fn SetAllParameters(
                    &self,
                    pcdsfxecho: *mut DSFXEcho,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcdsfxecho),
                    )
                }
                pub unsafe fn GetAllParameters(
                    &self,
                    pdsfxecho: *mut DSFXEcho,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdsfxecho),
                    )
                }
            }
            impl ::std::convert::From<IDirectSoundFXEcho> for ::windows::IUnknown {
                fn from(value: IDirectSoundFXEcho) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectSoundFXEcho> for ::windows::IUnknown {
                fn from(value: &IDirectSoundFXEcho) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectSoundFXEcho {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectSoundFXEcho {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectSoundFXEcho_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcdsfxecho: *mut DSFXEcho,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdsfxecho: *mut DSFXEcho,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectSoundFXFlanger(::windows::IUnknown);
            impl IDirectSoundFXFlanger {}
            unsafe impl ::windows::Interface for IDirectSoundFXFlanger {
                type Vtable = IDirectSoundFXFlanger_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2420021368,
                    11410,
                    16498,
                    [155, 44, 234, 104, 245, 57, 103, 131],
                );
            }
            impl IDirectSoundFXFlanger {
                pub unsafe fn SetAllParameters(
                    &self,
                    pcdsfxflanger: *mut DSFXFlanger,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcdsfxflanger),
                    )
                }
                pub unsafe fn GetAllParameters(
                    &self,
                    pdsfxflanger: *mut DSFXFlanger,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdsfxflanger),
                    )
                }
            }
            impl ::std::convert::From<IDirectSoundFXFlanger> for ::windows::IUnknown {
                fn from(value: IDirectSoundFXFlanger) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectSoundFXFlanger> for ::windows::IUnknown {
                fn from(value: &IDirectSoundFXFlanger) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectSoundFXFlanger {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectSoundFXFlanger {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectSoundFXFlanger_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcdsfxflanger: *mut DSFXFlanger,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdsfxflanger: *mut DSFXFlanger,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectSoundFXGargle(::windows::IUnknown);
            impl IDirectSoundFXGargle {}
            unsafe impl ::windows::Interface for IDirectSoundFXGargle {
                type Vtable = IDirectSoundFXGargle_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3591828306,
                    54818,
                    4558,
                    [170, 197, 0, 32, 175, 11, 153, 163],
                );
            }
            impl IDirectSoundFXGargle {
                pub unsafe fn SetAllParameters(
                    &self,
                    pcdsfxgargle: *mut DSFXGargle,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcdsfxgargle),
                    )
                }
                pub unsafe fn GetAllParameters(
                    &self,
                    pdsfxgargle: *mut DSFXGargle,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdsfxgargle),
                    )
                }
            }
            impl ::std::convert::From<IDirectSoundFXGargle> for ::windows::IUnknown {
                fn from(value: IDirectSoundFXGargle) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectSoundFXGargle> for ::windows::IUnknown {
                fn from(value: &IDirectSoundFXGargle) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectSoundFXGargle {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectSoundFXGargle {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectSoundFXGargle_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcdsfxgargle: *mut DSFXGargle,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdsfxgargle: *mut DSFXGargle,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectSoundFXI3DL2Reverb(::windows::IUnknown);
            impl IDirectSoundFXI3DL2Reverb {}
            unsafe impl ::windows::Interface for IDirectSoundFXI3DL2Reverb {
                type Vtable = IDirectSoundFXI3DL2Reverb_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    1259760234,
                    3430,
                    17395,
                    [128, 227, 238, 98, 128, 222, 225, 164],
                );
            }
            impl IDirectSoundFXI3DL2Reverb {
                pub unsafe fn SetAllParameters(
                    &self,
                    pcdsfxi3dl2reverb: *mut DSFXI3DL2Reverb,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcdsfxi3dl2reverb),
                    )
                }
                pub unsafe fn GetAllParameters(
                    &self,
                    pdsfxi3dl2reverb: *mut DSFXI3DL2Reverb,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdsfxi3dl2reverb),
                    )
                }
                pub unsafe fn SetPreset(&self, dwpreset: u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwpreset),
                    )
                }
                pub unsafe fn GetPreset(&self, pdwpreset: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwpreset),
                    )
                }
                pub unsafe fn SetQuality(&self, lquality: i32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(lquality),
                    )
                }
                pub unsafe fn GetQuality(&self, plquality: *mut i32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(plquality),
                    )
                }
            }
            impl ::std::convert::From<IDirectSoundFXI3DL2Reverb> for ::windows::IUnknown {
                fn from(value: IDirectSoundFXI3DL2Reverb) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectSoundFXI3DL2Reverb> for ::windows::IUnknown {
                fn from(value: &IDirectSoundFXI3DL2Reverb) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectSoundFXI3DL2Reverb {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectSoundFXI3DL2Reverb {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectSoundFXI3DL2Reverb_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcdsfxi3dl2reverb: *mut DSFXI3DL2Reverb,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdsfxi3dl2reverb: *mut DSFXI3DL2Reverb,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwpreset: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwpreset: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    lquality: i32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    plquality: *mut i32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectSoundFXParamEq(::windows::IUnknown);
            impl IDirectSoundFXParamEq {}
            unsafe impl ::windows::Interface for IDirectSoundFXParamEq {
                type Vtable = IDirectSoundFXParamEq_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3225201150,
                    65168,
                    16900,
                    [128, 120, 130, 51, 76, 209, 119, 218],
                );
            }
            impl IDirectSoundFXParamEq {
                pub unsafe fn SetAllParameters(
                    &self,
                    pcdsfxparameq: *mut DSFXParamEq,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcdsfxparameq),
                    )
                }
                pub unsafe fn GetAllParameters(
                    &self,
                    pdsfxparameq: *mut DSFXParamEq,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdsfxparameq),
                    )
                }
            }
            impl ::std::convert::From<IDirectSoundFXParamEq> for ::windows::IUnknown {
                fn from(value: IDirectSoundFXParamEq) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectSoundFXParamEq> for ::windows::IUnknown {
                fn from(value: &IDirectSoundFXParamEq) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectSoundFXParamEq {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectSoundFXParamEq {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectSoundFXParamEq_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcdsfxparameq: *mut DSFXParamEq,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdsfxparameq: *mut DSFXParamEq,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectSoundFXWavesReverb(::windows::IUnknown);
            impl IDirectSoundFXWavesReverb {}
            unsafe impl ::windows::Interface for IDirectSoundFXWavesReverb {
                type Vtable = IDirectSoundFXWavesReverb_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    1183157306,
                    3526,
                    17891,
                    [183, 96, 212, 238, 241, 108, 179, 37],
                );
            }
            impl IDirectSoundFXWavesReverb {
                pub unsafe fn SetAllParameters(
                    &self,
                    pcdsfxwavesreverb: *mut DSFXWavesReverb,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcdsfxwavesreverb),
                    )
                }
                pub unsafe fn GetAllParameters(
                    &self,
                    pdsfxwavesreverb: *mut DSFXWavesReverb,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdsfxwavesreverb),
                    )
                }
            }
            impl ::std::convert::From<IDirectSoundFXWavesReverb> for ::windows::IUnknown {
                fn from(value: IDirectSoundFXWavesReverb) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectSoundFXWavesReverb> for ::windows::IUnknown {
                fn from(value: &IDirectSoundFXWavesReverb) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectSoundFXWavesReverb {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectSoundFXWavesReverb {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectSoundFXWavesReverb_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcdsfxwavesreverb: *mut DSFXWavesReverb,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdsfxwavesreverb: *mut DSFXWavesReverb,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDirectSoundNotify(::windows::IUnknown);
            impl IDirectSoundNotify {}
            unsafe impl ::windows::Interface for IDirectSoundNotify {
                type Vtable = IDirectSoundNotify_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2954954627,
                    35277,
                    4560,
                    [175, 8, 0, 160, 201, 37, 205, 22],
                );
            }
            impl IDirectSoundNotify {
                pub unsafe fn SetNotificationPositions(
                    &self,
                    dwpositionnotifies: u32,
                    pcpositionnotifies: *mut DSBPOSITIONNOTIFY,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwpositionnotifies),
                        ::std::mem::transmute(pcpositionnotifies),
                    )
                }
            }
            impl ::std::convert::From<IDirectSoundNotify> for ::windows::IUnknown {
                fn from(value: IDirectSoundNotify) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDirectSoundNotify> for ::windows::IUnknown {
                fn from(value: &IDirectSoundNotify) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDirectSoundNotify {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDirectSoundNotify {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDirectSoundNotify_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwpositionnotifies: u32,
                    pcpositionnotifies: *mut DSBPOSITIONNOTIFY,
                ) -> ::windows::HRESULT,
            );
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MIDILOCALE {
                pub ulBank: u32,
                pub ulInstrument: u32,
            }
            impl MIDILOCALE {}
            impl ::std::default::Default for MIDILOCALE {
                fn default() -> Self {
                    Self {
                        ulBank: 0,
                        ulInstrument: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for MIDILOCALE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("MIDILOCALE")
                        .field("ulBank", &format_args!("{:?}", self.ulBank))
                        .field("ulInstrument", &format_args!("{:?}", self.ulInstrument))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for MIDILOCALE {
                fn eq(&self, other: &Self) -> bool {
                    self.ulBank == other.ulBank && self.ulInstrument == other.ulInstrument
                }
            }
            impl ::std::cmp::Eq for MIDILOCALE {}
            unsafe impl ::windows::Abi for MIDILOCALE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct INSTHEADER {
                pub cRegions: u32,
                pub Locale: MIDILOCALE,
            }
            impl INSTHEADER {}
            impl ::std::default::Default for INSTHEADER {
                fn default() -> Self {
                    Self {
                        cRegions: 0,
                        Locale: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for INSTHEADER {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("INSTHEADER")
                        .field("cRegions", &format_args!("{:?}", self.cRegions))
                        .field("Locale", &format_args!("{:?}", self.Locale))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for INSTHEADER {
                fn eq(&self, other: &Self) -> bool {
                    self.cRegions == other.cRegions && self.Locale == other.Locale
                }
            }
            impl ::std::cmp::Eq for INSTHEADER {}
            unsafe impl ::windows::Abi for INSTHEADER {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_AUDIOEFFECTSDISCOVERY(pub i32);
            impl KSPROPERTY_AUDIOEFFECTSDISCOVERY {
                pub const KSPROPERTY_AUDIOEFFECTSDISCOVERY_EFFECTSLIST: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_AUDIOEFFECTSDISCOVERY {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_AUDIOEFFECTSDISCOVERY {
                type Abi = Self;
            }
            pub const KSPROPERTY_SUPPORT_GET: u32 = 1u32;
            pub const KSPROPERTY_SUPPORT_SET: u32 = 2u32;
            pub const KSPROPSETID_AudioEffectsDiscovery: ::windows::Guid =
                ::windows::Guid::from_values(
                    186743410,
                    5816,
                    19021,
                    [189, 237, 249, 214, 187, 237, 205, 143],
                );
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSP_PINMODE {
                pub PinProperty: super::CoreAudio::KSP_PIN,
                pub AudioProcessingMode: ::windows::Guid,
            }
            impl KSP_PINMODE {}
            unsafe impl ::windows::Abi for KSP_PINMODE {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MDEVICECAPSEX {
                pub cbSize: u32,
                pub pCaps: *mut ::std::ffi::c_void,
            }
            impl MDEVICECAPSEX {}
            unsafe impl ::windows::Abi for MDEVICECAPSEX {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MIDIOPENDESC {
                pub hMidi: super::Multimedia::HMIDI,
                pub dwCallback: usize,
                pub dwInstance: usize,
                pub dnDevNode: usize,
                pub cIds: u32,
                pub rgIds: [super::Multimedia::midiopenstrmid_tag; 1],
            }
            impl MIDIOPENDESC {}
            unsafe impl ::windows::Abi for MIDIOPENDESC {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct POOLCUE {
                pub ulOffset: u32,
            }
            impl POOLCUE {}
            impl ::std::default::Default for POOLCUE {
                fn default() -> Self {
                    Self { ulOffset: 0 }
                }
            }
            impl ::std::fmt::Debug for POOLCUE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("POOLCUE")
                        .field("ulOffset", &format_args!("{:?}", self.ulOffset))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for POOLCUE {
                fn eq(&self, other: &Self) -> bool {
                    self.ulOffset == other.ulOffset
                }
            }
            impl ::std::cmp::Eq for POOLCUE {}
            unsafe impl ::windows::Abi for POOLCUE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct POOLTABLE {
                pub cbSize: u32,
                pub cCues: u32,
            }
            impl POOLTABLE {}
            impl ::std::default::Default for POOLTABLE {
                fn default() -> Self {
                    Self {
                        cbSize: 0,
                        cCues: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for POOLTABLE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("POOLTABLE")
                        .field("cbSize", &format_args!("{:?}", self.cbSize))
                        .field("cCues", &format_args!("{:?}", self.cCues))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for POOLTABLE {
                fn eq(&self, other: &Self) -> bool {
                    self.cbSize == other.cbSize && self.cCues == other.cCues
                }
            }
            impl ::std::cmp::Eq for POOLTABLE {}
            unsafe impl ::windows::Abi for POOLTABLE {
                type Abi = Self;
            }
            pub const POOL_CUE_NULL: i32 = -1i32;
            pub const REFRESH_F_LASTBUFFER: u32 = 1u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct RGNHEADER {
                pub RangeKey: RGNRANGE,
                pub RangeVelocity: RGNRANGE,
                pub fusOptions: u16,
                pub usKeyGroup: u16,
            }
            impl RGNHEADER {}
            impl ::std::default::Default for RGNHEADER {
                fn default() -> Self {
                    Self {
                        RangeKey: ::std::default::Default::default(),
                        RangeVelocity: ::std::default::Default::default(),
                        fusOptions: 0,
                        usKeyGroup: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for RGNHEADER {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("RGNHEADER")
                        .field("RangeKey", &format_args!("{:?}", self.RangeKey))
                        .field("RangeVelocity", &format_args!("{:?}", self.RangeVelocity))
                        .field("fusOptions", &format_args!("{:?}", self.fusOptions))
                        .field("usKeyGroup", &format_args!("{:?}", self.usKeyGroup))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for RGNHEADER {
                fn eq(&self, other: &Self) -> bool {
                    self.RangeKey == other.RangeKey
                        && self.RangeVelocity == other.RangeVelocity
                        && self.fusOptions == other.fusOptions
                        && self.usKeyGroup == other.usKeyGroup
                }
            }
            impl ::std::cmp::Eq for RGNHEADER {}
            unsafe impl ::windows::Abi for RGNHEADER {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct UNCOMPRESSEDAUDIOFORMAT {
                pub guidFormatType: ::windows::Guid,
                pub dwSamplesPerFrame: u32,
                pub dwBytesPerSampleContainer: u32,
                pub dwValidBitsPerSample: u32,
                pub fFramesPerSecond: f32,
                pub dwChannelMask: u32,
            }
            impl UNCOMPRESSEDAUDIOFORMAT {}
            impl ::std::default::Default for UNCOMPRESSEDAUDIOFORMAT {
                fn default() -> Self {
                    Self {
                        guidFormatType: ::std::default::Default::default(),
                        dwSamplesPerFrame: 0,
                        dwBytesPerSampleContainer: 0,
                        dwValidBitsPerSample: 0,
                        fFramesPerSecond: 0.0,
                        dwChannelMask: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for UNCOMPRESSEDAUDIOFORMAT {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("UNCOMPRESSEDAUDIOFORMAT")
                        .field("guidFormatType", &format_args!("{:?}", self.guidFormatType))
                        .field(
                            "dwSamplesPerFrame",
                            &format_args!("{:?}", self.dwSamplesPerFrame),
                        )
                        .field(
                            "dwBytesPerSampleContainer",
                            &format_args!("{:?}", self.dwBytesPerSampleContainer),
                        )
                        .field(
                            "dwValidBitsPerSample",
                            &format_args!("{:?}", self.dwValidBitsPerSample),
                        )
                        .field(
                            "fFramesPerSecond",
                            &format_args!("{:?}", self.fFramesPerSecond),
                        )
                        .field("dwChannelMask", &format_args!("{:?}", self.dwChannelMask))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for UNCOMPRESSEDAUDIOFORMAT {
                fn eq(&self, other: &Self) -> bool {
                    self.guidFormatType == other.guidFormatType
                        && self.dwSamplesPerFrame == other.dwSamplesPerFrame
                        && self.dwBytesPerSampleContainer == other.dwBytesPerSampleContainer
                        && self.dwValidBitsPerSample == other.dwValidBitsPerSample
                        && self.fFramesPerSecond == other.fFramesPerSecond
                        && self.dwChannelMask == other.dwChannelMask
                }
            }
            impl ::std::cmp::Eq for UNCOMPRESSEDAUDIOFORMAT {}
            unsafe impl ::windows::Abi for UNCOMPRESSEDAUDIOFORMAT {
                type Abi = Self;
            }
            pub const WAVELINK_CHANNEL_LEFT: i32 = 1i32;
            pub const WAVELINK_CHANNEL_RIGHT: i32 = 2i32;
            pub const WLOOP_TYPE_FORWARD: u32 = 0u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct _DMUS_PORTPARAMS {
                pub dwSize: u32,
                pub dwValidParams: u32,
                pub dwVoices: u32,
                pub dwChannelGroups: u32,
                pub dwAudioChannels: u32,
                pub dwSampleRate: u32,
                pub dwEffectFlags: u32,
                pub fShare: super::SystemServices::BOOL,
            }
            impl _DMUS_PORTPARAMS {}
            impl ::std::default::Default for _DMUS_PORTPARAMS {
                fn default() -> Self {
                    Self {
                        dwSize: 0,
                        dwValidParams: 0,
                        dwVoices: 0,
                        dwChannelGroups: 0,
                        dwAudioChannels: 0,
                        dwSampleRate: 0,
                        dwEffectFlags: 0,
                        fShare: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for _DMUS_PORTPARAMS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_DMUS_PORTPARAMS")
                        .field("dwSize", &format_args!("{:?}", self.dwSize))
                        .field("dwValidParams", &format_args!("{:?}", self.dwValidParams))
                        .field("dwVoices", &format_args!("{:?}", self.dwVoices))
                        .field(
                            "dwChannelGroups",
                            &format_args!("{:?}", self.dwChannelGroups),
                        )
                        .field(
                            "dwAudioChannels",
                            &format_args!("{:?}", self.dwAudioChannels),
                        )
                        .field("dwSampleRate", &format_args!("{:?}", self.dwSampleRate))
                        .field("dwEffectFlags", &format_args!("{:?}", self.dwEffectFlags))
                        .field("fShare", &format_args!("{:?}", self.fShare))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for _DMUS_PORTPARAMS {
                fn eq(&self, other: &Self) -> bool {
                    self.dwSize == other.dwSize
                        && self.dwValidParams == other.dwValidParams
                        && self.dwVoices == other.dwVoices
                        && self.dwChannelGroups == other.dwChannelGroups
                        && self.dwAudioChannels == other.dwAudioChannels
                        && self.dwSampleRate == other.dwSampleRate
                        && self.dwEffectFlags == other.dwEffectFlags
                        && self.fShare == other.fShare
                }
            }
            impl ::std::cmp::Eq for _DMUS_PORTPARAMS {}
            unsafe impl ::windows::Abi for _DMUS_PORTPARAMS {
                type Abi = Self;
            }
        }
        #[allow(
            unused_variables,
            non_upper_case_globals,
            non_snake_case,
            unused_unsafe,
            non_camel_case_types,
            dead_code,
            clippy::all
        )]
        pub mod Automation {
            pub unsafe fn SysAllocStringLen<'a>(
                strin: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                ui: u32,
            ) -> BSTR {
                panic!("Unsupported target OS");
            }
            pub unsafe fn SysStringLen<'a>(pbstr: impl ::windows::IntoParam<'a, BSTR>) -> u32 {
                panic!("Unsupported target OS");
            }
            pub unsafe fn SysFreeString<'a>(bstrstring: impl ::windows::IntoParam<'a, BSTR>) {
                panic!("Unsupported target OS");
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: cmp :: Eq)]
            pub struct BSTR(*mut u16);
            impl BSTR {
                pub fn is_empty(&self) -> bool {
                    self.0.is_null()
                }
                fn from_wide(value: &[u16]) -> Self {
                    if value.len() == 0 {
                        return Self(::std::ptr::null_mut());
                    }
                    unsafe {
                        SysAllocStringLen(
                            super::SystemServices::PWSTR(value.as_ptr() as _),
                            value.len() as u32,
                        )
                    }
                }
                fn as_wide(&self) -> &[u16] {
                    if self.0.is_null() {
                        return &[];
                    }
                    unsafe {
                        ::std::slice::from_raw_parts(
                            self.0 as *const u16,
                            SysStringLen(self) as usize,
                        )
                    }
                }
            }
            impl std::convert::From<&str> for BSTR {
                fn from(value: &str) -> Self {
                    let value: ::std::vec::Vec<u16> = value.encode_utf16().collect();
                    Self::from_wide(&value)
                }
            }
            impl std::convert::From<::std::string::String> for BSTR {
                fn from(value: ::std::string::String) -> Self {
                    value.as_str().into()
                }
            }
            impl ::std::convert::From<&::std::string::String> for BSTR {
                fn from(value: &::std::string::String) -> Self {
                    value.as_str().into()
                }
            }
            impl<'a> ::std::convert::TryFrom<&'a BSTR> for ::std::string::String {
                type Error = ::std::string::FromUtf16Error;
                fn try_from(value: &BSTR) -> ::std::result::Result<Self, Self::Error> {
                    ::std::string::String::from_utf16(value.as_wide())
                }
            }
            impl ::std::convert::TryFrom<BSTR> for ::std::string::String {
                type Error = ::std::string::FromUtf16Error;
                fn try_from(value: BSTR) -> ::std::result::Result<Self, Self::Error> {
                    ::std::string::String::try_from(&value)
                }
            }
            impl ::std::default::Default for BSTR {
                fn default() -> Self {
                    Self(::std::ptr::null_mut())
                }
            }
            impl ::std::fmt::Display for BSTR {
                fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    use std::fmt::Write;
                    for c in ::std::char::decode_utf16(self.as_wide().iter().cloned()) {
                        f.write_char(c.map_err(|_| ::std::fmt::Error)?)?
                    }
                    Ok(())
                }
            }
            impl ::std::fmt::Debug for BSTR {
                fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    ::std::write!(f, "{}", self)
                }
            }
            impl ::std::cmp::PartialEq for BSTR {
                fn eq(&self, other: &Self) -> bool {
                    self.as_wide() == other.as_wide()
                }
            }
            impl ::std::cmp::PartialEq<::std::string::String> for BSTR {
                fn eq(&self, other: &::std::string::String) -> bool {
                    self == other.as_str()
                }
            }
            impl ::std::cmp::PartialEq<str> for BSTR {
                fn eq(&self, other: &str) -> bool {
                    self == other
                }
            }
            impl ::std::cmp::PartialEq<&str> for BSTR {
                fn eq(&self, other: &&str) -> bool {
                    self.as_wide().iter().copied().eq(other.encode_utf16())
                }
            }
            impl ::std::cmp::PartialEq<BSTR> for &str {
                fn eq(&self, other: &BSTR) -> bool {
                    other == self
                }
            }
            impl ::std::ops::Drop for BSTR {
                fn drop(&mut self) {
                    if !self.0.is_null() {
                        unsafe {
                            SysFreeString(self as &Self);
                        }
                    }
                }
            }
            unsafe impl ::windows::Abi for BSTR {
                type Abi = *mut u16;
                fn set_abi(&mut self) -> *mut *mut u16 {
                    debug_assert!(self.0.is_null());
                    &mut self.0 as *mut _ as _
                }
            }
            pub type BSTR_abi = *mut u16;
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDispatch(::windows::IUnknown);
            impl IDispatch {}
            unsafe impl ::windows::Interface for IDispatch {
                type Vtable = IDispatch_abi;
                const IID: ::windows::Guid =
                    ::windows::Guid::from_values(132096, 0, 0, [192, 0, 0, 0, 0, 0, 0, 70]);
            }
            impl IDispatch {
                pub unsafe fn GetTypeInfoCount(&self, pctinfo: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pctinfo),
                    )
                }
                pub unsafe fn GetIDsOfNames(
                    &self,
                    riid: *const ::windows::Guid,
                    rgsznames: *mut super::SystemServices::PWSTR,
                    cnames: u32,
                    lcid: u32,
                    rgdispid: *mut i32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(riid),
                        ::std::mem::transmute(rgsznames),
                        ::std::mem::transmute(cnames),
                        ::std::mem::transmute(lcid),
                        ::std::mem::transmute(rgdispid),
                    )
                }
            }
            impl ::std::convert::From<IDispatch> for ::windows::IUnknown {
                fn from(value: IDispatch) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDispatch> for ::windows::IUnknown {
                fn from(value: &IDispatch) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDispatch {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDispatch {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDispatch_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pctinfo: *mut u32,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(),
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    riid: *const ::windows::Guid,
                    rgsznames: *mut super::SystemServices::PWSTR,
                    cnames: u32,
                    lcid: u32,
                    rgdispid: *mut i32,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(),
            );
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct SAFEARRAYBOUND {
                pub cElements: u32,
                pub lLbound: i32,
            }
            impl SAFEARRAYBOUND {}
            impl ::std::default::Default for SAFEARRAYBOUND {
                fn default() -> Self {
                    Self {
                        cElements: 0,
                        lLbound: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for SAFEARRAYBOUND {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("SAFEARRAYBOUND")
                        .field("cElements", &format_args!("{:?}", self.cElements))
                        .field("lLbound", &format_args!("{:?}", self.lLbound))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for SAFEARRAYBOUND {
                fn eq(&self, other: &Self) -> bool {
                    self.cElements == other.cElements && self.lLbound == other.lLbound
                }
            }
            impl ::std::cmp::Eq for SAFEARRAYBOUND {}
            unsafe impl ::windows::Abi for SAFEARRAYBOUND {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct SAFEARRAY {
                pub cDims: u16,
                pub fFeatures: u16,
                pub cbElements: u32,
                pub cLocks: u32,
                pub pvData: *mut ::std::ffi::c_void,
                pub rgsabound: [SAFEARRAYBOUND; 1],
            }
            impl SAFEARRAY {}
            impl ::std::default::Default for SAFEARRAY {
                fn default() -> Self {
                    Self {
                        cDims: 0,
                        fFeatures: 0,
                        cbElements: 0,
                        cLocks: 0,
                        pvData: ::std::ptr::null_mut(),
                        rgsabound: [::std::default::Default::default(); 1],
                    }
                }
            }
            impl ::std::fmt::Debug for SAFEARRAY {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("SAFEARRAY")
                        .field("cDims", &format_args!("{:?}", self.cDims))
                        .field("fFeatures", &format_args!("{:?}", self.fFeatures))
                        .field("cbElements", &format_args!("{:?}", self.cbElements))
                        .field("cLocks", &format_args!("{:?}", self.cLocks))
                        .field("pvData", &format_args!("{:?}", self.pvData))
                        .field("rgsabound", &format_args!("{:?}", self.rgsabound))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for SAFEARRAY {
                fn eq(&self, other: &Self) -> bool {
                    self.cDims == other.cDims
                        && self.fFeatures == other.fFeatures
                        && self.cbElements == other.cbElements
                        && self.cLocks == other.cLocks
                        && self.pvData == other.pvData
                        && self.rgsabound == other.rgsabound
                }
            }
            impl ::std::cmp::Eq for SAFEARRAY {}
            unsafe impl ::windows::Abi for SAFEARRAY {
                type Abi = Self;
            }
        }
        #[allow(
            unused_variables,
            non_upper_case_globals,
            non_snake_case,
            unused_unsafe,
            non_camel_case_types,
            dead_code,
            clippy::all
        )]
        pub mod Com {
            pub unsafe fn CoTaskMemAlloc(cb: usize) -> *mut ::std::ffi::c_void {
                panic!("Unsupported target OS");
            }
            pub unsafe fn CoTaskMemFree(pv: *mut ::std::ffi::c_void) {
                panic!("Unsupported target OS");
            }
            pub unsafe fn CLSIDFromProgID<'a>(
                lpszprogid: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                lpclsid: *mut ::windows::Guid,
            ) -> ::windows::HRESULT {
                panic!("Unsupported target OS");
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct COINIT(pub u32);
            impl COINIT {
                pub const COINIT_APARTMENTTHREADED: Self = Self(2u32);
                pub const COINIT_MULTITHREADED: Self = Self(0u32);
                pub const COINIT_DISABLE_OLE1DDE: Self = Self(4u32);
                pub const COINIT_SPEED_OVER_MEMORY: Self = Self(8u32);
            }
            impl ::std::convert::From<u32> for COINIT {
                fn from(value: u32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for COINIT {
                type Abi = Self;
            }
            impl ::std::ops::BitOr for COINIT {
                type Output = Self;
                fn bitor(self, rhs: Self) -> Self {
                    Self(self.0 | rhs.0)
                }
            }
            impl ::std::ops::BitAnd for COINIT {
                type Output = Self;
                fn bitand(self, rhs: Self) -> Self {
                    Self(self.0 & rhs.0)
                }
            }
            impl ::std::ops::BitOrAssign for COINIT {
                fn bitor_assign(&mut self, rhs: Self) {
                    self.0.bitor_assign(rhs.0)
                }
            }
            impl ::std::ops::BitAndAssign for COINIT {
                fn bitand_assign(&mut self, rhs: Self) {
                    self.0.bitand_assign(rhs.0)
                }
            }
            pub unsafe fn CoInitializeEx(
                pvreserved: *mut ::std::ffi::c_void,
                dwcoinit: COINIT,
            ) -> ::windows::HRESULT {
                panic!("Unsupported target OS");
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct CLSCTX(pub u32);
            impl CLSCTX {
                pub const CLSCTX_INPROC_SERVER: Self = Self(1u32);
                pub const CLSCTX_INPROC_HANDLER: Self = Self(2u32);
                pub const CLSCTX_LOCAL_SERVER: Self = Self(4u32);
                pub const CLSCTX_INPROC_SERVER16: Self = Self(8u32);
                pub const CLSCTX_REMOTE_SERVER: Self = Self(16u32);
                pub const CLSCTX_INPROC_HANDLER16: Self = Self(32u32);
                pub const CLSCTX_RESERVED1: Self = Self(64u32);
                pub const CLSCTX_RESERVED2: Self = Self(128u32);
                pub const CLSCTX_RESERVED3: Self = Self(256u32);
                pub const CLSCTX_RESERVED4: Self = Self(512u32);
                pub const CLSCTX_NO_CODE_DOWNLOAD: Self = Self(1024u32);
                pub const CLSCTX_RESERVED5: Self = Self(2048u32);
                pub const CLSCTX_NO_CUSTOM_MARSHAL: Self = Self(4096u32);
                pub const CLSCTX_ENABLE_CODE_DOWNLOAD: Self = Self(8192u32);
                pub const CLSCTX_NO_FAILURE_LOG: Self = Self(16384u32);
                pub const CLSCTX_DISABLE_AAA: Self = Self(32768u32);
                pub const CLSCTX_ENABLE_AAA: Self = Self(65536u32);
                pub const CLSCTX_FROM_DEFAULT_CONTEXT: Self = Self(131072u32);
                pub const CLSCTX_ACTIVATE_X86_SERVER: Self = Self(262144u32);
                pub const CLSCTX_ACTIVATE_32_BIT_SERVER: Self = Self(262144u32);
                pub const CLSCTX_ACTIVATE_64_BIT_SERVER: Self = Self(524288u32);
                pub const CLSCTX_ENABLE_CLOAKING: Self = Self(1048576u32);
                pub const CLSCTX_APPCONTAINER: Self = Self(4194304u32);
                pub const CLSCTX_ACTIVATE_AAA_AS_IU: Self = Self(8388608u32);
                pub const CLSCTX_RESERVED6: Self = Self(16777216u32);
                pub const CLSCTX_ACTIVATE_ARM32_SERVER: Self = Self(33554432u32);
                pub const CLSCTX_PS_DLL: Self = Self(2147483648u32);
                pub const CLSCTX_ALL: Self = Self(23u32);
                pub const CLSCTX_SERVER: Self = Self(21u32);
            }
            impl ::std::convert::From<u32> for CLSCTX {
                fn from(value: u32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for CLSCTX {
                type Abi = Self;
            }
            impl ::std::ops::BitOr for CLSCTX {
                type Output = Self;
                fn bitor(self, rhs: Self) -> Self {
                    Self(self.0 | rhs.0)
                }
            }
            impl ::std::ops::BitAnd for CLSCTX {
                type Output = Self;
                fn bitand(self, rhs: Self) -> Self {
                    Self(self.0 & rhs.0)
                }
            }
            impl ::std::ops::BitOrAssign for CLSCTX {
                fn bitor_assign(&mut self, rhs: Self) {
                    self.0.bitor_assign(rhs.0)
                }
            }
            impl ::std::ops::BitAndAssign for CLSCTX {
                fn bitand_assign(&mut self, rhs: Self) {
                    self.0.bitand_assign(rhs.0)
                }
            }
            pub unsafe fn CoCreateInstance<'a>(
                rclsid: *const ::windows::Guid,
                punkouter: impl ::windows::IntoParam<'a, ::windows::IUnknown>,
                dwclscontext: CLSCTX,
                riid: *const ::windows::Guid,
                ppv: *mut *mut ::std::ffi::c_void,
            ) -> ::windows::HRESULT {
                panic!("Unsupported target OS");
            }
        }
        #[allow(
            unused_variables,
            non_upper_case_globals,
            non_snake_case,
            unused_unsafe,
            non_camel_case_types,
            dead_code,
            clippy::all
        )]
        pub mod CoreAudio {
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IMMDeviceCollection(::windows::IUnknown);
            impl IMMDeviceCollection {}
            unsafe impl ::windows::Interface for IMMDeviceCollection {
                type Vtable = IMMDeviceCollection_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    198681022,
                    31258,
                    17627,
                    [131, 151, 204, 83, 146, 56, 123, 94],
                );
            }
            impl IMMDeviceCollection {
                pub unsafe fn GetCount(&self, pcdevices: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcdevices),
                    )
                }
                pub unsafe fn Item(
                    &self,
                    ndevice: u32,
                    ppdevice: *mut ::std::option::Option<IMMDevice>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(ndevice),
                        ::std::mem::transmute(ppdevice),
                    )
                }
            }
            impl ::std::convert::From<IMMDeviceCollection> for ::windows::IUnknown {
                fn from(value: IMMDeviceCollection) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IMMDeviceCollection> for ::windows::IUnknown {
                fn from(value: &IMMDeviceCollection) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IMMDeviceCollection {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IMMDeviceCollection {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IMMDeviceCollection_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcdevices: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    ndevice: u32,
                    ppdevice: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
            );
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSIDENTIFIER {
                pub Anonymous: KSIDENTIFIER_0,
            }
            impl KSIDENTIFIER {}
            unsafe impl ::windows::Abi for KSIDENTIFIER {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union KSIDENTIFIER_0 {
                pub Anonymous: KSIDENTIFIER_0_0,
                pub Alignment: i64,
            }
            impl KSIDENTIFIER_0 {}
            unsafe impl ::windows::Abi for KSIDENTIFIER_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSIDENTIFIER_0_0 {
                pub Set: ::windows::Guid,
                pub Id: u32,
                pub Flags: u32,
            }
            impl KSIDENTIFIER_0_0 {}
            impl ::std::default::Default for KSIDENTIFIER_0_0 {
                fn default() -> Self {
                    Self {
                        Set: ::std::default::Default::default(),
                        Id: 0,
                        Flags: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSIDENTIFIER_0_0 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_Anonymous_e__Struct")
                        .field("Set", &format_args!("{:?}", self.Set))
                        .field("Id", &format_args!("{:?}", self.Id))
                        .field("Flags", &format_args!("{:?}", self.Flags))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSIDENTIFIER_0_0 {
                fn eq(&self, other: &Self) -> bool {
                    self.Set == other.Set && self.Id == other.Id && self.Flags == other.Flags
                }
            }
            impl ::std::cmp::Eq for KSIDENTIFIER_0_0 {}
            unsafe impl ::windows::Abi for KSIDENTIFIER_0_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSP_PIN {
                pub Property: KSIDENTIFIER,
                pub PinId: u32,
                pub Anonymous: KSP_PIN_0,
            }
            impl KSP_PIN {}
            unsafe impl ::windows::Abi for KSP_PIN {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union KSP_PIN_0 {
                pub Reserved: u32,
                pub Flags: u32,
            }
            impl KSP_PIN_0 {}
            unsafe impl ::windows::Abi for KSP_PIN_0 {
                type Abi = Self;
            }
            pub const AEC_MODE_FULL_DUPLEX: u32 = 2u32;
            pub const AEC_MODE_HALF_DUPLEX: u32 = 1u32;
            pub const AEC_MODE_PASS_THROUGH: u32 = 0u32;
            pub const AEC_STATUS_FD_CURRENTLY_CONVERGED: u32 = 8u32;
            pub const AEC_STATUS_FD_HISTORY_CONTINUOUSLY_CONVERGED: u32 = 1u32;
            pub const AEC_STATUS_FD_HISTORY_PREVIOUSLY_DIVERGED: u32 = 2u32;
            pub const AEC_STATUS_FD_HISTORY_UNINITIALIZED: u32 = 0u32;
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct AMBISONICS_CHANNEL_ORDERING(pub i32);
            impl AMBISONICS_CHANNEL_ORDERING {
                pub const AMBISONICS_CHANNEL_ORDERING_ACN: Self = Self(0i32);
            }
            impl ::std::convert::From<i32> for AMBISONICS_CHANNEL_ORDERING {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for AMBISONICS_CHANNEL_ORDERING {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct AMBISONICS_NORMALIZATION(pub i32);
            impl AMBISONICS_NORMALIZATION {
                pub const AMBISONICS_NORMALIZATION_SN3D: Self = Self(0i32);
                pub const AMBISONICS_NORMALIZATION_N3D: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for AMBISONICS_NORMALIZATION {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for AMBISONICS_NORMALIZATION {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct AMBISONICS_TYPE(pub i32);
            impl AMBISONICS_TYPE {
                pub const AMBISONICS_TYPE_FULL3D: Self = Self(0i32);
            }
            impl ::std::convert::From<i32> for AMBISONICS_TYPE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for AMBISONICS_TYPE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct AMBISONICS_PARAMS {
                pub u32Size: u32,
                pub u32Version: u32,
                pub u32Type: AMBISONICS_TYPE,
                pub u32ChannelOrdering: AMBISONICS_CHANNEL_ORDERING,
                pub u32Normalization: AMBISONICS_NORMALIZATION,
                pub u32Order: u32,
                pub u32NumChannels: u32,
                pub pu32ChannelMap: *mut u32,
            }
            impl AMBISONICS_PARAMS {}
            impl ::std::default::Default for AMBISONICS_PARAMS {
                fn default() -> Self {
                    Self {
                        u32Size: 0,
                        u32Version: 0,
                        u32Type: ::std::default::Default::default(),
                        u32ChannelOrdering: ::std::default::Default::default(),
                        u32Normalization: ::std::default::Default::default(),
                        u32Order: 0,
                        u32NumChannels: 0,
                        pu32ChannelMap: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for AMBISONICS_PARAMS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("AMBISONICS_PARAMS")
                        .field("u32Size", &format_args!("{:?}", self.u32Size))
                        .field("u32Version", &format_args!("{:?}", self.u32Version))
                        .field("u32Type", &format_args!("{:?}", self.u32Type))
                        .field(
                            "u32ChannelOrdering",
                            &format_args!("{:?}", self.u32ChannelOrdering),
                        )
                        .field(
                            "u32Normalization",
                            &format_args!("{:?}", self.u32Normalization),
                        )
                        .field("u32Order", &format_args!("{:?}", self.u32Order))
                        .field("u32NumChannels", &format_args!("{:?}", self.u32NumChannels))
                        .field("pu32ChannelMap", &format_args!("{:?}", self.pu32ChannelMap))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for AMBISONICS_PARAMS {
                fn eq(&self, other: &Self) -> bool {
                    self.u32Size == other.u32Size
                        && self.u32Version == other.u32Version
                        && self.u32Type == other.u32Type
                        && self.u32ChannelOrdering == other.u32ChannelOrdering
                        && self.u32Normalization == other.u32Normalization
                        && self.u32Order == other.u32Order
                        && self.u32NumChannels == other.u32NumChannels
                        && self.pu32ChannelMap == other.pu32ChannelMap
                }
            }
            impl ::std::cmp::Eq for AMBISONICS_PARAMS {}
            unsafe impl ::windows::Abi for AMBISONICS_PARAMS {
                type Abi = Self;
            }
            pub const AMBISONICS_PARAM_VERSION_1: u32 = 1u32;
            pub const APO_CLASS_UUID: ::windows::Guid = ::windows::Guid::from_values(
                1502215400,
                40144,
                18045,
                [138, 106, 84, 25, 227, 21, 41, 212],
            );
            pub const AUDCLNT_SESSIONFLAGS_DISPLAY_HIDE: u32 = 536870912u32;
            pub const AUDCLNT_SESSIONFLAGS_DISPLAY_HIDEWHENEXPIRED: u32 = 1073741824u32;
            pub const AUDCLNT_SESSIONFLAGS_EXPIREWHENUNOWNED: u32 = 268435456u32;
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct AUDCLNT_SHAREMODE(pub i32);
            impl AUDCLNT_SHAREMODE {
                pub const AUDCLNT_SHAREMODE_SHARED: Self = Self(0i32);
                pub const AUDCLNT_SHAREMODE_EXCLUSIVE: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for AUDCLNT_SHAREMODE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for AUDCLNT_SHAREMODE {
                type Abi = Self;
            }
            pub const AUDCLNT_STREAMFLAGS_AUTOCONVERTPCM: u32 = 2147483648u32;
            pub const AUDCLNT_STREAMFLAGS_CROSSPROCESS: u32 = 65536u32;
            pub const AUDCLNT_STREAMFLAGS_EVENTCALLBACK: u32 = 262144u32;
            pub const AUDCLNT_STREAMFLAGS_LOOPBACK: u32 = 131072u32;
            pub const AUDCLNT_STREAMFLAGS_NOPERSIST: u32 = 524288u32;
            pub const AUDCLNT_STREAMFLAGS_RATEADJUST: u32 = 1048576u32;
            pub const AUDCLNT_STREAMFLAGS_SRC_DEFAULT_QUALITY: u32 = 134217728u32;
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct AUDCLNT_STREAMOPTIONS(pub u32);
            impl AUDCLNT_STREAMOPTIONS {
                pub const AUDCLNT_STREAMOPTIONS_NONE: Self = Self(0u32);
                pub const AUDCLNT_STREAMOPTIONS_RAW: Self = Self(1u32);
                pub const AUDCLNT_STREAMOPTIONS_MATCH_FORMAT: Self = Self(2u32);
                pub const AUDCLNT_STREAMOPTIONS_AMBISONICS: Self = Self(4u32);
            }
            impl ::std::convert::From<u32> for AUDCLNT_STREAMOPTIONS {
                fn from(value: u32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for AUDCLNT_STREAMOPTIONS {
                type Abi = Self;
            }
            impl ::std::ops::BitOr for AUDCLNT_STREAMOPTIONS {
                type Output = Self;
                fn bitor(self, rhs: Self) -> Self {
                    Self(self.0 | rhs.0)
                }
            }
            impl ::std::ops::BitAnd for AUDCLNT_STREAMOPTIONS {
                type Output = Self;
                fn bitand(self, rhs: Self) -> Self {
                    Self(self.0 & rhs.0)
                }
            }
            impl ::std::ops::BitOrAssign for AUDCLNT_STREAMOPTIONS {
                fn bitor_assign(&mut self, rhs: Self) {
                    self.0.bitor_assign(rhs.0)
                }
            }
            impl ::std::ops::BitAndAssign for AUDCLNT_STREAMOPTIONS {
                fn bitand_assign(&mut self, rhs: Self) {
                    self.0.bitand_assign(rhs.0)
                }
            }
            pub const AUDIOCLOCK_CHARACTERISTIC_FIXED_FREQ: u32 = 1u32;
            pub const AUDIOENDPOINT_CLASS_UUID: ::windows::Guid = ::windows::Guid::from_values(
                3244708412,
                65036,
                19092,
                [165, 134, 241, 168, 12, 251, 191, 62],
            );
            pub const AUDIOMODULE_MAX_DATA_SIZE: u32 = 64000u32;
            pub const AUDIOMODULE_MAX_NAME_CCH_SIZE: u32 = 128u32;
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct AUDIOPOSTURE_MEMBER_FLAGS(pub i32);
            impl AUDIOPOSTURE_MEMBER_FLAGS {
                pub const AUDIOPOSTURE_MEMBER_FLAGS_HINGEANGLE: Self = Self(1i32);
                pub const AUDIOPOSTURE_MEMBER_FLAGS_PANELSTATE: Self = Self(2i32);
            }
            impl ::std::convert::From<i32> for AUDIOPOSTURE_MEMBER_FLAGS {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for AUDIOPOSTURE_MEMBER_FLAGS {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct AUDIOPOSTURE_PANEL_ORIENTATION(pub i32);
            impl AUDIOPOSTURE_PANEL_ORIENTATION {
                pub const AUDIOPOSTURE_PANEL_ORIENTATION_NOTROTATED: Self = Self(0i32);
                pub const AUDIOPOSTURE_PANEL_ORIENTATION_ROTATED90DEGREESCOUNTERCLOCKWISE: Self =
                    Self(1i32);
                pub const AUDIOPOSTURE_PANEL_ORIENTATION_ROTATED180DEGREESCOUNTERCLOCKWISE: Self =
                    Self(2i32);
                pub const AUDIOPOSTURE_PANEL_ORIENTATION_ROTATED270DEGREESCOUNTERCLOCKWISE: Self =
                    Self(3i32);
                pub const AUDIOPOSTURE_PANEL_ORIENTATION_FACEUP: Self = Self(4i32);
                pub const AUDIOPOSTURE_PANEL_ORIENTATION_FACEDOWN: Self = Self(5i32);
                pub const AUDIOPOSTURE_PANEL_ORIENTATION_COUNT: Self = Self(6i32);
            }
            impl ::std::convert::From<i32> for AUDIOPOSTURE_PANEL_ORIENTATION {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for AUDIOPOSTURE_PANEL_ORIENTATION {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct AUDIOPOSTURE_PANEL_POWER(pub i32);
            impl AUDIOPOSTURE_PANEL_POWER {
                pub const AUDIOPOSTURE_PANEL_POWER_OFF: Self = Self(0i32);
                pub const AUDIOPOSTURE_PANEL_POWER_ON: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for AUDIOPOSTURE_PANEL_POWER {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for AUDIOPOSTURE_PANEL_POWER {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct AUDIO_CURVE_TYPE(pub i32);
            impl AUDIO_CURVE_TYPE {
                pub const AUDIO_CURVE_TYPE_NONE: Self = Self(0i32);
                pub const AUDIO_CURVE_TYPE_WINDOWS_FADE: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for AUDIO_CURVE_TYPE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for AUDIO_CURVE_TYPE {
                type Abi = Self;
            }
            pub const AUDIO_EFFECT_TYPE_ACOUSTIC_ECHO_CANCELLATION: ::windows::Guid =
                ::windows::Guid::from_values(
                    1868869054,
                    33297,
                    4578,
                    [140, 112, 44, 39, 215, 240, 1, 250],
                );
            pub const AUDIO_EFFECT_TYPE_AUTOMATIC_GAIN_CONTROL: ::windows::Guid =
                ::windows::Guid::from_values(
                    1868869056,
                    33297,
                    4578,
                    [140, 112, 44, 39, 215, 240, 1, 250],
                );
            pub const AUDIO_EFFECT_TYPE_BASS_BOOST: ::windows::Guid = ::windows::Guid::from_values(
                1868869061,
                33297,
                4578,
                [140, 112, 44, 39, 215, 240, 1, 250],
            );
            pub const AUDIO_EFFECT_TYPE_BASS_MANAGEMENT: ::windows::Guid =
                ::windows::Guid::from_values(
                    1868869066,
                    33297,
                    4578,
                    [140, 112, 44, 39, 215, 240, 1, 250],
                );
            pub const AUDIO_EFFECT_TYPE_BEAMFORMING: ::windows::Guid = ::windows::Guid::from_values(
                1868869057,
                33297,
                4578,
                [140, 112, 44, 39, 215, 240, 1, 250],
            );
            pub const AUDIO_EFFECT_TYPE_CONSTANT_TONE_REMOVAL: ::windows::Guid =
                ::windows::Guid::from_values(
                    1868869058,
                    33297,
                    4578,
                    [140, 112, 44, 39, 215, 240, 1, 250],
                );
            pub const AUDIO_EFFECT_TYPE_DYNAMIC_RANGE_COMPRESSION: ::windows::Guid =
                ::windows::Guid::from_values(
                    1868869070,
                    33297,
                    4578,
                    [140, 112, 44, 39, 215, 240, 1, 250],
                );
            pub const AUDIO_EFFECT_TYPE_ENVIRONMENTAL_EFFECTS: ::windows::Guid =
                ::windows::Guid::from_values(
                    1868869067,
                    33297,
                    4578,
                    [140, 112, 44, 39, 215, 240, 1, 250],
                );
            pub const AUDIO_EFFECT_TYPE_EQUALIZER: ::windows::Guid = ::windows::Guid::from_values(
                1868869059,
                33297,
                4578,
                [140, 112, 44, 39, 215, 240, 1, 250],
            );
            pub const AUDIO_EFFECT_TYPE_LOUDNESS_EQUALIZER: ::windows::Guid =
                ::windows::Guid::from_values(
                    1868869060,
                    33297,
                    4578,
                    [140, 112, 44, 39, 215, 240, 1, 250],
                );
            pub const AUDIO_EFFECT_TYPE_NOISE_SUPPRESSION: ::windows::Guid =
                ::windows::Guid::from_values(
                    1868869055,
                    33297,
                    4578,
                    [140, 112, 44, 39, 215, 240, 1, 250],
                );
            pub const AUDIO_EFFECT_TYPE_ROOM_CORRECTION: ::windows::Guid =
                ::windows::Guid::from_values(
                    1868869065,
                    33297,
                    4578,
                    [140, 112, 44, 39, 215, 240, 1, 250],
                );
            pub const AUDIO_EFFECT_TYPE_SPEAKER_COMPENSATION: ::windows::Guid =
                ::windows::Guid::from_values(
                    1868869069,
                    33297,
                    4578,
                    [140, 112, 44, 39, 215, 240, 1, 250],
                );
            pub const AUDIO_EFFECT_TYPE_SPEAKER_FILL: ::windows::Guid =
                ::windows::Guid::from_values(
                    1868869064,
                    33297,
                    4578,
                    [140, 112, 44, 39, 215, 240, 1, 250],
                );
            pub const AUDIO_EFFECT_TYPE_SPEAKER_PROTECTION: ::windows::Guid =
                ::windows::Guid::from_values(
                    1868869068,
                    33297,
                    4578,
                    [140, 112, 44, 39, 215, 240, 1, 250],
                );
            pub const AUDIO_EFFECT_TYPE_VIRTUAL_HEADPHONES: ::windows::Guid =
                ::windows::Guid::from_values(
                    1868869063,
                    33297,
                    4578,
                    [140, 112, 44, 39, 215, 240, 1, 250],
                );
            pub const AUDIO_EFFECT_TYPE_VIRTUAL_SURROUND: ::windows::Guid =
                ::windows::Guid::from_values(
                    1868869062,
                    33297,
                    4578,
                    [140, 112, 44, 39, 215, 240, 1, 250],
                );
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct EndpointConnectorType(pub i32);
            impl EndpointConnectorType {
                pub const eHostProcessConnector: Self = Self(0i32);
                pub const eOffloadConnector: Self = Self(1i32);
                pub const eLoopbackConnector: Self = Self(2i32);
                pub const eKeywordDetectorConnector: Self = Self(3i32);
                pub const eConnectorCount: Self = Self(4i32);
            }
            impl ::std::convert::From<i32> for EndpointConnectorType {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for EndpointConnectorType {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct AUDIO_ENDPOINT_SHARED_CREATE_PARAMS {
                pub u32Size: u32,
                pub u32TSSessionId: u32,
                pub targetEndpointConnectorType: EndpointConnectorType,
                pub wfxDeviceFormat: super::Multimedia::WAVEFORMATEX,
            }
            impl AUDIO_ENDPOINT_SHARED_CREATE_PARAMS {}
            unsafe impl ::windows::Abi for AUDIO_ENDPOINT_SHARED_CREATE_PARAMS {
                type Abi = Self;
            }
            pub const AUDIO_SIGNALPROCESSINGMODE_COMMUNICATIONS: ::windows::Guid =
                ::windows::Guid::from_values(
                    2559906611,
                    47565,
                    18609,
                    [160, 163, 255, 64, 104, 45, 115, 247],
                );
            pub const AUDIO_SIGNALPROCESSINGMODE_DEFAULT: ::windows::Guid =
                ::windows::Guid::from_values(
                    3247320958,
                    37693,
                    18789,
                    [183, 209, 30, 239, 34, 141, 42, 243],
                );
            pub const AUDIO_SIGNALPROCESSINGMODE_MEDIA: ::windows::Guid =
                ::windows::Guid::from_values(
                    1199571022,
                    28979,
                    16856,
                    [140, 116, 102, 13, 173, 210, 192, 238],
                );
            pub const AUDIO_SIGNALPROCESSINGMODE_MOVIE: ::windows::Guid =
                ::windows::Guid::from_values(
                    2993679117,
                    60564,
                    18300,
                    [148, 148, 209, 171, 142, 117, 63, 110],
                );
            pub const AUDIO_SIGNALPROCESSINGMODE_NOTIFICATION: ::windows::Guid =
                ::windows::Guid::from_values(
                    2633148171,
                    62327,
                    16443,
                    [189, 107, 54, 8, 99, 224, 53, 92],
                );
            pub const AUDIO_SIGNALPROCESSINGMODE_RAW: ::windows::Guid =
                ::windows::Guid::from_values(
                    2660297248,
                    46227,
                    20433,
                    [161, 168, 126, 19, 97, 169, 86, 207],
                );
            pub const AUDIO_SIGNALPROCESSINGMODE_SPEECH: ::windows::Guid =
                ::windows::Guid::from_values(
                    4229758107,
                    47574,
                    19706,
                    [181, 224, 75, 178, 22, 104, 120, 178],
                );
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct AUDIO_STREAM_CATEGORY(pub i32);
            impl AUDIO_STREAM_CATEGORY {
                pub const AudioCategory_Other: Self = Self(0i32);
                pub const AudioCategory_ForegroundOnlyMedia: Self = Self(1i32);
                pub const AudioCategory_Communications: Self = Self(3i32);
                pub const AudioCategory_Alerts: Self = Self(4i32);
                pub const AudioCategory_SoundEffects: Self = Self(5i32);
                pub const AudioCategory_GameEffects: Self = Self(6i32);
                pub const AudioCategory_GameMedia: Self = Self(7i32);
                pub const AudioCategory_GameChat: Self = Self(8i32);
                pub const AudioCategory_Speech: Self = Self(9i32);
                pub const AudioCategory_Movie: Self = Self(10i32);
                pub const AudioCategory_Media: Self = Self(11i32);
            }
            impl ::std::convert::From<i32> for AUDIO_STREAM_CATEGORY {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for AUDIO_STREAM_CATEGORY {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct AUDIO_VOLUME_NOTIFICATION_DATA {
                pub guidEventContext: ::windows::Guid,
                pub bMuted: super::SystemServices::BOOL,
                pub fMasterVolume: f32,
                pub nChannels: u32,
                pub afChannelVolumes: [f32; 1],
            }
            impl AUDIO_VOLUME_NOTIFICATION_DATA {}
            impl ::std::default::Default for AUDIO_VOLUME_NOTIFICATION_DATA {
                fn default() -> Self {
                    Self {
                        guidEventContext: ::std::default::Default::default(),
                        bMuted: ::std::default::Default::default(),
                        fMasterVolume: 0.0,
                        nChannels: 0,
                        afChannelVolumes: [0.0; 1],
                    }
                }
            }
            impl ::std::fmt::Debug for AUDIO_VOLUME_NOTIFICATION_DATA {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("AUDIO_VOLUME_NOTIFICATION_DATA")
                        .field(
                            "guidEventContext",
                            &format_args!("{:?}", self.guidEventContext),
                        )
                        .field("bMuted", &format_args!("{:?}", self.bMuted))
                        .field("fMasterVolume", &format_args!("{:?}", self.fMasterVolume))
                        .field("nChannels", &format_args!("{:?}", self.nChannels))
                        .field(
                            "afChannelVolumes",
                            &format_args!("{:?}", self.afChannelVolumes),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for AUDIO_VOLUME_NOTIFICATION_DATA {
                fn eq(&self, other: &Self) -> bool {
                    self.guidEventContext == other.guidEventContext
                        && self.bMuted == other.bMuted
                        && self.fMasterVolume == other.fMasterVolume
                        && self.nChannels == other.nChannels
                        && self.afChannelVolumes == other.afChannelVolumes
                }
            }
            impl ::std::cmp::Eq for AUDIO_VOLUME_NOTIFICATION_DATA {}
            unsafe impl ::windows::Abi for AUDIO_VOLUME_NOTIFICATION_DATA {
                type Abi = Self;
            }
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IActivateAudioInterfaceCompletionHandler(::windows::IUnknown);
            impl IActivateAudioInterfaceCompletionHandler {}
            unsafe impl ::windows::Interface for IActivateAudioInterfaceCompletionHandler {
                type Vtable = IActivateAudioInterfaceCompletionHandler_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    1104759211,
                    39010,
                    17482,
                    [128, 246, 194, 97, 51, 77, 165, 235],
                );
            }
            impl IActivateAudioInterfaceCompletionHandler {
                pub unsafe fn ActivateCompleted<'a>(
                    &self,
                    activateoperation: impl ::windows::IntoParam<
                        'a,
                        IActivateAudioInterfaceAsyncOperation,
                    >,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        activateoperation.into_param().abi(),
                    )
                }
            }
            impl ::std::convert::From<IActivateAudioInterfaceCompletionHandler> for ::windows::IUnknown {
                fn from(value: IActivateAudioInterfaceCompletionHandler) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IActivateAudioInterfaceCompletionHandler> for ::windows::IUnknown {
                fn from(value: &IActivateAudioInterfaceCompletionHandler) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown>
                for IActivateAudioInterfaceCompletionHandler
            {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown>
                for &'a IActivateAudioInterfaceCompletionHandler
            {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IActivateAudioInterfaceCompletionHandler_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    activateoperation: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IActivateAudioInterfaceAsyncOperation(::windows::IUnknown);
            impl IActivateAudioInterfaceAsyncOperation {}
            unsafe impl ::windows::Interface for IActivateAudioInterfaceAsyncOperation {
                type Vtable = IActivateAudioInterfaceAsyncOperation_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    1923231096,
                    52708,
                    17181,
                    [184, 204, 132, 58, 113, 25, 155, 109],
                );
            }
            impl IActivateAudioInterfaceAsyncOperation {
                pub unsafe fn GetActivateResult(
                    &self,
                    activateresult: *mut ::windows::HRESULT,
                    activatedinterface: *mut ::std::option::Option<::windows::IUnknown>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(activateresult),
                        ::std::mem::transmute(activatedinterface),
                    )
                }
            }
            impl ::std::convert::From<IActivateAudioInterfaceAsyncOperation> for ::windows::IUnknown {
                fn from(value: IActivateAudioInterfaceAsyncOperation) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IActivateAudioInterfaceAsyncOperation> for ::windows::IUnknown {
                fn from(value: &IActivateAudioInterfaceAsyncOperation) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IActivateAudioInterfaceAsyncOperation {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown>
                for &'a IActivateAudioInterfaceAsyncOperation
            {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IActivateAudioInterfaceAsyncOperation_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    activateresult: *mut ::windows::HRESULT,
                    activatedinterface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
            );
            pub unsafe fn ActivateAudioInterfaceAsync<'a>(
                deviceinterfacepath: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                riid: *const ::windows::Guid,
                activationparams: *mut super::StructuredStorage::PROPVARIANT,
                completionhandler: impl ::windows::IntoParam<
                    'a,
                    IActivateAudioInterfaceCompletionHandler,
                >,
                activationoperation: *mut ::std::option::Option<
                    IActivateAudioInterfaceAsyncOperation,
                >,
            ) -> ::windows::HRESULT {
                panic!("Unsupported target OS");
            }
            pub struct Apis {}
            impl Apis {}
            impl ::windows::RuntimeName for Apis {
                const NAME: &'static str = "Windows.Win32.CoreAudio.Apis";
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct AudioClient3ActivationParams {
                pub tracingContextId: ::windows::Guid,
            }
            impl AudioClient3ActivationParams {}
            impl ::std::default::Default for AudioClient3ActivationParams {
                fn default() -> Self {
                    Self {
                        tracingContextId: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for AudioClient3ActivationParams {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("AudioClient3ActivationParams")
                        .field(
                            "tracingContextId",
                            &format_args!("{:?}", self.tracingContextId),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for AudioClient3ActivationParams {
                fn eq(&self, other: &Self) -> bool {
                    self.tracingContextId == other.tracingContextId
                }
            }
            impl ::std::cmp::Eq for AudioClient3ActivationParams {}
            unsafe impl ::windows::Abi for AudioClient3ActivationParams {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct AudioClientProperties {
                pub cbSize: u32,
                pub bIsOffload: super::SystemServices::BOOL,
                pub eCategory: AUDIO_STREAM_CATEGORY,
                pub Options: AUDCLNT_STREAMOPTIONS,
            }
            impl AudioClientProperties {}
            impl ::std::default::Default for AudioClientProperties {
                fn default() -> Self {
                    Self {
                        cbSize: 0,
                        bIsOffload: ::std::default::Default::default(),
                        eCategory: ::std::default::Default::default(),
                        Options: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for AudioClientProperties {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("AudioClientProperties")
                        .field("cbSize", &format_args!("{:?}", self.cbSize))
                        .field("bIsOffload", &format_args!("{:?}", self.bIsOffload))
                        .field("eCategory", &format_args!("{:?}", self.eCategory))
                        .field("Options", &format_args!("{:?}", self.Options))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for AudioClientProperties {
                fn eq(&self, other: &Self) -> bool {
                    self.cbSize == other.cbSize
                        && self.bIsOffload == other.bIsOffload
                        && self.eCategory == other.eCategory
                        && self.Options == other.Options
                }
            }
            impl ::std::cmp::Eq for AudioClientProperties {}
            unsafe impl ::windows::Abi for AudioClientProperties {
                type Abi = Self;
            }
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IMMDevice(::windows::IUnknown);
            impl IMMDevice {}
            unsafe impl ::windows::Interface for IMMDevice {
                type Vtable = IMMDevice_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3597010495,
                    5511,
                    20035,
                    [129, 241, 185, 72, 232, 7, 54, 63],
                );
            }
            impl IMMDevice {
                pub unsafe fn Activate(
                    &self,
                    iid: *const ::windows::Guid,
                    dwclsctx: u32,
                    pactivationparams: *mut super::StructuredStorage::PROPVARIANT,
                    ppinterface: *mut *mut ::std::ffi::c_void,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(iid),
                        ::std::mem::transmute(dwclsctx),
                        ::std::mem::transmute(pactivationparams),
                        ::std::mem::transmute(ppinterface),
                    )
                }
                pub unsafe fn OpenPropertyStore(
                    &self,
                    stgmaccess: u32,
                    ppproperties: *mut ::std::option::Option<super::Audio::IPropertyStore>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(stgmaccess),
                        ::std::mem::transmute(ppproperties),
                    )
                }
                pub unsafe fn GetId(
                    &self,
                    ppstrid: *mut super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(ppstrid),
                    )
                }
                pub unsafe fn GetState(&self, pdwstate: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwstate),
                    )
                }
            }
            impl ::std::convert::From<IMMDevice> for ::windows::IUnknown {
                fn from(value: IMMDevice) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IMMDevice> for ::windows::IUnknown {
                fn from(value: &IMMDevice) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IMMDevice {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IMMDevice {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IMMDevice_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: *const ::windows::Guid,
                    dwclsctx: u32,
                    pactivationparams: *mut super::StructuredStorage::PROPVARIANT_abi,
                    ppinterface: *mut *mut ::std::ffi::c_void,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    stgmaccess: u32,
                    ppproperties: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    ppstrid: *mut super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwstate: *mut u32,
                ) -> ::windows::HRESULT,
            );
            #[repr(C)]
            #[derive(:: std :: clone :: Clone)]
            pub struct AudioExtensionParams {
                pub AddPageParam: super::WindowsAndMessaging::LPARAM,
                pub pEndpoint: ::std::option::Option<IMMDevice>,
                pub pPnpInterface: ::std::option::Option<IMMDevice>,
                pub pPnpDevnode: ::std::option::Option<IMMDevice>,
            }
            impl AudioExtensionParams {}
            impl ::std::default::Default for AudioExtensionParams {
                fn default() -> Self {
                    Self {
                        AddPageParam: ::std::default::Default::default(),
                        pEndpoint: ::std::default::Default::default(),
                        pPnpInterface: ::std::default::Default::default(),
                        pPnpDevnode: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for AudioExtensionParams {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("AudioExtensionParams")
                        .field("AddPageParam", &format_args!("{:?}", self.AddPageParam))
                        .field("pEndpoint", &format_args!("{:?}", self.pEndpoint))
                        .field("pPnpInterface", &format_args!("{:?}", self.pPnpInterface))
                        .field("pPnpDevnode", &format_args!("{:?}", self.pPnpDevnode))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for AudioExtensionParams {
                fn eq(&self, other: &Self) -> bool {
                    self.AddPageParam == other.AddPageParam
                        && self.pEndpoint == other.pEndpoint
                        && self.pPnpInterface == other.pPnpInterface
                        && self.pPnpDevnode == other.pPnpDevnode
                }
            }
            impl ::std::cmp::Eq for AudioExtensionParams {}
            #[repr(C)]
            #[doc(hidden)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct AudioExtensionParams_abi {
                pub AddPageParam: super::WindowsAndMessaging::LPARAM,
                pub pEndpoint: ::windows::RawPtr,
                pub pPnpInterface: ::windows::RawPtr,
                pub pPnpDevnode: ::windows::RawPtr,
            }
            unsafe impl ::windows::Abi for AudioExtensionParams {
                type Abi = AudioExtensionParams_abi;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct AudioObjectType(pub u32);
            impl AudioObjectType {
                pub const AudioObjectType_None: Self = Self(0u32);
                pub const AudioObjectType_Dynamic: Self = Self(1u32);
                pub const AudioObjectType_FrontLeft: Self = Self(2u32);
                pub const AudioObjectType_FrontRight: Self = Self(4u32);
                pub const AudioObjectType_FrontCenter: Self = Self(8u32);
                pub const AudioObjectType_LowFrequency: Self = Self(16u32);
                pub const AudioObjectType_SideLeft: Self = Self(32u32);
                pub const AudioObjectType_SideRight: Self = Self(64u32);
                pub const AudioObjectType_BackLeft: Self = Self(128u32);
                pub const AudioObjectType_BackRight: Self = Self(256u32);
                pub const AudioObjectType_TopFrontLeft: Self = Self(512u32);
                pub const AudioObjectType_TopFrontRight: Self = Self(1024u32);
                pub const AudioObjectType_TopBackLeft: Self = Self(2048u32);
                pub const AudioObjectType_TopBackRight: Self = Self(4096u32);
                pub const AudioObjectType_BottomFrontLeft: Self = Self(8192u32);
                pub const AudioObjectType_BottomFrontRight: Self = Self(16384u32);
                pub const AudioObjectType_BottomBackLeft: Self = Self(32768u32);
                pub const AudioObjectType_BottomBackRight: Self = Self(65536u32);
                pub const AudioObjectType_BackCenter: Self = Self(131072u32);
            }
            impl ::std::convert::From<u32> for AudioObjectType {
                fn from(value: u32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for AudioObjectType {
                type Abi = Self;
            }
            impl ::std::ops::BitOr for AudioObjectType {
                type Output = Self;
                fn bitor(self, rhs: Self) -> Self {
                    Self(self.0 | rhs.0)
                }
            }
            impl ::std::ops::BitAnd for AudioObjectType {
                type Output = Self;
                fn bitand(self, rhs: Self) -> Self {
                    Self(self.0 & rhs.0)
                }
            }
            impl ::std::ops::BitOrAssign for AudioObjectType {
                fn bitor_assign(&mut self, rhs: Self) {
                    self.0.bitor_assign(rhs.0)
                }
            }
            impl ::std::ops::BitAndAssign for AudioObjectType {
                fn bitand_assign(&mut self, rhs: Self) {
                    self.0.bitand_assign(rhs.0)
                }
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct AudioSessionDisconnectReason(pub i32);
            impl AudioSessionDisconnectReason {
                pub const DisconnectReasonDeviceRemoval: Self = Self(0i32);
                pub const DisconnectReasonServerShutdown: Self = Self(1i32);
                pub const DisconnectReasonFormatChanged: Self = Self(2i32);
                pub const DisconnectReasonSessionLogoff: Self = Self(3i32);
                pub const DisconnectReasonSessionDisconnected: Self = Self(4i32);
                pub const DisconnectReasonExclusiveModeOverride: Self = Self(5i32);
            }
            impl ::std::convert::From<i32> for AudioSessionDisconnectReason {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for AudioSessionDisconnectReason {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct AudioSessionState(pub i32);
            impl AudioSessionState {
                pub const AudioSessionStateInactive: Self = Self(0i32);
                pub const AudioSessionStateActive: Self = Self(1i32);
                pub const AudioSessionStateExpired: Self = Self(2i32);
            }
            impl ::std::convert::From<i32> for AudioSessionState {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for AudioSessionState {
                type Abi = Self;
            }
            pub const BLUETOOTHLE_MIDI_SERVICE_UUID: ::windows::Guid = ::windows::Guid::from_values(
                62393946,
                60904,
                19251,
                [167, 81, 108, 227, 78, 196, 199, 0],
            );
            pub const BLUETOOTH_MIDI_DATAIO_CHARACTERISTIC: ::windows::Guid =
                ::windows::Guid::from_values(
                    2004018651,
                    14440,
                    16658,
                    [161, 169, 242, 102, 157, 16, 107, 243],
                );
            pub const BUS_INTERFACE_REFERENCE_VERSION: u32 = 256u32;
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct CAPTURE_MEMORY_ALLOCATION_FLAGS(pub i32);
            impl CAPTURE_MEMORY_ALLOCATION_FLAGS {
                pub const KS_CAPTURE_ALLOC_INVALID: Self = Self(0i32);
                pub const KS_CAPTURE_ALLOC_SYSTEM: Self = Self(1i32);
                pub const KS_CAPTURE_ALLOC_VRAM: Self = Self(2i32);
                pub const KS_CAPTURE_ALLOC_SYSTEM_AGP: Self = Self(4i32);
                pub const KS_CAPTURE_ALLOC_VRAM_MAPPED: Self = Self(8i32);
                pub const KS_CAPTURE_ALLOC_SECURE_BUFFER: Self = Self(16i32);
            }
            impl ::std::convert::From<i32> for CAPTURE_MEMORY_ALLOCATION_FLAGS {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for CAPTURE_MEMORY_ALLOCATION_FLAGS {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct CC_BYTE_PAIR {
                pub Decoded: [u8; 2],
                pub Reserved: u16,
            }
            impl CC_BYTE_PAIR {}
            impl ::std::default::Default for CC_BYTE_PAIR {
                fn default() -> Self {
                    Self {
                        Decoded: [0; 2],
                        Reserved: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for CC_BYTE_PAIR {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("CC_BYTE_PAIR")
                        .field("Decoded", &format_args!("{:?}", self.Decoded))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for CC_BYTE_PAIR {
                fn eq(&self, other: &Self) -> bool {
                    self.Decoded == other.Decoded && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for CC_BYTE_PAIR {}
            unsafe impl ::windows::Abi for CC_BYTE_PAIR {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct VBICODECFILTERING_SCANLINES {
                pub DwordBitArray: [u32; 32],
            }
            impl VBICODECFILTERING_SCANLINES {}
            impl ::std::default::Default for VBICODECFILTERING_SCANLINES {
                fn default() -> Self {
                    Self {
                        DwordBitArray: [0; 32],
                    }
                }
            }
            impl ::std::fmt::Debug for VBICODECFILTERING_SCANLINES {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("VBICODECFILTERING_SCANLINES")
                        .field("DwordBitArray", &format_args!("{:?}", self.DwordBitArray))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for VBICODECFILTERING_SCANLINES {
                fn eq(&self, other: &Self) -> bool {
                    self.DwordBitArray == other.DwordBitArray
                }
            }
            impl ::std::cmp::Eq for VBICODECFILTERING_SCANLINES {}
            unsafe impl ::windows::Abi for VBICODECFILTERING_SCANLINES {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct CC_HW_FIELD {
                pub ScanlinesRequested: VBICODECFILTERING_SCANLINES,
                pub fieldFlags: u32,
                pub PictureNumber: i64,
                pub Lines: [CC_BYTE_PAIR; 12],
            }
            impl CC_HW_FIELD {}
            impl ::std::default::Default for CC_HW_FIELD {
                fn default() -> Self {
                    Self {
                        ScanlinesRequested: ::std::default::Default::default(),
                        fieldFlags: 0,
                        PictureNumber: 0,
                        Lines: [::std::default::Default::default(); 12],
                    }
                }
            }
            impl ::std::fmt::Debug for CC_HW_FIELD {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("CC_HW_FIELD")
                        .field(
                            "ScanlinesRequested",
                            &format_args!("{:?}", self.ScanlinesRequested),
                        )
                        .field("fieldFlags", &format_args!("{:?}", self.fieldFlags))
                        .field("PictureNumber", &format_args!("{:?}", self.PictureNumber))
                        .field("Lines", &format_args!("{:?}", self.Lines))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for CC_HW_FIELD {
                fn eq(&self, other: &Self) -> bool {
                    self.ScanlinesRequested == other.ScanlinesRequested
                        && self.fieldFlags == other.fieldFlags
                        && self.PictureNumber == other.PictureNumber
                        && self.Lines == other.Lines
                }
            }
            impl ::std::cmp::Eq for CC_HW_FIELD {}
            unsafe impl ::windows::Abi for CC_HW_FIELD {
                type Abi = Self;
            }
            pub const CC_MAX_HW_DECODE_LINES: u32 = 12u32;
            pub const CLSID_KsIBasicAudioInterfaceHandler: ::windows::Guid =
                ::windows::Guid::from_values(
                    3120081982,
                    3953,
                    4562,
                    [183, 44, 0, 192, 79, 182, 189, 61],
                );
            pub const CODECAPI_ALLSETTINGS: ::windows::Guid = ::windows::Guid::from_values(
                1784118930,
                33761,
                16659,
                [173, 194, 79, 206, 195, 47, 131, 161],
            );
            pub const CODECAPI_AUDIO_ENCODER: ::windows::Guid = ::windows::Guid::from_values(
                3117521470,
                63639,
                17052,
                [188, 70, 129, 56, 183, 39, 43, 45],
            );
            pub const CODECAPI_CHANGELISTS: ::windows::Guid = ::windows::Guid::from_values(
                1655777999,
                63152,
                18393,
                [148, 86, 150, 242, 44, 78, 11, 157],
            );
            pub const CODECAPI_CURRENTCHANGELIST: ::windows::Guid = ::windows::Guid::from_values(
                481382019,
                32114,
                18007,
                [131, 253, 71, 162, 197, 185, 209, 61],
            );
            pub const CODECAPI_SETALLDEFAULTS: ::windows::Guid = ::windows::Guid::from_values(
                1818126972,
                44280,
                20309,
                [169, 153, 26, 98, 129, 9, 5, 27],
            );
            pub const CODECAPI_SUPPORTSEVENTS: ::windows::Guid = ::windows::Guid::from_values(
                92385175,
                30355,
                19901,
                [157, 202, 63, 158, 189, 101, 133, 161],
            );
            pub const CODECAPI_VIDEO_ENCODER: ::windows::Guid = ::windows::Guid::from_values(
                1897064673,
                15619,
                18415,
                [142, 96, 3, 241, 207, 83, 115, 1],
            );
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct CONSTRICTOR_OPTION(pub i32);
            impl CONSTRICTOR_OPTION {
                pub const CONSTRICTOR_OPTION_DISABLE: Self = Self(0i32);
                pub const CONSTRICTOR_OPTION_MUTE: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for CONSTRICTOR_OPTION {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for CONSTRICTOR_OPTION {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct ConnectorType(pub i32);
            impl ConnectorType {
                pub const Unknown_Connector: Self = Self(0i32);
                pub const Physical_Internal: Self = Self(1i32);
                pub const Physical_External: Self = Self(2i32);
                pub const Software_IO: Self = Self(3i32);
                pub const Software_Fixed: Self = Self(4i32);
                pub const Network: Self = Self(5i32);
            }
            impl ::std::convert::From<i32> for ConnectorType {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for ConnectorType {
                type Abi = Self;
            }
            pub const DDPF_FOURCC: i32 = 4i32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DDVIDEOPORTCONNECT {
                pub dwSize: u32,
                pub dwPortWidth: u32,
                pub guidTypeID: ::windows::Guid,
                pub dwFlags: u32,
                pub dwReserved1: usize,
            }
            impl DDVIDEOPORTCONNECT {}
            impl ::std::default::Default for DDVIDEOPORTCONNECT {
                fn default() -> Self {
                    Self {
                        dwSize: 0,
                        dwPortWidth: 0,
                        guidTypeID: ::std::default::Default::default(),
                        dwFlags: 0,
                        dwReserved1: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DDVIDEOPORTCONNECT {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DDVIDEOPORTCONNECT")
                        .field("dwSize", &format_args!("{:?}", self.dwSize))
                        .field("dwPortWidth", &format_args!("{:?}", self.dwPortWidth))
                        .field("guidTypeID", &format_args!("{:?}", self.guidTypeID))
                        .field("dwFlags", &format_args!("{:?}", self.dwFlags))
                        .field("dwReserved1", &format_args!("{:?}", self.dwReserved1))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DDVIDEOPORTCONNECT {
                fn eq(&self, other: &Self) -> bool {
                    self.dwSize == other.dwSize
                        && self.dwPortWidth == other.dwPortWidth
                        && self.guidTypeID == other.guidTypeID
                        && self.dwFlags == other.dwFlags
                        && self.dwReserved1 == other.dwReserved1
                }
            }
            impl ::std::cmp::Eq for DDVIDEOPORTCONNECT {}
            unsafe impl ::windows::Abi for DDVIDEOPORTCONNECT {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DEVCAPS {
                pub CanRecord: i32,
                pub CanRecordStrobe: i32,
                pub HasAudio: i32,
                pub HasVideo: i32,
                pub UsesFiles: i32,
                pub CanSave: i32,
                pub DeviceType: i32,
                pub TCRead: i32,
                pub TCWrite: i32,
                pub CTLRead: i32,
                pub IndexRead: i32,
                pub Preroll: i32,
                pub Postroll: i32,
                pub SyncAcc: i32,
                pub NormRate: i32,
                pub CanPreview: i32,
                pub CanMonitorSrc: i32,
                pub CanTest: i32,
                pub VideoIn: i32,
                pub AudioIn: i32,
                pub Calibrate: i32,
                pub SeekType: i32,
                pub SimulatedHardware: i32,
            }
            impl DEVCAPS {}
            impl ::std::default::Default for DEVCAPS {
                fn default() -> Self {
                    Self {
                        CanRecord: 0,
                        CanRecordStrobe: 0,
                        HasAudio: 0,
                        HasVideo: 0,
                        UsesFiles: 0,
                        CanSave: 0,
                        DeviceType: 0,
                        TCRead: 0,
                        TCWrite: 0,
                        CTLRead: 0,
                        IndexRead: 0,
                        Preroll: 0,
                        Postroll: 0,
                        SyncAcc: 0,
                        NormRate: 0,
                        CanPreview: 0,
                        CanMonitorSrc: 0,
                        CanTest: 0,
                        VideoIn: 0,
                        AudioIn: 0,
                        Calibrate: 0,
                        SeekType: 0,
                        SimulatedHardware: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DEVCAPS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DEVCAPS")
                        .field("CanRecord", &format_args!("{:?}", self.CanRecord))
                        .field(
                            "CanRecordStrobe",
                            &format_args!("{:?}", self.CanRecordStrobe),
                        )
                        .field("HasAudio", &format_args!("{:?}", self.HasAudio))
                        .field("HasVideo", &format_args!("{:?}", self.HasVideo))
                        .field("UsesFiles", &format_args!("{:?}", self.UsesFiles))
                        .field("CanSave", &format_args!("{:?}", self.CanSave))
                        .field("DeviceType", &format_args!("{:?}", self.DeviceType))
                        .field("TCRead", &format_args!("{:?}", self.TCRead))
                        .field("TCWrite", &format_args!("{:?}", self.TCWrite))
                        .field("CTLRead", &format_args!("{:?}", self.CTLRead))
                        .field("IndexRead", &format_args!("{:?}", self.IndexRead))
                        .field("Preroll", &format_args!("{:?}", self.Preroll))
                        .field("Postroll", &format_args!("{:?}", self.Postroll))
                        .field("SyncAcc", &format_args!("{:?}", self.SyncAcc))
                        .field("NormRate", &format_args!("{:?}", self.NormRate))
                        .field("CanPreview", &format_args!("{:?}", self.CanPreview))
                        .field("CanMonitorSrc", &format_args!("{:?}", self.CanMonitorSrc))
                        .field("CanTest", &format_args!("{:?}", self.CanTest))
                        .field("VideoIn", &format_args!("{:?}", self.VideoIn))
                        .field("AudioIn", &format_args!("{:?}", self.AudioIn))
                        .field("Calibrate", &format_args!("{:?}", self.Calibrate))
                        .field("SeekType", &format_args!("{:?}", self.SeekType))
                        .field(
                            "SimulatedHardware",
                            &format_args!("{:?}", self.SimulatedHardware),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DEVCAPS {
                fn eq(&self, other: &Self) -> bool {
                    self.CanRecord == other.CanRecord
                        && self.CanRecordStrobe == other.CanRecordStrobe
                        && self.HasAudio == other.HasAudio
                        && self.HasVideo == other.HasVideo
                        && self.UsesFiles == other.UsesFiles
                        && self.CanSave == other.CanSave
                        && self.DeviceType == other.DeviceType
                        && self.TCRead == other.TCRead
                        && self.TCWrite == other.TCWrite
                        && self.CTLRead == other.CTLRead
                        && self.IndexRead == other.IndexRead
                        && self.Preroll == other.Preroll
                        && self.Postroll == other.Postroll
                        && self.SyncAcc == other.SyncAcc
                        && self.NormRate == other.NormRate
                        && self.CanPreview == other.CanPreview
                        && self.CanMonitorSrc == other.CanMonitorSrc
                        && self.CanTest == other.CanTest
                        && self.VideoIn == other.VideoIn
                        && self.AudioIn == other.AudioIn
                        && self.Calibrate == other.Calibrate
                        && self.SeekType == other.SeekType
                        && self.SimulatedHardware == other.SimulatedHardware
                }
            }
            impl ::std::cmp::Eq for DEVCAPS {}
            unsafe impl ::windows::Abi for DEVCAPS {
                type Abi = Self;
            }
            pub const DEVICE_STATEMASK_ALL: u32 = 15u32;
            pub const DEVICE_STATE_ACTIVE: u32 = 1u32;
            pub const DEVICE_STATE_DISABLED: u32 = 2u32;
            pub const DEVICE_STATE_NOTPRESENT: u32 = 4u32;
            pub const DEVICE_STATE_UNPLUGGED: u32 = 8u32;
            pub const DEVINTERFACE_AUDIOENDPOINTPLUGIN: ::windows::Guid =
                ::windows::Guid::from_values(
                    2670689126,
                    26028,
                    20390,
                    [138, 228, 18, 60, 120, 184, 147, 19],
                );
            pub const DEVINTERFACE_AUDIO_CAPTURE: ::windows::Guid = ::windows::Guid::from_values(
                787448254,
                13306,
                18432,
                [150, 112, 28, 212, 116, 151, 44, 63],
            );
            pub const DEVINTERFACE_AUDIO_RENDER: ::windows::Guid = ::windows::Guid::from_values(
                3862068397,
                56556,
                18761,
                [174, 138, 153, 30, 151, 106, 121, 210],
            );
            pub const DEVINTERFACE_MIDI_INPUT: ::windows::Guid = ::windows::Guid::from_values(
                1347150636,
                52470,
                19756,
                [183, 63, 111, 139, 55, 71, 226, 43],
            );
            pub const DEVINTERFACE_MIDI_OUTPUT: ::windows::Guid = ::windows::Guid::from_values(
                1841443616,
                43827,
                19684,
                [128, 212, 187, 179, 235, 191, 40, 20],
            );
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DIRECTX_AUDIO_ACTIVATION_PARAMS {
                pub cbDirectXAudioActivationParams: u32,
                pub guidAudioSession: ::windows::Guid,
                pub dwAudioStreamFlags: u32,
            }
            impl DIRECTX_AUDIO_ACTIVATION_PARAMS {}
            impl ::std::default::Default for DIRECTX_AUDIO_ACTIVATION_PARAMS {
                fn default() -> Self {
                    Self {
                        cbDirectXAudioActivationParams: 0,
                        guidAudioSession: ::std::default::Default::default(),
                        dwAudioStreamFlags: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for DIRECTX_AUDIO_ACTIVATION_PARAMS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("DIRECTX_AUDIO_ACTIVATION_PARAMS")
                        .field(
                            "cbDirectXAudioActivationParams",
                            &format_args!("{:?}", self.cbDirectXAudioActivationParams),
                        )
                        .field(
                            "guidAudioSession",
                            &format_args!("{:?}", self.guidAudioSession),
                        )
                        .field(
                            "dwAudioStreamFlags",
                            &format_args!("{:?}", self.dwAudioStreamFlags),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DIRECTX_AUDIO_ACTIVATION_PARAMS {
                fn eq(&self, other: &Self) -> bool {
                    self.cbDirectXAudioActivationParams == other.cbDirectXAudioActivationParams
                        && self.guidAudioSession == other.guidAudioSession
                        && self.dwAudioStreamFlags == other.dwAudioStreamFlags
                }
            }
            impl ::std::cmp::Eq for DIRECTX_AUDIO_ACTIVATION_PARAMS {}
            unsafe impl ::windows::Abi for DIRECTX_AUDIO_ACTIVATION_PARAMS {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DS3DVECTOR {
                pub Anonymous1: DS3DVECTOR_0,
                pub Anonymous2: DS3DVECTOR_1,
                pub Anonymous3: DS3DVECTOR_2,
            }
            impl DS3DVECTOR {}
            unsafe impl ::windows::Abi for DS3DVECTOR {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union DS3DVECTOR_0 {
                pub x: f32,
                pub dvX: f32,
            }
            impl DS3DVECTOR_0 {}
            unsafe impl ::windows::Abi for DS3DVECTOR_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union DS3DVECTOR_1 {
                pub y: f32,
                pub dvY: f32,
            }
            impl DS3DVECTOR_1 {}
            unsafe impl ::windows::Abi for DS3DVECTOR_1 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union DS3DVECTOR_2 {
                pub z: f32,
                pub dvZ: f32,
            }
            impl DS3DVECTOR_2 {}
            unsafe impl ::windows::Abi for DS3DVECTOR_2 {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct DataFlow(pub i32);
            impl DataFlow {
                pub const In: Self = Self(0i32);
                pub const Out: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for DataFlow {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for DataFlow {
                type Abi = Self;
            }
            pub const DeviceTopology: ::windows::Guid = ::windows::Guid::from_values(
                502675920,
                24257,
                18346,
                [147, 121, 130, 141, 193, 170, 140, 89],
            );
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct EDataFlow(pub i32);
            impl EDataFlow {
                pub const eRender: Self = Self(0i32);
                pub const eCapture: Self = Self(1i32);
                pub const eAll: Self = Self(2i32);
                pub const EDataFlow_enum_count: Self = Self(3i32);
            }
            impl ::std::convert::From<i32> for EDataFlow {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for EDataFlow {
                type Abi = Self;
            }
            pub const ENCAPIPARAM_BITRATE: ::windows::Guid = ::windows::Guid::from_values(
                1238125635,
                51843,
                19156,
                [169, 175, 243, 105, 106, 246, 102, 223],
            );
            pub const ENCAPIPARAM_BITRATE_MODE: ::windows::Guid = ::windows::Guid::from_values(
                3999248988,
                50963,
                16593,
                [157, 88, 192, 215, 36, 30, 37, 15],
            );
            pub const ENCAPIPARAM_PEAK_BITRATE: ::windows::Guid = ::windows::Guid::from_values(
                1883182761,
                15688,
                17569,
                [176, 119, 1, 141, 255, 145, 93, 25],
            );
            pub const ENDPOINT_FORMAT_RESET_MIX_ONLY: u32 = 1u32;
            pub const ENDPOINT_HARDWARE_SUPPORT_METER: u32 = 4u32;
            pub const ENDPOINT_HARDWARE_SUPPORT_MUTE: u32 = 2u32;
            pub const ENDPOINT_HARDWARE_SUPPORT_VOLUME: u32 = 1u32;
            pub const ENDPOINT_SYSFX_DISABLED: u32 = 1u32;
            pub const ENDPOINT_SYSFX_ENABLED: u32 = 0u32;
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct EPcxConnectionType(pub i32);
            impl EPcxConnectionType {
                pub const eConnTypeUnknown: Self = Self(0i32);
                pub const eConnType3Point5mm: Self = Self(1i32);
                pub const eConnTypeQuarter: Self = Self(2i32);
                pub const eConnTypeAtapiInternal: Self = Self(3i32);
                pub const eConnTypeRCA: Self = Self(4i32);
                pub const eConnTypeOptical: Self = Self(5i32);
                pub const eConnTypeOtherDigital: Self = Self(6i32);
                pub const eConnTypeOtherAnalog: Self = Self(7i32);
                pub const eConnTypeMultichannelAnalogDIN: Self = Self(8i32);
                pub const eConnTypeXlrProfessional: Self = Self(9i32);
                pub const eConnTypeRJ11Modem: Self = Self(10i32);
                pub const eConnTypeCombination: Self = Self(11i32);
            }
            impl ::std::convert::From<i32> for EPcxConnectionType {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for EPcxConnectionType {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct EPcxGenLocation(pub i32);
            impl EPcxGenLocation {
                pub const eGenLocPrimaryBox: Self = Self(0i32);
                pub const eGenLocInternal: Self = Self(1i32);
                pub const eGenLocSeparate: Self = Self(2i32);
                pub const eGenLocOther: Self = Self(3i32);
                pub const EPcxGenLocation_enum_count: Self = Self(4i32);
            }
            impl ::std::convert::From<i32> for EPcxGenLocation {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for EPcxGenLocation {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct EPcxGeoLocation(pub i32);
            impl EPcxGeoLocation {
                pub const eGeoLocRear: Self = Self(1i32);
                pub const eGeoLocFront: Self = Self(2i32);
                pub const eGeoLocLeft: Self = Self(3i32);
                pub const eGeoLocRight: Self = Self(4i32);
                pub const eGeoLocTop: Self = Self(5i32);
                pub const eGeoLocBottom: Self = Self(6i32);
                pub const eGeoLocRearPanel: Self = Self(7i32);
                pub const eGeoLocRiser: Self = Self(8i32);
                pub const eGeoLocInsideMobileLid: Self = Self(9i32);
                pub const eGeoLocDrivebay: Self = Self(10i32);
                pub const eGeoLocHDMI: Self = Self(11i32);
                pub const eGeoLocOutsideMobileLid: Self = Self(12i32);
                pub const eGeoLocATAPI: Self = Self(13i32);
                pub const eGeoLocNotApplicable: Self = Self(14i32);
                pub const eGeoLocReserved6: Self = Self(15i32);
                pub const EPcxGeoLocation_enum_count: Self = Self(16i32);
            }
            impl ::std::convert::From<i32> for EPcxGeoLocation {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for EPcxGeoLocation {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct EPxcPortConnection(pub i32);
            impl EPxcPortConnection {
                pub const ePortConnJack: Self = Self(0i32);
                pub const ePortConnIntegratedDevice: Self = Self(1i32);
                pub const ePortConnBothIntegratedAndJack: Self = Self(2i32);
                pub const ePortConnUnknown: Self = Self(3i32);
            }
            impl ::std::convert::From<i32> for EPxcPortConnection {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for EPxcPortConnection {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct ERole(pub i32);
            impl ERole {
                pub const eConsole: Self = Self(0i32);
                pub const eMultimedia: Self = Self(1i32);
                pub const eCommunications: Self = Self(2i32);
                pub const ERole_enum_count: Self = Self(3i32);
            }
            impl ::std::convert::From<i32> for ERole {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for ERole {
                type Abi = Self;
            }
            pub const EVENTCONTEXT_VOLUMESLIDER: ::windows::Guid = ::windows::Guid::from_values(
                3804424670,
                2481,
                19204,
                [132, 229, 7, 147, 18, 37, 238, 4],
            );
            pub const EVENTSETID_CROSSBAR: ::windows::Guid = ::windows::Guid::from_values(
                1781401153,
                10468,
                4560,
                [161, 140, 0, 160, 201, 17, 137, 86],
            );
            pub const EVENTSETID_TUNER: ::windows::Guid = ::windows::Guid::from_values(
                1781401094,
                10468,
                4560,
                [161, 140, 0, 160, 201, 17, 137, 86],
            );
            pub const EVENTSETID_VIDCAP_CAMERACONTROL_REGION_OF_INTEREST: ::windows::Guid =
                ::windows::Guid::from_values(
                    803208285,
                    50994,
                    19366,
                    [181, 223, 107, 77, 127, 200, 139, 139],
                );
            pub const EVENTSETID_VIDEODECODER: ::windows::Guid = ::windows::Guid::from_values(
                1781401121,
                10468,
                4560,
                [161, 140, 0, 160, 201, 17, 137, 86],
            );
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct EndpointFormFactor(pub i32);
            impl EndpointFormFactor {
                pub const RemoteNetworkDevice: Self = Self(0i32);
                pub const Speakers: Self = Self(1i32);
                pub const LineLevel: Self = Self(2i32);
                pub const Headphones: Self = Self(3i32);
                pub const Microphone: Self = Self(4i32);
                pub const Headset: Self = Self(5i32);
                pub const Handset: Self = Self(6i32);
                pub const UnknownDigitalPassthrough: Self = Self(7i32);
                pub const SPDIF: Self = Self(8i32);
                pub const DigitalAudioDisplayDevice: Self = Self(9i32);
                pub const UnknownFormFactor: Self = Self(10i32);
                pub const EndpointFormFactor_enum_count: Self = Self(11i32);
            }
            impl ::std::convert::From<i32> for EndpointFormFactor {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for EndpointFormFactor {
                type Abi = Self;
            }
            pub const GUID_NULL: ::windows::Guid =
                ::windows::Guid::from_values(0, 0, 0, [0, 0, 0, 0, 0, 0, 0, 0]);
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct HTASK(pub isize);
            impl HTASK {}
            impl HTASK {
                pub const NULL: Self = Self(0);
                pub fn is_null(&self) -> bool {
                    self == &Self::NULL
                }
            }
            impl ::std::default::Default for HTASK {
                fn default() -> Self {
                    Self(0)
                }
            }
            impl ::std::fmt::Debug for HTASK {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("HTASK")
                        .field("Value", &format_args!("{:?}", self.0))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for HTASK {
                fn eq(&self, other: &Self) -> bool {
                    self.0 == other.0
                }
            }
            impl ::std::cmp::Eq for HTASK {}
            unsafe impl ::windows::Abi for HTASK {
                type Abi = Self;
            }
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioAmbisonicsControl(::windows::IUnknown);
            impl IAudioAmbisonicsControl {}
            unsafe impl ::windows::Interface for IAudioAmbisonicsControl {
                type Vtable = IAudioAmbisonicsControl_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    678579345,
                    57141,
                    18518,
                    [159, 118, 214, 162, 100, 19, 243, 223],
                );
            }
            impl IAudioAmbisonicsControl {
                pub unsafe fn SetData(
                    &self,
                    pambisonicsparams: *const AMBISONICS_PARAMS,
                    cbambisonicsparams: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pambisonicsparams),
                        ::std::mem::transmute(cbambisonicsparams),
                    )
                }
                pub unsafe fn SetHeadTracking<'a>(
                    &self,
                    benableheadtracking: impl ::windows::IntoParam<'a, super::SystemServices::BOOL>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        benableheadtracking.into_param().abi(),
                    )
                }
                pub unsafe fn GetHeadTracking(
                    &self,
                    pbenableheadtracking: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pbenableheadtracking),
                    )
                }
                pub unsafe fn SetRotation(
                    &self,
                    x: f32,
                    y: f32,
                    z: f32,
                    w: f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(x),
                        ::std::mem::transmute(y),
                        ::std::mem::transmute(z),
                        ::std::mem::transmute(w),
                    )
                }
            }
            impl ::std::convert::From<IAudioAmbisonicsControl> for ::windows::IUnknown {
                fn from(value: IAudioAmbisonicsControl) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioAmbisonicsControl> for ::windows::IUnknown {
                fn from(value: &IAudioAmbisonicsControl) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioAmbisonicsControl {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioAmbisonicsControl {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioAmbisonicsControl_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pambisonicsparams: *const AMBISONICS_PARAMS,
                    cbambisonicsparams: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    benableheadtracking: super::SystemServices::BOOL,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pbenableheadtracking: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    x: f32,
                    y: f32,
                    z: f32,
                    w: f32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioAutoGainControl(::windows::IUnknown);
            impl IAudioAutoGainControl {}
            unsafe impl ::windows::Interface for IAudioAutoGainControl {
                type Vtable = IAudioAutoGainControl_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2235572180,
                    28132,
                    19357,
                    [152, 105, 45, 103, 83, 168, 47, 60],
                );
            }
            impl IAudioAutoGainControl {
                pub unsafe fn GetEnabled(
                    &self,
                    pbenabled: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pbenabled),
                    )
                }
                pub unsafe fn SetEnabled<'a>(
                    &self,
                    benable: impl ::windows::IntoParam<'a, super::SystemServices::BOOL>,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        benable.into_param().abi(),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
            }
            impl ::std::convert::From<IAudioAutoGainControl> for ::windows::IUnknown {
                fn from(value: IAudioAutoGainControl) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioAutoGainControl> for ::windows::IUnknown {
                fn from(value: &IAudioAutoGainControl) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioAutoGainControl {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioAutoGainControl {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioAutoGainControl_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pbenabled: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    benable: super::SystemServices::BOOL,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IPerChannelDbLevel(::windows::IUnknown);
            impl IPerChannelDbLevel {}
            unsafe impl ::windows::Interface for IPerChannelDbLevel {
                type Vtable = IPerChannelDbLevel_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3271090177,
                    61957,
                    19401,
                    [153, 188, 193, 59, 30, 4, 140, 203],
                );
            }
            impl IPerChannelDbLevel {
                pub unsafe fn GetChannelCount(&self, pcchannels: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcchannels),
                    )
                }
                pub unsafe fn GetLevelRange(
                    &self,
                    nchannel: u32,
                    pfminleveldb: *mut f32,
                    pfmaxleveldb: *mut f32,
                    pfstepping: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nchannel),
                        ::std::mem::transmute(pfminleveldb),
                        ::std::mem::transmute(pfmaxleveldb),
                        ::std::mem::transmute(pfstepping),
                    )
                }
                pub unsafe fn GetLevel(
                    &self,
                    nchannel: u32,
                    pfleveldb: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nchannel),
                        ::std::mem::transmute(pfleveldb),
                    )
                }
                pub unsafe fn SetLevel(
                    &self,
                    nchannel: u32,
                    fleveldb: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nchannel),
                        ::std::mem::transmute(fleveldb),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
                pub unsafe fn SetLevelUniform(
                    &self,
                    fleveldb: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(fleveldb),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
                pub unsafe fn SetLevelAllChannels(
                    &self,
                    alevelsdb: *mut f32,
                    cchannels: u32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(alevelsdb),
                        ::std::mem::transmute(cchannels),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
            }
            impl ::std::convert::From<IPerChannelDbLevel> for ::windows::IUnknown {
                fn from(value: IPerChannelDbLevel) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IPerChannelDbLevel> for ::windows::IUnknown {
                fn from(value: &IPerChannelDbLevel) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IPerChannelDbLevel {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IPerChannelDbLevel {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IPerChannelDbLevel_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcchannels: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nchannel: u32,
                    pfminleveldb: *mut f32,
                    pfmaxleveldb: *mut f32,
                    pfstepping: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nchannel: u32,
                    pfleveldb: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nchannel: u32,
                    fleveldb: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    fleveldb: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    alevelsdb: *mut f32,
                    cchannels: u32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioBass(::windows::IUnknown);
            impl IAudioBass {}
            unsafe impl ::windows::Interface for IAudioBass {
                type Vtable = IAudioBass_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2729550297,
                    19891,
                    16989,
                    [162, 178, 189, 51, 92, 179, 226, 229],
                );
            }
            impl IAudioBass {
                pub unsafe fn GetChannelCount(&self, pcchannels: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcchannels),
                    )
                }
                pub unsafe fn GetLevelRange(
                    &self,
                    nchannel: u32,
                    pfminleveldb: *mut f32,
                    pfmaxleveldb: *mut f32,
                    pfstepping: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nchannel),
                        ::std::mem::transmute(pfminleveldb),
                        ::std::mem::transmute(pfmaxleveldb),
                        ::std::mem::transmute(pfstepping),
                    )
                }
                pub unsafe fn GetLevel(
                    &self,
                    nchannel: u32,
                    pfleveldb: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nchannel),
                        ::std::mem::transmute(pfleveldb),
                    )
                }
                pub unsafe fn SetLevel(
                    &self,
                    nchannel: u32,
                    fleveldb: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nchannel),
                        ::std::mem::transmute(fleveldb),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
                pub unsafe fn SetLevelUniform(
                    &self,
                    fleveldb: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(fleveldb),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
                pub unsafe fn SetLevelAllChannels(
                    &self,
                    alevelsdb: *mut f32,
                    cchannels: u32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(alevelsdb),
                        ::std::mem::transmute(cchannels),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
            }
            impl ::std::convert::From<IAudioBass> for ::windows::IUnknown {
                fn from(value: IAudioBass) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioBass> for ::windows::IUnknown {
                fn from(value: &IAudioBass) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioBass {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioBass {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            impl ::std::convert::From<IAudioBass> for IPerChannelDbLevel {
                fn from(value: IAudioBass) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioBass> for IPerChannelDbLevel {
                fn from(value: &IAudioBass) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IPerChannelDbLevel> for IAudioBass {
                fn into_param(self) -> ::windows::Param<'a, IPerChannelDbLevel> {
                    ::windows::Param::Owned(::std::convert::Into::<IPerChannelDbLevel>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IPerChannelDbLevel> for &'a IAudioBass {
                fn into_param(self) -> ::windows::Param<'a, IPerChannelDbLevel> {
                    ::windows::Param::Owned(::std::convert::Into::<IPerChannelDbLevel>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioBass_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcchannels: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nchannel: u32,
                    pfminleveldb: *mut f32,
                    pfmaxleveldb: *mut f32,
                    pfstepping: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nchannel: u32,
                    pfleveldb: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nchannel: u32,
                    fleveldb: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    fleveldb: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    alevelsdb: *mut f32,
                    cchannels: u32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioCaptureClient(::windows::IUnknown);
            impl IAudioCaptureClient {}
            unsafe impl ::windows::Interface for IAudioCaptureClient {
                type Vtable = IAudioCaptureClient_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3366829412,
                    59166,
                    18592,
                    [164, 222, 24, 92, 57, 92, 211, 23],
                );
            }
            impl IAudioCaptureClient {
                pub unsafe fn GetBuffer(
                    &self,
                    ppdata: *mut *mut u8,
                    pnumframestoread: *mut u32,
                    pdwflags: *mut u32,
                    pu64deviceposition: *mut u64,
                    pu64qpcposition: *mut u64,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(ppdata),
                        ::std::mem::transmute(pnumframestoread),
                        ::std::mem::transmute(pdwflags),
                        ::std::mem::transmute(pu64deviceposition),
                        ::std::mem::transmute(pu64qpcposition),
                    )
                }
                pub unsafe fn ReleaseBuffer(&self, numframesread: u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(numframesread),
                    )
                }
                pub unsafe fn GetNextPacketSize(
                    &self,
                    pnumframesinnextpacket: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pnumframesinnextpacket),
                    )
                }
            }
            impl ::std::convert::From<IAudioCaptureClient> for ::windows::IUnknown {
                fn from(value: IAudioCaptureClient) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioCaptureClient> for ::windows::IUnknown {
                fn from(value: &IAudioCaptureClient) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioCaptureClient {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioCaptureClient {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioCaptureClient_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    ppdata: *mut *mut u8,
                    pnumframestoread: *mut u32,
                    pdwflags: *mut u32,
                    pu64deviceposition: *mut u64,
                    pu64qpcposition: *mut u64,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    numframesread: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pnumframesinnextpacket: *mut u32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioChannelConfig(::windows::IUnknown);
            impl IAudioChannelConfig {}
            unsafe impl ::windows::Interface for IAudioChannelConfig {
                type Vtable = IAudioChannelConfig_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3138503791,
                    60456,
                    18748,
                    [184, 138, 93, 184, 128, 98, 206, 152],
                );
            }
            impl IAudioChannelConfig {
                pub unsafe fn SetChannelConfig(
                    &self,
                    dwconfig: u32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwconfig),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
                pub unsafe fn GetChannelConfig(&self, pdwconfig: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwconfig),
                    )
                }
            }
            impl ::std::convert::From<IAudioChannelConfig> for ::windows::IUnknown {
                fn from(value: IAudioChannelConfig) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioChannelConfig> for ::windows::IUnknown {
                fn from(value: &IAudioChannelConfig) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioChannelConfig {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioChannelConfig {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioChannelConfig_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwconfig: u32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwconfig: *mut u32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioClient(::windows::IUnknown);
            impl IAudioClient {}
            unsafe impl ::windows::Interface for IAudioClient {
                type Vtable = IAudioClient_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    481930572,
                    56314,
                    19506,
                    [177, 120, 194, 245, 104, 167, 3, 178],
                );
            }
            impl IAudioClient {
                pub unsafe fn Initialize(
                    &self,
                    sharemode: AUDCLNT_SHAREMODE,
                    streamflags: u32,
                    hnsbufferduration: i64,
                    hnsperiodicity: i64,
                    pformat: *const super::Multimedia::WAVEFORMATEX,
                    audiosessionguid: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(sharemode),
                        ::std::mem::transmute(streamflags),
                        ::std::mem::transmute(hnsbufferduration),
                        ::std::mem::transmute(hnsperiodicity),
                        ::std::mem::transmute(pformat),
                        ::std::mem::transmute(audiosessionguid),
                    )
                }
                pub unsafe fn GetBufferSize(
                    &self,
                    pnumbufferframes: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pnumbufferframes),
                    )
                }
                pub unsafe fn GetStreamLatency(&self, phnslatency: *mut i64) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(phnslatency),
                    )
                }
                pub unsafe fn GetCurrentPadding(
                    &self,
                    pnumpaddingframes: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pnumpaddingframes),
                    )
                }
                pub unsafe fn IsFormatSupported(
                    &self,
                    sharemode: AUDCLNT_SHAREMODE,
                    pformat: *const super::Multimedia::WAVEFORMATEX,
                    ppclosestmatch: *mut *mut super::Multimedia::WAVEFORMATEX,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(sharemode),
                        ::std::mem::transmute(pformat),
                        ::std::mem::transmute(ppclosestmatch),
                    )
                }
                pub unsafe fn GetMixFormat(
                    &self,
                    ppdeviceformat: *mut *mut super::Multimedia::WAVEFORMATEX,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(ppdeviceformat),
                    )
                }
                pub unsafe fn GetDevicePeriod(
                    &self,
                    phnsdefaultdeviceperiod: *mut i64,
                    phnsminimumdeviceperiod: *mut i64,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(phnsdefaultdeviceperiod),
                        ::std::mem::transmute(phnsminimumdeviceperiod),
                    )
                }
                pub unsafe fn Start(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(::windows::Abi::abi(self))
                }
                pub unsafe fn Stop(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).11)(::windows::Abi::abi(self))
                }
                pub unsafe fn Reset(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).12)(::windows::Abi::abi(self))
                }
                pub unsafe fn SetEventHandle<'a>(
                    &self,
                    eventhandle: impl ::windows::IntoParam<'a, super::SystemServices::HANDLE>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).13)(
                        ::windows::Abi::abi(self),
                        eventhandle.into_param().abi(),
                    )
                }
                pub unsafe fn GetService(
                    &self,
                    riid: *const ::windows::Guid,
                    ppv: *mut *mut ::std::ffi::c_void,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).14)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(riid),
                        ::std::mem::transmute(ppv),
                    )
                }
            }
            impl ::std::convert::From<IAudioClient> for ::windows::IUnknown {
                fn from(value: IAudioClient) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioClient> for ::windows::IUnknown {
                fn from(value: &IAudioClient) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioClient {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioClient {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioClient_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    sharemode: AUDCLNT_SHAREMODE,
                    streamflags: u32,
                    hnsbufferduration: i64,
                    hnsperiodicity: i64,
                    pformat: *const super::Multimedia::WAVEFORMATEX,
                    audiosessionguid: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pnumbufferframes: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    phnslatency: *mut i64,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pnumpaddingframes: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    sharemode: AUDCLNT_SHAREMODE,
                    pformat: *const super::Multimedia::WAVEFORMATEX,
                    ppclosestmatch: *mut *mut super::Multimedia::WAVEFORMATEX,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    ppdeviceformat: *mut *mut super::Multimedia::WAVEFORMATEX,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    phnsdefaultdeviceperiod: *mut i64,
                    phnsminimumdeviceperiod: *mut i64,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    eventhandle: super::SystemServices::HANDLE,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    riid: *const ::windows::Guid,
                    ppv: *mut *mut ::std::ffi::c_void,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioClient2(::windows::IUnknown);
            impl IAudioClient2 {}
            unsafe impl ::windows::Interface for IAudioClient2 {
                type Vtable = IAudioClient2_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    1919383757,
                    62986,
                    20186,
                    [130, 222, 228, 118, 16, 205, 120, 170],
                );
            }
            impl IAudioClient2 {
                pub unsafe fn Initialize(
                    &self,
                    sharemode: AUDCLNT_SHAREMODE,
                    streamflags: u32,
                    hnsbufferduration: i64,
                    hnsperiodicity: i64,
                    pformat: *const super::Multimedia::WAVEFORMATEX,
                    audiosessionguid: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(sharemode),
                        ::std::mem::transmute(streamflags),
                        ::std::mem::transmute(hnsbufferduration),
                        ::std::mem::transmute(hnsperiodicity),
                        ::std::mem::transmute(pformat),
                        ::std::mem::transmute(audiosessionguid),
                    )
                }
                pub unsafe fn GetBufferSize(
                    &self,
                    pnumbufferframes: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pnumbufferframes),
                    )
                }
                pub unsafe fn GetStreamLatency(&self, phnslatency: *mut i64) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(phnslatency),
                    )
                }
                pub unsafe fn GetCurrentPadding(
                    &self,
                    pnumpaddingframes: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pnumpaddingframes),
                    )
                }
                pub unsafe fn IsFormatSupported(
                    &self,
                    sharemode: AUDCLNT_SHAREMODE,
                    pformat: *const super::Multimedia::WAVEFORMATEX,
                    ppclosestmatch: *mut *mut super::Multimedia::WAVEFORMATEX,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(sharemode),
                        ::std::mem::transmute(pformat),
                        ::std::mem::transmute(ppclosestmatch),
                    )
                }
                pub unsafe fn GetMixFormat(
                    &self,
                    ppdeviceformat: *mut *mut super::Multimedia::WAVEFORMATEX,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(ppdeviceformat),
                    )
                }
                pub unsafe fn GetDevicePeriod(
                    &self,
                    phnsdefaultdeviceperiod: *mut i64,
                    phnsminimumdeviceperiod: *mut i64,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(phnsdefaultdeviceperiod),
                        ::std::mem::transmute(phnsminimumdeviceperiod),
                    )
                }
                pub unsafe fn Start(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(::windows::Abi::abi(self))
                }
                pub unsafe fn Stop(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).11)(::windows::Abi::abi(self))
                }
                pub unsafe fn Reset(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).12)(::windows::Abi::abi(self))
                }
                pub unsafe fn SetEventHandle<'a>(
                    &self,
                    eventhandle: impl ::windows::IntoParam<'a, super::SystemServices::HANDLE>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).13)(
                        ::windows::Abi::abi(self),
                        eventhandle.into_param().abi(),
                    )
                }
                pub unsafe fn GetService(
                    &self,
                    riid: *const ::windows::Guid,
                    ppv: *mut *mut ::std::ffi::c_void,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).14)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(riid),
                        ::std::mem::transmute(ppv),
                    )
                }
                pub unsafe fn IsOffloadCapable(
                    &self,
                    category: AUDIO_STREAM_CATEGORY,
                    pboffloadcapable: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).15)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(category),
                        ::std::mem::transmute(pboffloadcapable),
                    )
                }
                pub unsafe fn SetClientProperties(
                    &self,
                    pproperties: *const AudioClientProperties,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).16)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pproperties),
                    )
                }
                pub unsafe fn GetBufferSizeLimits<'a>(
                    &self,
                    pformat: *const super::Multimedia::WAVEFORMATEX,
                    beventdriven: impl ::windows::IntoParam<'a, super::SystemServices::BOOL>,
                    phnsminbufferduration: *mut i64,
                    phnsmaxbufferduration: *mut i64,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).17)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pformat),
                        beventdriven.into_param().abi(),
                        ::std::mem::transmute(phnsminbufferduration),
                        ::std::mem::transmute(phnsmaxbufferduration),
                    )
                }
            }
            impl ::std::convert::From<IAudioClient2> for ::windows::IUnknown {
                fn from(value: IAudioClient2) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioClient2> for ::windows::IUnknown {
                fn from(value: &IAudioClient2) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioClient2 {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioClient2 {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            impl ::std::convert::From<IAudioClient2> for IAudioClient {
                fn from(value: IAudioClient2) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioClient2> for IAudioClient {
                fn from(value: &IAudioClient2) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IAudioClient> for IAudioClient2 {
                fn into_param(self) -> ::windows::Param<'a, IAudioClient> {
                    ::windows::Param::Owned(::std::convert::Into::<IAudioClient>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IAudioClient> for &'a IAudioClient2 {
                fn into_param(self) -> ::windows::Param<'a, IAudioClient> {
                    ::windows::Param::Owned(::std::convert::Into::<IAudioClient>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioClient2_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    sharemode: AUDCLNT_SHAREMODE,
                    streamflags: u32,
                    hnsbufferduration: i64,
                    hnsperiodicity: i64,
                    pformat: *const super::Multimedia::WAVEFORMATEX,
                    audiosessionguid: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pnumbufferframes: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    phnslatency: *mut i64,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pnumpaddingframes: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    sharemode: AUDCLNT_SHAREMODE,
                    pformat: *const super::Multimedia::WAVEFORMATEX,
                    ppclosestmatch: *mut *mut super::Multimedia::WAVEFORMATEX,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    ppdeviceformat: *mut *mut super::Multimedia::WAVEFORMATEX,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    phnsdefaultdeviceperiod: *mut i64,
                    phnsminimumdeviceperiod: *mut i64,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    eventhandle: super::SystemServices::HANDLE,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    riid: *const ::windows::Guid,
                    ppv: *mut *mut ::std::ffi::c_void,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    category: AUDIO_STREAM_CATEGORY,
                    pboffloadcapable: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pproperties: *const AudioClientProperties,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pformat: *const super::Multimedia::WAVEFORMATEX,
                    beventdriven: super::SystemServices::BOOL,
                    phnsminbufferduration: *mut i64,
                    phnsmaxbufferduration: *mut i64,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioClient3(::windows::IUnknown);
            impl IAudioClient3 {}
            unsafe impl ::windows::Interface for IAudioClient3 {
                type Vtable = IAudioClient3_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2127883783,
                    36455,
                    19668,
                    [140, 26, 43, 122, 89, 135, 173, 66],
                );
            }
            impl IAudioClient3 {
                pub unsafe fn Initialize(
                    &self,
                    sharemode: AUDCLNT_SHAREMODE,
                    streamflags: u32,
                    hnsbufferduration: i64,
                    hnsperiodicity: i64,
                    pformat: *const super::Multimedia::WAVEFORMATEX,
                    audiosessionguid: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(sharemode),
                        ::std::mem::transmute(streamflags),
                        ::std::mem::transmute(hnsbufferduration),
                        ::std::mem::transmute(hnsperiodicity),
                        ::std::mem::transmute(pformat),
                        ::std::mem::transmute(audiosessionguid),
                    )
                }
                pub unsafe fn GetBufferSize(
                    &self,
                    pnumbufferframes: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pnumbufferframes),
                    )
                }
                pub unsafe fn GetStreamLatency(&self, phnslatency: *mut i64) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(phnslatency),
                    )
                }
                pub unsafe fn GetCurrentPadding(
                    &self,
                    pnumpaddingframes: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pnumpaddingframes),
                    )
                }
                pub unsafe fn IsFormatSupported(
                    &self,
                    sharemode: AUDCLNT_SHAREMODE,
                    pformat: *const super::Multimedia::WAVEFORMATEX,
                    ppclosestmatch: *mut *mut super::Multimedia::WAVEFORMATEX,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(sharemode),
                        ::std::mem::transmute(pformat),
                        ::std::mem::transmute(ppclosestmatch),
                    )
                }
                pub unsafe fn GetMixFormat(
                    &self,
                    ppdeviceformat: *mut *mut super::Multimedia::WAVEFORMATEX,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(ppdeviceformat),
                    )
                }
                pub unsafe fn GetDevicePeriod(
                    &self,
                    phnsdefaultdeviceperiod: *mut i64,
                    phnsminimumdeviceperiod: *mut i64,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(phnsdefaultdeviceperiod),
                        ::std::mem::transmute(phnsminimumdeviceperiod),
                    )
                }
                pub unsafe fn Start(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(::windows::Abi::abi(self))
                }
                pub unsafe fn Stop(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).11)(::windows::Abi::abi(self))
                }
                pub unsafe fn Reset(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).12)(::windows::Abi::abi(self))
                }
                pub unsafe fn SetEventHandle<'a>(
                    &self,
                    eventhandle: impl ::windows::IntoParam<'a, super::SystemServices::HANDLE>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).13)(
                        ::windows::Abi::abi(self),
                        eventhandle.into_param().abi(),
                    )
                }
                pub unsafe fn GetService(
                    &self,
                    riid: *const ::windows::Guid,
                    ppv: *mut *mut ::std::ffi::c_void,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).14)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(riid),
                        ::std::mem::transmute(ppv),
                    )
                }
                pub unsafe fn IsOffloadCapable(
                    &self,
                    category: AUDIO_STREAM_CATEGORY,
                    pboffloadcapable: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).15)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(category),
                        ::std::mem::transmute(pboffloadcapable),
                    )
                }
                pub unsafe fn SetClientProperties(
                    &self,
                    pproperties: *const AudioClientProperties,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).16)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pproperties),
                    )
                }
                pub unsafe fn GetBufferSizeLimits<'a>(
                    &self,
                    pformat: *const super::Multimedia::WAVEFORMATEX,
                    beventdriven: impl ::windows::IntoParam<'a, super::SystemServices::BOOL>,
                    phnsminbufferduration: *mut i64,
                    phnsmaxbufferduration: *mut i64,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).17)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pformat),
                        beventdriven.into_param().abi(),
                        ::std::mem::transmute(phnsminbufferduration),
                        ::std::mem::transmute(phnsmaxbufferduration),
                    )
                }
                pub unsafe fn GetSharedModeEnginePeriod(
                    &self,
                    pformat: *const super::Multimedia::WAVEFORMATEX,
                    pdefaultperiodinframes: *mut u32,
                    pfundamentalperiodinframes: *mut u32,
                    pminperiodinframes: *mut u32,
                    pmaxperiodinframes: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).18)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pformat),
                        ::std::mem::transmute(pdefaultperiodinframes),
                        ::std::mem::transmute(pfundamentalperiodinframes),
                        ::std::mem::transmute(pminperiodinframes),
                        ::std::mem::transmute(pmaxperiodinframes),
                    )
                }
                pub unsafe fn GetCurrentSharedModeEnginePeriod(
                    &self,
                    ppformat: *mut *mut super::Multimedia::WAVEFORMATEX,
                    pcurrentperiodinframes: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).19)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(ppformat),
                        ::std::mem::transmute(pcurrentperiodinframes),
                    )
                }
                pub unsafe fn InitializeSharedAudioStream(
                    &self,
                    streamflags: u32,
                    periodinframes: u32,
                    pformat: *const super::Multimedia::WAVEFORMATEX,
                    audiosessionguid: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).20)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(streamflags),
                        ::std::mem::transmute(periodinframes),
                        ::std::mem::transmute(pformat),
                        ::std::mem::transmute(audiosessionguid),
                    )
                }
            }
            impl ::std::convert::From<IAudioClient3> for ::windows::IUnknown {
                fn from(value: IAudioClient3) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioClient3> for ::windows::IUnknown {
                fn from(value: &IAudioClient3) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioClient3 {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioClient3 {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            impl ::std::convert::From<IAudioClient3> for IAudioClient2 {
                fn from(value: IAudioClient3) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioClient3> for IAudioClient2 {
                fn from(value: &IAudioClient3) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IAudioClient2> for IAudioClient3 {
                fn into_param(self) -> ::windows::Param<'a, IAudioClient2> {
                    ::windows::Param::Owned(::std::convert::Into::<IAudioClient2>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IAudioClient2> for &'a IAudioClient3 {
                fn into_param(self) -> ::windows::Param<'a, IAudioClient2> {
                    ::windows::Param::Owned(::std::convert::Into::<IAudioClient2>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            impl ::std::convert::From<IAudioClient3> for IAudioClient {
                fn from(value: IAudioClient3) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioClient3> for IAudioClient {
                fn from(value: &IAudioClient3) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IAudioClient> for IAudioClient3 {
                fn into_param(self) -> ::windows::Param<'a, IAudioClient> {
                    ::windows::Param::Owned(::std::convert::Into::<IAudioClient>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IAudioClient> for &'a IAudioClient3 {
                fn into_param(self) -> ::windows::Param<'a, IAudioClient> {
                    ::windows::Param::Owned(::std::convert::Into::<IAudioClient>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioClient3_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    sharemode: AUDCLNT_SHAREMODE,
                    streamflags: u32,
                    hnsbufferduration: i64,
                    hnsperiodicity: i64,
                    pformat: *const super::Multimedia::WAVEFORMATEX,
                    audiosessionguid: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pnumbufferframes: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    phnslatency: *mut i64,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pnumpaddingframes: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    sharemode: AUDCLNT_SHAREMODE,
                    pformat: *const super::Multimedia::WAVEFORMATEX,
                    ppclosestmatch: *mut *mut super::Multimedia::WAVEFORMATEX,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    ppdeviceformat: *mut *mut super::Multimedia::WAVEFORMATEX,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    phnsdefaultdeviceperiod: *mut i64,
                    phnsminimumdeviceperiod: *mut i64,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    eventhandle: super::SystemServices::HANDLE,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    riid: *const ::windows::Guid,
                    ppv: *mut *mut ::std::ffi::c_void,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    category: AUDIO_STREAM_CATEGORY,
                    pboffloadcapable: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pproperties: *const AudioClientProperties,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pformat: *const super::Multimedia::WAVEFORMATEX,
                    beventdriven: super::SystemServices::BOOL,
                    phnsminbufferduration: *mut i64,
                    phnsmaxbufferduration: *mut i64,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pformat: *const super::Multimedia::WAVEFORMATEX,
                    pdefaultperiodinframes: *mut u32,
                    pfundamentalperiodinframes: *mut u32,
                    pminperiodinframes: *mut u32,
                    pmaxperiodinframes: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    ppformat: *mut *mut super::Multimedia::WAVEFORMATEX,
                    pcurrentperiodinframes: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    streamflags: u32,
                    periodinframes: u32,
                    pformat: *const super::Multimedia::WAVEFORMATEX,
                    audiosessionguid: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioClock(::windows::IUnknown);
            impl IAudioClock {}
            unsafe impl ::windows::Interface for IAudioClock {
                type Vtable = IAudioClock_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3445829967,
                    16314,
                    18971,
                    [129, 44, 239, 150, 53, 135, 40, 231],
                );
            }
            impl IAudioClock {
                pub unsafe fn GetFrequency(&self, pu64frequency: *mut u64) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pu64frequency),
                    )
                }
                pub unsafe fn GetPosition(
                    &self,
                    pu64position: *mut u64,
                    pu64qpcposition: *mut u64,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pu64position),
                        ::std::mem::transmute(pu64qpcposition),
                    )
                }
                pub unsafe fn GetCharacteristics(
                    &self,
                    pdwcharacteristics: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwcharacteristics),
                    )
                }
            }
            impl ::std::convert::From<IAudioClock> for ::windows::IUnknown {
                fn from(value: IAudioClock) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioClock> for ::windows::IUnknown {
                fn from(value: &IAudioClock) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioClock {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioClock {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioClock_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pu64frequency: *mut u64,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pu64position: *mut u64,
                    pu64qpcposition: *mut u64,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwcharacteristics: *mut u32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioClock2(::windows::IUnknown);
            impl IAudioClock2 {}
            unsafe impl ::windows::Interface for IAudioClock2 {
                type Vtable = IAudioClock2_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    1867120499,
                    26407,
                    18860,
                    [160, 8, 217, 140, 245, 231, 0, 72],
                );
            }
            impl IAudioClock2 {
                pub unsafe fn GetDevicePosition(
                    &self,
                    deviceposition: *mut u64,
                    qpcposition: *mut u64,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(deviceposition),
                        ::std::mem::transmute(qpcposition),
                    )
                }
            }
            impl ::std::convert::From<IAudioClock2> for ::windows::IUnknown {
                fn from(value: IAudioClock2) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioClock2> for ::windows::IUnknown {
                fn from(value: &IAudioClock2) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioClock2 {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioClock2 {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioClock2_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    deviceposition: *mut u64,
                    qpcposition: *mut u64,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioClockAdjustment(::windows::IUnknown);
            impl IAudioClockAdjustment {}
            unsafe impl ::windows::Interface for IAudioClockAdjustment {
                type Vtable = IAudioClockAdjustment_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    4142186656,
                    18137,
                    20408,
                    [190, 33, 87, 163, 239, 43, 98, 108],
                );
            }
            impl IAudioClockAdjustment {
                pub unsafe fn SetSampleRate(&self, flsamplerate: f32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(flsamplerate),
                    )
                }
            }
            impl ::std::convert::From<IAudioClockAdjustment> for ::windows::IUnknown {
                fn from(value: IAudioClockAdjustment) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioClockAdjustment> for ::windows::IUnknown {
                fn from(value: &IAudioClockAdjustment) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioClockAdjustment {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioClockAdjustment {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioClockAdjustment_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    flsamplerate: f32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioEndpointFormatControl(::windows::IUnknown);
            impl IAudioEndpointFormatControl {}
            unsafe impl ::windows::Interface for IAudioEndpointFormatControl {
                type Vtable = IAudioEndpointFormatControl_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2018311488,
                    40841,
                    17774,
                    [161, 166, 135, 59, 0, 106, 102, 78],
                );
            }
            impl IAudioEndpointFormatControl {
                pub unsafe fn ResetToDefault(&self, resetflags: u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(resetflags),
                    )
                }
            }
            impl ::std::convert::From<IAudioEndpointFormatControl> for ::windows::IUnknown {
                fn from(value: IAudioEndpointFormatControl) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioEndpointFormatControl> for ::windows::IUnknown {
                fn from(value: &IAudioEndpointFormatControl) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioEndpointFormatControl {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioEndpointFormatControl {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioEndpointFormatControl_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    resetflags: u32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioEndpointLastBufferControl(::windows::IUnknown);
            impl IAudioEndpointLastBufferControl {}
            unsafe impl ::windows::Interface for IAudioEndpointLastBufferControl {
                type Vtable = IAudioEndpointLastBufferControl_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    4166127059,
                    36765,
                    17463,
                    [152, 97, 98, 245, 132, 195, 61, 214],
                );
            }
            impl IAudioEndpointLastBufferControl {
                pub unsafe fn IsLastBufferControlSupported(&self) -> super::SystemServices::BOOL {
                    (::windows::Interface::vtable(self).3)(::windows::Abi::abi(self))
                }
            }
            impl ::std::convert::From<IAudioEndpointLastBufferControl> for ::windows::IUnknown {
                fn from(value: IAudioEndpointLastBufferControl) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioEndpointLastBufferControl> for ::windows::IUnknown {
                fn from(value: &IAudioEndpointLastBufferControl) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioEndpointLastBufferControl {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioEndpointLastBufferControl {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioEndpointLastBufferControl_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                ) -> super::SystemServices::BOOL,
                pub unsafe extern "system" fn(),
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioEndpointOffloadStreamMeter(::windows::IUnknown);
            impl IAudioEndpointOffloadStreamMeter {}
            unsafe impl ::windows::Interface for IAudioEndpointOffloadStreamMeter {
                type Vtable = IAudioEndpointOffloadStreamMeter_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3780406734,
                    40401,
                    16779,
                    [154, 178, 52, 140, 237, 22, 28, 134],
                );
            }
            impl IAudioEndpointOffloadStreamMeter {
                pub unsafe fn GetMeterChannelCount(
                    &self,
                    pu32channelcount: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pu32channelcount),
                    )
                }
                pub unsafe fn GetMeteringData(
                    &self,
                    u32channelcount: u32,
                    pf32peakvalues: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(u32channelcount),
                        ::std::mem::transmute(pf32peakvalues),
                    )
                }
            }
            impl ::std::convert::From<IAudioEndpointOffloadStreamMeter> for ::windows::IUnknown {
                fn from(value: IAudioEndpointOffloadStreamMeter) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioEndpointOffloadStreamMeter> for ::windows::IUnknown {
                fn from(value: &IAudioEndpointOffloadStreamMeter) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioEndpointOffloadStreamMeter {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioEndpointOffloadStreamMeter {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioEndpointOffloadStreamMeter_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pu32channelcount: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    u32channelcount: u32,
                    pf32peakvalues: *mut f32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioEndpointOffloadStreamMute(::windows::IUnknown);
            impl IAudioEndpointOffloadStreamMute {}
            unsafe impl ::windows::Interface for IAudioEndpointOffloadStreamMute {
                type Vtable = IAudioEndpointOffloadStreamMute_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3756135253,
                    24258,
                    16608,
                    [141, 107, 113, 10, 195, 192, 2, 73],
                );
            }
            impl IAudioEndpointOffloadStreamMute {
                pub unsafe fn SetMute(&self, bmuted: u8) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(bmuted),
                    )
                }
                pub unsafe fn GetMute(&self, pbmuted: *mut u8) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pbmuted),
                    )
                }
            }
            impl ::std::convert::From<IAudioEndpointOffloadStreamMute> for ::windows::IUnknown {
                fn from(value: IAudioEndpointOffloadStreamMute) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioEndpointOffloadStreamMute> for ::windows::IUnknown {
                fn from(value: &IAudioEndpointOffloadStreamMute) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioEndpointOffloadStreamMute {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioEndpointOffloadStreamMute {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioEndpointOffloadStreamMute_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    bmuted: u8,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pbmuted: *mut u8,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioEndpointOffloadStreamVolume(::windows::IUnknown);
            impl IAudioEndpointOffloadStreamVolume {}
            unsafe impl ::windows::Interface for IAudioEndpointOffloadStreamVolume {
                type Vtable = IAudioEndpointOffloadStreamVolume_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    1693572425,
                    29130,
                    17025,
                    [134, 114, 58, 158, 221, 209, 208, 182],
                );
            }
            impl IAudioEndpointOffloadStreamVolume {
                pub unsafe fn GetVolumeChannelCount(
                    &self,
                    pu32channelcount: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pu32channelcount),
                    )
                }
                pub unsafe fn SetChannelVolumes(
                    &self,
                    u32channelcount: u32,
                    pf32volumes: *mut f32,
                    u32curvetype: AUDIO_CURVE_TYPE,
                    pcurveduration: *mut i64,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(u32channelcount),
                        ::std::mem::transmute(pf32volumes),
                        ::std::mem::transmute(u32curvetype),
                        ::std::mem::transmute(pcurveduration),
                    )
                }
                pub unsafe fn GetChannelVolumes(
                    &self,
                    u32channelcount: u32,
                    pf32volumes: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(u32channelcount),
                        ::std::mem::transmute(pf32volumes),
                    )
                }
            }
            impl ::std::convert::From<IAudioEndpointOffloadStreamVolume> for ::windows::IUnknown {
                fn from(value: IAudioEndpointOffloadStreamVolume) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioEndpointOffloadStreamVolume> for ::windows::IUnknown {
                fn from(value: &IAudioEndpointOffloadStreamVolume) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioEndpointOffloadStreamVolume {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioEndpointOffloadStreamVolume {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioEndpointOffloadStreamVolume_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pu32channelcount: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    u32channelcount: u32,
                    pf32volumes: *mut f32,
                    u32curvetype: AUDIO_CURVE_TYPE,
                    pcurveduration: *mut i64,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    u32channelcount: u32,
                    pf32volumes: *mut f32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioEndpointVolume(::windows::IUnknown);
            impl IAudioEndpointVolume {}
            unsafe impl ::windows::Interface for IAudioEndpointVolume {
                type Vtable = IAudioEndpointVolume_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    1558129794,
                    33822,
                    17734,
                    [151, 34, 12, 247, 64, 120, 34, 154],
                );
            }
            impl IAudioEndpointVolume {
                pub unsafe fn RegisterControlChangeNotify<'a>(
                    &self,
                    pnotify: impl ::windows::IntoParam<'a, IAudioEndpointVolumeCallback>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        pnotify.into_param().abi(),
                    )
                }
                pub unsafe fn UnregisterControlChangeNotify<'a>(
                    &self,
                    pnotify: impl ::windows::IntoParam<'a, IAudioEndpointVolumeCallback>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        pnotify.into_param().abi(),
                    )
                }
                pub unsafe fn GetChannelCount(
                    &self,
                    pnchannelcount: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pnchannelcount),
                    )
                }
                pub unsafe fn SetMasterVolumeLevel(
                    &self,
                    fleveldb: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(fleveldb),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
                pub unsafe fn SetMasterVolumeLevelScalar(
                    &self,
                    flevel: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(flevel),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
                pub unsafe fn GetMasterVolumeLevel(
                    &self,
                    pfleveldb: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pfleveldb),
                    )
                }
                pub unsafe fn GetMasterVolumeLevelScalar(
                    &self,
                    pflevel: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pflevel),
                    )
                }
                pub unsafe fn SetChannelVolumeLevel(
                    &self,
                    nchannel: u32,
                    fleveldb: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nchannel),
                        ::std::mem::transmute(fleveldb),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
                pub unsafe fn SetChannelVolumeLevelScalar(
                    &self,
                    nchannel: u32,
                    flevel: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).11)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nchannel),
                        ::std::mem::transmute(flevel),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
                pub unsafe fn GetChannelVolumeLevel(
                    &self,
                    nchannel: u32,
                    pfleveldb: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).12)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nchannel),
                        ::std::mem::transmute(pfleveldb),
                    )
                }
                pub unsafe fn GetChannelVolumeLevelScalar(
                    &self,
                    nchannel: u32,
                    pflevel: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).13)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nchannel),
                        ::std::mem::transmute(pflevel),
                    )
                }
                pub unsafe fn SetMute<'a>(
                    &self,
                    bmute: impl ::windows::IntoParam<'a, super::SystemServices::BOOL>,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).14)(
                        ::windows::Abi::abi(self),
                        bmute.into_param().abi(),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
                pub unsafe fn GetMute(
                    &self,
                    pbmute: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).15)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pbmute),
                    )
                }
                pub unsafe fn GetVolumeStepInfo(
                    &self,
                    pnstep: *mut u32,
                    pnstepcount: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).16)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pnstep),
                        ::std::mem::transmute(pnstepcount),
                    )
                }
                pub unsafe fn VolumeStepUp(
                    &self,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).17)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
                pub unsafe fn VolumeStepDown(
                    &self,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).18)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
                pub unsafe fn QueryHardwareSupport(
                    &self,
                    pdwhardwaresupportmask: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).19)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwhardwaresupportmask),
                    )
                }
                pub unsafe fn GetVolumeRange(
                    &self,
                    pflvolumemindb: *mut f32,
                    pflvolumemaxdb: *mut f32,
                    pflvolumeincrementdb: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).20)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pflvolumemindb),
                        ::std::mem::transmute(pflvolumemaxdb),
                        ::std::mem::transmute(pflvolumeincrementdb),
                    )
                }
            }
            impl ::std::convert::From<IAudioEndpointVolume> for ::windows::IUnknown {
                fn from(value: IAudioEndpointVolume) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioEndpointVolume> for ::windows::IUnknown {
                fn from(value: &IAudioEndpointVolume) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioEndpointVolume {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioEndpointVolume {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioEndpointVolume_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pnotify: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pnotify: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pnchannelcount: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    fleveldb: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    flevel: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pfleveldb: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pflevel: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nchannel: u32,
                    fleveldb: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nchannel: u32,
                    flevel: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nchannel: u32,
                    pfleveldb: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nchannel: u32,
                    pflevel: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    bmute: super::SystemServices::BOOL,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pbmute: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pnstep: *mut u32,
                    pnstepcount: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwhardwaresupportmask: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pflvolumemindb: *mut f32,
                    pflvolumemaxdb: *mut f32,
                    pflvolumeincrementdb: *mut f32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioEndpointVolumeCallback(::windows::IUnknown);
            impl IAudioEndpointVolumeCallback {}
            unsafe impl ::windows::Interface for IAudioEndpointVolumeCallback {
                type Vtable = IAudioEndpointVolumeCallback_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    1702364410,
                    54957,
                    17558,
                    [138, 96, 53, 39, 82, 175, 79, 137],
                );
            }
            impl IAudioEndpointVolumeCallback {
                pub unsafe fn OnNotify(
                    &self,
                    pnotify: *mut AUDIO_VOLUME_NOTIFICATION_DATA,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pnotify),
                    )
                }
            }
            impl ::std::convert::From<IAudioEndpointVolumeCallback> for ::windows::IUnknown {
                fn from(value: IAudioEndpointVolumeCallback) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioEndpointVolumeCallback> for ::windows::IUnknown {
                fn from(value: &IAudioEndpointVolumeCallback) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioEndpointVolumeCallback {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioEndpointVolumeCallback {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioEndpointVolumeCallback_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pnotify: *mut AUDIO_VOLUME_NOTIFICATION_DATA,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioEndpointVolumeEx(::windows::IUnknown);
            impl IAudioEndpointVolumeEx {}
            unsafe impl ::windows::Interface for IAudioEndpointVolumeEx {
                type Vtable = IAudioEndpointVolumeEx_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    1726027652,
                    63125,
                    20264,
                    [165, 5, 167, 8, 0, 129, 167, 143],
                );
            }
            impl IAudioEndpointVolumeEx {
                pub unsafe fn RegisterControlChangeNotify<'a>(
                    &self,
                    pnotify: impl ::windows::IntoParam<'a, IAudioEndpointVolumeCallback>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        pnotify.into_param().abi(),
                    )
                }
                pub unsafe fn UnregisterControlChangeNotify<'a>(
                    &self,
                    pnotify: impl ::windows::IntoParam<'a, IAudioEndpointVolumeCallback>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        pnotify.into_param().abi(),
                    )
                }
                pub unsafe fn GetChannelCount(
                    &self,
                    pnchannelcount: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pnchannelcount),
                    )
                }
                pub unsafe fn SetMasterVolumeLevel(
                    &self,
                    fleveldb: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(fleveldb),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
                pub unsafe fn SetMasterVolumeLevelScalar(
                    &self,
                    flevel: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(flevel),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
                pub unsafe fn GetMasterVolumeLevel(
                    &self,
                    pfleveldb: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pfleveldb),
                    )
                }
                pub unsafe fn GetMasterVolumeLevelScalar(
                    &self,
                    pflevel: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pflevel),
                    )
                }
                pub unsafe fn SetChannelVolumeLevel(
                    &self,
                    nchannel: u32,
                    fleveldb: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nchannel),
                        ::std::mem::transmute(fleveldb),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
                pub unsafe fn SetChannelVolumeLevelScalar(
                    &self,
                    nchannel: u32,
                    flevel: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).11)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nchannel),
                        ::std::mem::transmute(flevel),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
                pub unsafe fn GetChannelVolumeLevel(
                    &self,
                    nchannel: u32,
                    pfleveldb: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).12)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nchannel),
                        ::std::mem::transmute(pfleveldb),
                    )
                }
                pub unsafe fn GetChannelVolumeLevelScalar(
                    &self,
                    nchannel: u32,
                    pflevel: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).13)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nchannel),
                        ::std::mem::transmute(pflevel),
                    )
                }
                pub unsafe fn SetMute<'a>(
                    &self,
                    bmute: impl ::windows::IntoParam<'a, super::SystemServices::BOOL>,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).14)(
                        ::windows::Abi::abi(self),
                        bmute.into_param().abi(),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
                pub unsafe fn GetMute(
                    &self,
                    pbmute: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).15)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pbmute),
                    )
                }
                pub unsafe fn GetVolumeStepInfo(
                    &self,
                    pnstep: *mut u32,
                    pnstepcount: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).16)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pnstep),
                        ::std::mem::transmute(pnstepcount),
                    )
                }
                pub unsafe fn VolumeStepUp(
                    &self,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).17)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
                pub unsafe fn VolumeStepDown(
                    &self,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).18)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
                pub unsafe fn QueryHardwareSupport(
                    &self,
                    pdwhardwaresupportmask: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).19)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwhardwaresupportmask),
                    )
                }
                pub unsafe fn GetVolumeRange(
                    &self,
                    pflvolumemindb: *mut f32,
                    pflvolumemaxdb: *mut f32,
                    pflvolumeincrementdb: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).20)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pflvolumemindb),
                        ::std::mem::transmute(pflvolumemaxdb),
                        ::std::mem::transmute(pflvolumeincrementdb),
                    )
                }
                pub unsafe fn GetVolumeRangeChannel(
                    &self,
                    ichannel: u32,
                    pflvolumemindb: *mut f32,
                    pflvolumemaxdb: *mut f32,
                    pflvolumeincrementdb: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).21)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(ichannel),
                        ::std::mem::transmute(pflvolumemindb),
                        ::std::mem::transmute(pflvolumemaxdb),
                        ::std::mem::transmute(pflvolumeincrementdb),
                    )
                }
            }
            impl ::std::convert::From<IAudioEndpointVolumeEx> for ::windows::IUnknown {
                fn from(value: IAudioEndpointVolumeEx) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioEndpointVolumeEx> for ::windows::IUnknown {
                fn from(value: &IAudioEndpointVolumeEx) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioEndpointVolumeEx {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioEndpointVolumeEx {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            impl ::std::convert::From<IAudioEndpointVolumeEx> for IAudioEndpointVolume {
                fn from(value: IAudioEndpointVolumeEx) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioEndpointVolumeEx> for IAudioEndpointVolume {
                fn from(value: &IAudioEndpointVolumeEx) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IAudioEndpointVolume> for IAudioEndpointVolumeEx {
                fn into_param(self) -> ::windows::Param<'a, IAudioEndpointVolume> {
                    ::windows::Param::Owned(::std::convert::Into::<IAudioEndpointVolume>::into(
                        self,
                    ))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IAudioEndpointVolume> for &'a IAudioEndpointVolumeEx {
                fn into_param(self) -> ::windows::Param<'a, IAudioEndpointVolume> {
                    ::windows::Param::Owned(::std::convert::Into::<IAudioEndpointVolume>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioEndpointVolumeEx_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pnotify: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pnotify: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pnchannelcount: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    fleveldb: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    flevel: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pfleveldb: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pflevel: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nchannel: u32,
                    fleveldb: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nchannel: u32,
                    flevel: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nchannel: u32,
                    pfleveldb: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nchannel: u32,
                    pflevel: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    bmute: super::SystemServices::BOOL,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pbmute: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pnstep: *mut u32,
                    pnstepcount: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwhardwaresupportmask: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pflvolumemindb: *mut f32,
                    pflvolumemaxdb: *mut f32,
                    pflvolumeincrementdb: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    ichannel: u32,
                    pflvolumemindb: *mut f32,
                    pflvolumemaxdb: *mut f32,
                    pflvolumeincrementdb: *mut f32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioFormatEnumerator(::windows::IUnknown);
            impl IAudioFormatEnumerator {}
            unsafe impl ::windows::Interface for IAudioFormatEnumerator {
                type Vtable = IAudioFormatEnumerator_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3705317464,
                    35162,
                    18978,
                    [165, 235, 103, 189, 165, 6, 9, 109],
                );
            }
            impl IAudioFormatEnumerator {
                pub unsafe fn GetCount(&self, count: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(count),
                    )
                }
                pub unsafe fn GetFormat(
                    &self,
                    index: u32,
                    format: *mut *mut super::Multimedia::WAVEFORMATEX,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(index),
                        ::std::mem::transmute(format),
                    )
                }
            }
            impl ::std::convert::From<IAudioFormatEnumerator> for ::windows::IUnknown {
                fn from(value: IAudioFormatEnumerator) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioFormatEnumerator> for ::windows::IUnknown {
                fn from(value: &IAudioFormatEnumerator) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioFormatEnumerator {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioFormatEnumerator {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioFormatEnumerator_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    count: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    index: u32,
                    format: *mut *mut super::Multimedia::WAVEFORMATEX,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioInputSelector(::windows::IUnknown);
            impl IAudioInputSelector {}
            unsafe impl ::windows::Interface for IAudioInputSelector {
                type Vtable = IAudioInputSelector_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    1325652994,
                    24174,
                    18003,
                    [143, 114, 160, 48, 193, 35, 213, 152],
                );
            }
            impl IAudioInputSelector {
                pub unsafe fn GetSelection(&self, pnidselected: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pnidselected),
                    )
                }
                pub unsafe fn SetSelection(
                    &self,
                    nidselect: u32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nidselect),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
            }
            impl ::std::convert::From<IAudioInputSelector> for ::windows::IUnknown {
                fn from(value: IAudioInputSelector) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioInputSelector> for ::windows::IUnknown {
                fn from(value: &IAudioInputSelector) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioInputSelector {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioInputSelector {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioInputSelector_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pnidselected: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nidselect: u32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioLfxControl(::windows::IUnknown);
            impl IAudioLfxControl {}
            unsafe impl ::windows::Interface for IAudioLfxControl {
                type Vtable = IAudioLfxControl_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    124414242,
                    55298,
                    20355,
                    [186, 246, 64, 157, 156, 161, 27, 254],
                );
            }
            impl IAudioLfxControl {
                pub unsafe fn SetLocalEffectsState<'a>(
                    &self,
                    benabled: impl ::windows::IntoParam<'a, super::SystemServices::BOOL>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        benabled.into_param().abi(),
                    )
                }
                pub unsafe fn GetLocalEffectsState(
                    &self,
                    pbenabled: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pbenabled),
                    )
                }
            }
            impl ::std::convert::From<IAudioLfxControl> for ::windows::IUnknown {
                fn from(value: IAudioLfxControl) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioLfxControl> for ::windows::IUnknown {
                fn from(value: &IAudioLfxControl) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioLfxControl {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioLfxControl {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioLfxControl_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    benabled: super::SystemServices::BOOL,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pbenabled: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioLoudness(::windows::IUnknown);
            impl IAudioLoudness {}
            unsafe impl ::windows::Interface for IAudioLoudness {
                type Vtable = IAudioLoudness_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2106266679,
                    56659,
                    17232,
                    [156, 27, 30, 226, 137, 11, 217, 56],
                );
            }
            impl IAudioLoudness {
                pub unsafe fn GetEnabled(
                    &self,
                    pbenabled: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pbenabled),
                    )
                }
                pub unsafe fn SetEnabled<'a>(
                    &self,
                    benable: impl ::windows::IntoParam<'a, super::SystemServices::BOOL>,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        benable.into_param().abi(),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
            }
            impl ::std::convert::From<IAudioLoudness> for ::windows::IUnknown {
                fn from(value: IAudioLoudness) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioLoudness> for ::windows::IUnknown {
                fn from(value: &IAudioLoudness) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioLoudness {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioLoudness {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioLoudness_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pbenabled: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    benable: super::SystemServices::BOOL,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioMeterInformation(::windows::IUnknown);
            impl IAudioMeterInformation {}
            unsafe impl ::windows::Interface for IAudioMeterInformation {
                type Vtable = IAudioMeterInformation_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3223459574,
                    35943,
                    19291,
                    [157, 0, 208, 8, 231, 62, 0, 100],
                );
            }
            impl IAudioMeterInformation {
                pub unsafe fn GetPeakValue(&self, pfpeak: *mut f32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pfpeak),
                    )
                }
                pub unsafe fn GetMeteringChannelCount(
                    &self,
                    pnchannelcount: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pnchannelcount),
                    )
                }
                pub unsafe fn GetChannelsPeakValues(
                    &self,
                    u32channelcount: u32,
                    afpeakvalues: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(u32channelcount),
                        ::std::mem::transmute(afpeakvalues),
                    )
                }
                pub unsafe fn QueryHardwareSupport(
                    &self,
                    pdwhardwaresupportmask: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwhardwaresupportmask),
                    )
                }
            }
            impl ::std::convert::From<IAudioMeterInformation> for ::windows::IUnknown {
                fn from(value: IAudioMeterInformation) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioMeterInformation> for ::windows::IUnknown {
                fn from(value: &IAudioMeterInformation) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioMeterInformation {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioMeterInformation {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioMeterInformation_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pfpeak: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pnchannelcount: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    u32channelcount: u32,
                    afpeakvalues: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwhardwaresupportmask: *mut u32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioMidrange(::windows::IUnknown);
            impl IAudioMidrange {}
            unsafe impl ::windows::Interface for IAudioMidrange {
                type Vtable = IAudioMidrange_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    1582610135,
                    46155,
                    16601,
                    [154, 158, 230, 145, 217, 206, 110, 223],
                );
            }
            impl IAudioMidrange {
                pub unsafe fn GetChannelCount(&self, pcchannels: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcchannels),
                    )
                }
                pub unsafe fn GetLevelRange(
                    &self,
                    nchannel: u32,
                    pfminleveldb: *mut f32,
                    pfmaxleveldb: *mut f32,
                    pfstepping: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nchannel),
                        ::std::mem::transmute(pfminleveldb),
                        ::std::mem::transmute(pfmaxleveldb),
                        ::std::mem::transmute(pfstepping),
                    )
                }
                pub unsafe fn GetLevel(
                    &self,
                    nchannel: u32,
                    pfleveldb: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nchannel),
                        ::std::mem::transmute(pfleveldb),
                    )
                }
                pub unsafe fn SetLevel(
                    &self,
                    nchannel: u32,
                    fleveldb: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nchannel),
                        ::std::mem::transmute(fleveldb),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
                pub unsafe fn SetLevelUniform(
                    &self,
                    fleveldb: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(fleveldb),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
                pub unsafe fn SetLevelAllChannels(
                    &self,
                    alevelsdb: *mut f32,
                    cchannels: u32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(alevelsdb),
                        ::std::mem::transmute(cchannels),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
            }
            impl ::std::convert::From<IAudioMidrange> for ::windows::IUnknown {
                fn from(value: IAudioMidrange) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioMidrange> for ::windows::IUnknown {
                fn from(value: &IAudioMidrange) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioMidrange {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioMidrange {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            impl ::std::convert::From<IAudioMidrange> for IPerChannelDbLevel {
                fn from(value: IAudioMidrange) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioMidrange> for IPerChannelDbLevel {
                fn from(value: &IAudioMidrange) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IPerChannelDbLevel> for IAudioMidrange {
                fn into_param(self) -> ::windows::Param<'a, IPerChannelDbLevel> {
                    ::windows::Param::Owned(::std::convert::Into::<IPerChannelDbLevel>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IPerChannelDbLevel> for &'a IAudioMidrange {
                fn into_param(self) -> ::windows::Param<'a, IPerChannelDbLevel> {
                    ::windows::Param::Owned(::std::convert::Into::<IPerChannelDbLevel>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioMidrange_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcchannels: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nchannel: u32,
                    pfminleveldb: *mut f32,
                    pfmaxleveldb: *mut f32,
                    pfstepping: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nchannel: u32,
                    pfleveldb: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nchannel: u32,
                    fleveldb: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    fleveldb: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    alevelsdb: *mut f32,
                    cchannels: u32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioMute(::windows::IUnknown);
            impl IAudioMute {}
            unsafe impl ::windows::Interface for IAudioMute {
                type Vtable = IAudioMute_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3745885930,
                    46922,
                    19307,
                    [175, 173, 35, 102, 182, 170, 1, 46],
                );
            }
            impl IAudioMute {
                pub unsafe fn SetMute<'a>(
                    &self,
                    bmuted: impl ::windows::IntoParam<'a, super::SystemServices::BOOL>,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        bmuted.into_param().abi(),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
                pub unsafe fn GetMute(
                    &self,
                    pbmuted: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pbmuted),
                    )
                }
            }
            impl ::std::convert::From<IAudioMute> for ::windows::IUnknown {
                fn from(value: IAudioMute) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioMute> for ::windows::IUnknown {
                fn from(value: &IAudioMute) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioMute {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioMute {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioMute_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    bmuted: super::SystemServices::BOOL,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pbmuted: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioOutputSelector(::windows::IUnknown);
            impl IAudioOutputSelector {}
            unsafe impl ::windows::Interface for IAudioOutputSelector {
                type Vtable = IAudioOutputSelector_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3142672233,
                    38055,
                    17054,
                    [139, 156, 39, 27, 63, 17, 163, 171],
                );
            }
            impl IAudioOutputSelector {
                pub unsafe fn GetSelection(&self, pnidselected: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pnidselected),
                    )
                }
                pub unsafe fn SetSelection(
                    &self,
                    nidselect: u32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nidselect),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
            }
            impl ::std::convert::From<IAudioOutputSelector> for ::windows::IUnknown {
                fn from(value: IAudioOutputSelector) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioOutputSelector> for ::windows::IUnknown {
                fn from(value: &IAudioOutputSelector) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioOutputSelector {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioOutputSelector {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioOutputSelector_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pnidselected: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nidselect: u32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioPeakMeter(::windows::IUnknown);
            impl IAudioPeakMeter {}
            unsafe impl ::windows::Interface for IAudioPeakMeter {
                type Vtable = IAudioPeakMeter_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3715732028,
                    1433,
                    17888,
                    [184, 182, 200, 223, 125, 182, 231, 150],
                );
            }
            impl IAudioPeakMeter {
                pub unsafe fn GetChannelCount(&self, pcchannels: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcchannels),
                    )
                }
                pub unsafe fn GetLevel(
                    &self,
                    nchannel: u32,
                    pflevel: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nchannel),
                        ::std::mem::transmute(pflevel),
                    )
                }
            }
            impl ::std::convert::From<IAudioPeakMeter> for ::windows::IUnknown {
                fn from(value: IAudioPeakMeter) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioPeakMeter> for ::windows::IUnknown {
                fn from(value: &IAudioPeakMeter) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioPeakMeter {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioPeakMeter {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioPeakMeter_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcchannels: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nchannel: u32,
                    pflevel: *mut f32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioRenderClient(::windows::IUnknown);
            impl IAudioRenderClient {}
            unsafe impl ::windows::Interface for IAudioRenderClient {
                type Vtable = IAudioRenderClient_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    4069829884,
                    12614,
                    17539,
                    [167, 191, 173, 220, 167, 194, 96, 226],
                );
            }
            impl IAudioRenderClient {
                pub unsafe fn GetBuffer(
                    &self,
                    numframesrequested: u32,
                    ppdata: *mut *mut u8,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(numframesrequested),
                        ::std::mem::transmute(ppdata),
                    )
                }
                pub unsafe fn ReleaseBuffer(
                    &self,
                    numframeswritten: u32,
                    dwflags: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(numframeswritten),
                        ::std::mem::transmute(dwflags),
                    )
                }
            }
            impl ::std::convert::From<IAudioRenderClient> for ::windows::IUnknown {
                fn from(value: IAudioRenderClient) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioRenderClient> for ::windows::IUnknown {
                fn from(value: &IAudioRenderClient) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioRenderClient {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioRenderClient {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioRenderClient_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    numframesrequested: u32,
                    ppdata: *mut *mut u8,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    numframeswritten: u32,
                    dwflags: u32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioSessionControl(::windows::IUnknown);
            impl IAudioSessionControl {}
            unsafe impl ::windows::Interface for IAudioSessionControl {
                type Vtable = IAudioSessionControl_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    4105282969,
                    29286,
                    17177,
                    [168, 202, 231, 10, 203, 17, 232, 205],
                );
            }
            impl IAudioSessionControl {
                pub unsafe fn GetState(
                    &self,
                    pretval: *mut AudioSessionState,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pretval),
                    )
                }
                pub unsafe fn GetDisplayName(
                    &self,
                    pretval: *mut super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pretval),
                    )
                }
                pub unsafe fn SetDisplayName<'a>(
                    &self,
                    value: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        value.into_param().abi(),
                        ::std::mem::transmute(eventcontext),
                    )
                }
                pub unsafe fn GetIconPath(
                    &self,
                    pretval: *mut super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pretval),
                    )
                }
                pub unsafe fn SetIconPath<'a>(
                    &self,
                    value: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        value.into_param().abi(),
                        ::std::mem::transmute(eventcontext),
                    )
                }
                pub unsafe fn GetGroupingParam(
                    &self,
                    pretval: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pretval),
                    )
                }
                pub unsafe fn SetGroupingParam(
                    &self,
                    r#override: *mut ::windows::Guid,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(r#override),
                        ::std::mem::transmute(eventcontext),
                    )
                }
                pub unsafe fn RegisterAudioSessionNotification<'a>(
                    &self,
                    newnotifications: impl ::windows::IntoParam<'a, IAudioSessionEvents>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(
                        ::windows::Abi::abi(self),
                        newnotifications.into_param().abi(),
                    )
                }
                pub unsafe fn UnregisterAudioSessionNotification<'a>(
                    &self,
                    newnotifications: impl ::windows::IntoParam<'a, IAudioSessionEvents>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).11)(
                        ::windows::Abi::abi(self),
                        newnotifications.into_param().abi(),
                    )
                }
            }
            impl ::std::convert::From<IAudioSessionControl> for ::windows::IUnknown {
                fn from(value: IAudioSessionControl) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioSessionControl> for ::windows::IUnknown {
                fn from(value: &IAudioSessionControl) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioSessionControl {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioSessionControl {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioSessionControl_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pretval: *mut AudioSessionState,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pretval: *mut super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    value: super::SystemServices::PWSTR,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pretval: *mut super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    value: super::SystemServices::PWSTR,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pretval: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    r#override: *mut ::windows::Guid,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    newnotifications: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    newnotifications: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioSessionControl2(::windows::IUnknown);
            impl IAudioSessionControl2 {}
            unsafe impl ::windows::Interface for IAudioSessionControl2 {
                type Vtable = IAudioSessionControl2_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3216506760,
                    29241,
                    20425,
                    [143, 162, 7, 201, 80, 190, 156, 109],
                );
            }
            impl IAudioSessionControl2 {
                pub unsafe fn GetState(
                    &self,
                    pretval: *mut AudioSessionState,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pretval),
                    )
                }
                pub unsafe fn GetDisplayName(
                    &self,
                    pretval: *mut super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pretval),
                    )
                }
                pub unsafe fn SetDisplayName<'a>(
                    &self,
                    value: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        value.into_param().abi(),
                        ::std::mem::transmute(eventcontext),
                    )
                }
                pub unsafe fn GetIconPath(
                    &self,
                    pretval: *mut super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pretval),
                    )
                }
                pub unsafe fn SetIconPath<'a>(
                    &self,
                    value: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        value.into_param().abi(),
                        ::std::mem::transmute(eventcontext),
                    )
                }
                pub unsafe fn GetGroupingParam(
                    &self,
                    pretval: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pretval),
                    )
                }
                pub unsafe fn SetGroupingParam(
                    &self,
                    r#override: *mut ::windows::Guid,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(r#override),
                        ::std::mem::transmute(eventcontext),
                    )
                }
                pub unsafe fn RegisterAudioSessionNotification<'a>(
                    &self,
                    newnotifications: impl ::windows::IntoParam<'a, IAudioSessionEvents>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(
                        ::windows::Abi::abi(self),
                        newnotifications.into_param().abi(),
                    )
                }
                pub unsafe fn UnregisterAudioSessionNotification<'a>(
                    &self,
                    newnotifications: impl ::windows::IntoParam<'a, IAudioSessionEvents>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).11)(
                        ::windows::Abi::abi(self),
                        newnotifications.into_param().abi(),
                    )
                }
                pub unsafe fn GetSessionIdentifier(
                    &self,
                    pretval: *mut super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).12)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pretval),
                    )
                }
                pub unsafe fn GetSessionInstanceIdentifier(
                    &self,
                    pretval: *mut super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).13)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pretval),
                    )
                }
                pub unsafe fn GetProcessId(&self, pretval: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).14)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pretval),
                    )
                }
                pub unsafe fn IsSystemSoundsSession(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).15)(::windows::Abi::abi(self))
                }
                pub unsafe fn SetDuckingPreference<'a>(
                    &self,
                    optout: impl ::windows::IntoParam<'a, super::SystemServices::BOOL>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).16)(
                        ::windows::Abi::abi(self),
                        optout.into_param().abi(),
                    )
                }
            }
            impl ::std::convert::From<IAudioSessionControl2> for ::windows::IUnknown {
                fn from(value: IAudioSessionControl2) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioSessionControl2> for ::windows::IUnknown {
                fn from(value: &IAudioSessionControl2) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioSessionControl2 {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioSessionControl2 {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            impl ::std::convert::From<IAudioSessionControl2> for IAudioSessionControl {
                fn from(value: IAudioSessionControl2) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioSessionControl2> for IAudioSessionControl {
                fn from(value: &IAudioSessionControl2) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IAudioSessionControl> for IAudioSessionControl2 {
                fn into_param(self) -> ::windows::Param<'a, IAudioSessionControl> {
                    ::windows::Param::Owned(::std::convert::Into::<IAudioSessionControl>::into(
                        self,
                    ))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IAudioSessionControl> for &'a IAudioSessionControl2 {
                fn into_param(self) -> ::windows::Param<'a, IAudioSessionControl> {
                    ::windows::Param::Owned(::std::convert::Into::<IAudioSessionControl>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioSessionControl2_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pretval: *mut AudioSessionState,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pretval: *mut super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    value: super::SystemServices::PWSTR,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pretval: *mut super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    value: super::SystemServices::PWSTR,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pretval: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    r#override: *mut ::windows::Guid,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    newnotifications: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    newnotifications: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pretval: *mut super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pretval: *mut super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pretval: *mut u32,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    optout: super::SystemServices::BOOL,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioSessionEnumerator(::windows::IUnknown);
            impl IAudioSessionEnumerator {}
            unsafe impl ::windows::Interface for IAudioSessionEnumerator {
                type Vtable = IAudioSessionEnumerator_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3807755025,
                    1392,
                    16586,
                    [172, 221, 58, 160, 18, 119, 222, 232],
                );
            }
            impl IAudioSessionEnumerator {
                pub unsafe fn GetCount(&self, sessioncount: *mut i32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(sessioncount),
                    )
                }
                pub unsafe fn GetSession(
                    &self,
                    sessioncount: i32,
                    session: *mut ::std::option::Option<IAudioSessionControl>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(sessioncount),
                        ::std::mem::transmute(session),
                    )
                }
            }
            impl ::std::convert::From<IAudioSessionEnumerator> for ::windows::IUnknown {
                fn from(value: IAudioSessionEnumerator) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioSessionEnumerator> for ::windows::IUnknown {
                fn from(value: &IAudioSessionEnumerator) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioSessionEnumerator {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioSessionEnumerator {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioSessionEnumerator_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    sessioncount: *mut i32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    sessioncount: i32,
                    session: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioSessionEvents(::windows::IUnknown);
            impl IAudioSessionEvents {}
            unsafe impl ::windows::Interface for IAudioSessionEvents {
                type Vtable = IAudioSessionEvents_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    613518028,
                    25779,
                    14273,
                    [140, 169, 116, 166, 110, 153, 87, 168],
                );
            }
            impl IAudioSessionEvents {
                pub unsafe fn OnDisplayNameChanged<'a>(
                    &self,
                    newdisplayname: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        newdisplayname.into_param().abi(),
                        ::std::mem::transmute(eventcontext),
                    )
                }
                pub unsafe fn OnIconPathChanged<'a>(
                    &self,
                    newiconpath: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        newiconpath.into_param().abi(),
                        ::std::mem::transmute(eventcontext),
                    )
                }
                pub unsafe fn OnSimpleVolumeChanged<'a>(
                    &self,
                    newvolume: f32,
                    newmute: impl ::windows::IntoParam<'a, super::SystemServices::BOOL>,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(newvolume),
                        newmute.into_param().abi(),
                        ::std::mem::transmute(eventcontext),
                    )
                }
                pub unsafe fn OnChannelVolumeChanged(
                    &self,
                    channelcount: u32,
                    newchannelvolumearray: *mut f32,
                    changedchannel: u32,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(channelcount),
                        ::std::mem::transmute(newchannelvolumearray),
                        ::std::mem::transmute(changedchannel),
                        ::std::mem::transmute(eventcontext),
                    )
                }
                pub unsafe fn OnGroupingParamChanged(
                    &self,
                    newgroupingparam: *mut ::windows::Guid,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(newgroupingparam),
                        ::std::mem::transmute(eventcontext),
                    )
                }
                pub unsafe fn OnStateChanged(
                    &self,
                    newstate: AudioSessionState,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(newstate),
                    )
                }
                pub unsafe fn OnSessionDisconnected(
                    &self,
                    disconnectreason: AudioSessionDisconnectReason,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(disconnectreason),
                    )
                }
            }
            impl ::std::convert::From<IAudioSessionEvents> for ::windows::IUnknown {
                fn from(value: IAudioSessionEvents) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioSessionEvents> for ::windows::IUnknown {
                fn from(value: &IAudioSessionEvents) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioSessionEvents {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioSessionEvents {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioSessionEvents_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    newdisplayname: super::SystemServices::PWSTR,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    newiconpath: super::SystemServices::PWSTR,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    newvolume: f32,
                    newmute: super::SystemServices::BOOL,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    channelcount: u32,
                    newchannelvolumearray: *mut f32,
                    changedchannel: u32,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    newgroupingparam: *mut ::windows::Guid,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    newstate: AudioSessionState,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    disconnectreason: AudioSessionDisconnectReason,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioSessionManager(::windows::IUnknown);
            impl IAudioSessionManager {}
            unsafe impl ::windows::Interface for IAudioSessionManager {
                type Vtable = IAudioSessionManager_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3215553009,
                    19806,
                    16571,
                    [147, 94, 150, 112, 57, 191, 190, 228],
                );
            }
            impl IAudioSessionManager {
                pub unsafe fn GetAudioSessionControl(
                    &self,
                    audiosessionguid: *mut ::windows::Guid,
                    streamflags: u32,
                    sessioncontrol: *mut ::std::option::Option<IAudioSessionControl>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(audiosessionguid),
                        ::std::mem::transmute(streamflags),
                        ::std::mem::transmute(sessioncontrol),
                    )
                }
                pub unsafe fn GetSimpleAudioVolume(
                    &self,
                    audiosessionguid: *mut ::windows::Guid,
                    streamflags: u32,
                    audiovolume: *mut ::std::option::Option<ISimpleAudioVolume>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(audiosessionguid),
                        ::std::mem::transmute(streamflags),
                        ::std::mem::transmute(audiovolume),
                    )
                }
            }
            impl ::std::convert::From<IAudioSessionManager> for ::windows::IUnknown {
                fn from(value: IAudioSessionManager) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioSessionManager> for ::windows::IUnknown {
                fn from(value: &IAudioSessionManager) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioSessionManager {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioSessionManager {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioSessionManager_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    audiosessionguid: *mut ::windows::Guid,
                    streamflags: u32,
                    sessioncontrol: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    audiosessionguid: *mut ::windows::Guid,
                    streamflags: u32,
                    audiovolume: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioSessionManager2(::windows::IUnknown);
            impl IAudioSessionManager2 {}
            unsafe impl ::windows::Interface for IAudioSessionManager2 {
                type Vtable = IAudioSessionManager2_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2007669152,
                    7126,
                    18511,
                    [139, 199, 44, 101, 76, 154, 155, 111],
                );
            }
            impl IAudioSessionManager2 {
                pub unsafe fn GetAudioSessionControl(
                    &self,
                    audiosessionguid: *mut ::windows::Guid,
                    streamflags: u32,
                    sessioncontrol: *mut ::std::option::Option<IAudioSessionControl>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(audiosessionguid),
                        ::std::mem::transmute(streamflags),
                        ::std::mem::transmute(sessioncontrol),
                    )
                }
                pub unsafe fn GetSimpleAudioVolume(
                    &self,
                    audiosessionguid: *mut ::windows::Guid,
                    streamflags: u32,
                    audiovolume: *mut ::std::option::Option<ISimpleAudioVolume>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(audiosessionguid),
                        ::std::mem::transmute(streamflags),
                        ::std::mem::transmute(audiovolume),
                    )
                }
                pub unsafe fn GetSessionEnumerator(
                    &self,
                    sessionenum: *mut ::std::option::Option<IAudioSessionEnumerator>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(sessionenum),
                    )
                }
                pub unsafe fn RegisterSessionNotification<'a>(
                    &self,
                    sessionnotification: impl ::windows::IntoParam<'a, IAudioSessionNotification>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        sessionnotification.into_param().abi(),
                    )
                }
                pub unsafe fn UnregisterSessionNotification<'a>(
                    &self,
                    sessionnotification: impl ::windows::IntoParam<'a, IAudioSessionNotification>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        sessionnotification.into_param().abi(),
                    )
                }
                pub unsafe fn RegisterDuckNotification<'a>(
                    &self,
                    sessionid: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                    ducknotification: impl ::windows::IntoParam<'a, IAudioVolumeDuckNotification>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        sessionid.into_param().abi(),
                        ducknotification.into_param().abi(),
                    )
                }
                pub unsafe fn UnregisterDuckNotification<'a>(
                    &self,
                    ducknotification: impl ::windows::IntoParam<'a, IAudioVolumeDuckNotification>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        ducknotification.into_param().abi(),
                    )
                }
            }
            impl ::std::convert::From<IAudioSessionManager2> for ::windows::IUnknown {
                fn from(value: IAudioSessionManager2) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioSessionManager2> for ::windows::IUnknown {
                fn from(value: &IAudioSessionManager2) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioSessionManager2 {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioSessionManager2 {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            impl ::std::convert::From<IAudioSessionManager2> for IAudioSessionManager {
                fn from(value: IAudioSessionManager2) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioSessionManager2> for IAudioSessionManager {
                fn from(value: &IAudioSessionManager2) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IAudioSessionManager> for IAudioSessionManager2 {
                fn into_param(self) -> ::windows::Param<'a, IAudioSessionManager> {
                    ::windows::Param::Owned(::std::convert::Into::<IAudioSessionManager>::into(
                        self,
                    ))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IAudioSessionManager> for &'a IAudioSessionManager2 {
                fn into_param(self) -> ::windows::Param<'a, IAudioSessionManager> {
                    ::windows::Param::Owned(::std::convert::Into::<IAudioSessionManager>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioSessionManager2_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    audiosessionguid: *mut ::windows::Guid,
                    streamflags: u32,
                    sessioncontrol: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    audiosessionguid: *mut ::windows::Guid,
                    streamflags: u32,
                    audiovolume: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    sessionenum: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    sessionnotification: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    sessionnotification: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    sessionid: super::SystemServices::PWSTR,
                    ducknotification: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    ducknotification: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioSessionNotification(::windows::IUnknown);
            impl IAudioSessionNotification {}
            unsafe impl ::windows::Interface for IAudioSessionNotification {
                type Vtable = IAudioSessionNotification_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    1679675915,
                    19777,
                    18892,
                    [171, 163, 23, 75, 148, 119, 187, 8],
                );
            }
            impl IAudioSessionNotification {
                pub unsafe fn OnSessionCreated<'a>(
                    &self,
                    newsession: impl ::windows::IntoParam<'a, IAudioSessionControl>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        newsession.into_param().abi(),
                    )
                }
            }
            impl ::std::convert::From<IAudioSessionNotification> for ::windows::IUnknown {
                fn from(value: IAudioSessionNotification) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioSessionNotification> for ::windows::IUnknown {
                fn from(value: &IAudioSessionNotification) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioSessionNotification {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioSessionNotification {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioSessionNotification_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    newsession: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioStreamVolume(::windows::IUnknown);
            impl IAudioStreamVolume {}
            unsafe impl ::windows::Interface for IAudioStreamVolume {
                type Vtable = IAudioStreamVolume_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2466334855,
                    9261,
                    16488,
                    [138, 21, 207, 94, 147, 185, 15, 227],
                );
            }
            impl IAudioStreamVolume {
                pub unsafe fn GetChannelCount(&self, pdwcount: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwcount),
                    )
                }
                pub unsafe fn SetChannelVolume(
                    &self,
                    dwindex: u32,
                    flevel: f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwindex),
                        ::std::mem::transmute(flevel),
                    )
                }
                pub unsafe fn GetChannelVolume(
                    &self,
                    dwindex: u32,
                    pflevel: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwindex),
                        ::std::mem::transmute(pflevel),
                    )
                }
                pub unsafe fn SetAllVolumes(
                    &self,
                    dwcount: u32,
                    pfvolumes: *const f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwcount),
                        ::std::mem::transmute(pfvolumes),
                    )
                }
                pub unsafe fn GetAllVolumes(
                    &self,
                    dwcount: u32,
                    pfvolumes: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwcount),
                        ::std::mem::transmute(pfvolumes),
                    )
                }
            }
            impl ::std::convert::From<IAudioStreamVolume> for ::windows::IUnknown {
                fn from(value: IAudioStreamVolume) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioStreamVolume> for ::windows::IUnknown {
                fn from(value: &IAudioStreamVolume) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioStreamVolume {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioStreamVolume {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioStreamVolume_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwcount: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwindex: u32,
                    flevel: f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwindex: u32,
                    pflevel: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwcount: u32,
                    pfvolumes: *const f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwcount: u32,
                    pfvolumes: *mut f32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioTreble(::windows::IUnknown);
            impl IAudioTreble {}
            unsafe impl ::windows::Interface for IAudioTreble {
                type Vtable = IAudioTreble_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    175208466,
                    26958,
                    18695,
                    [183, 75, 186, 250, 92, 253, 202, 123],
                );
            }
            impl IAudioTreble {
                pub unsafe fn GetChannelCount(&self, pcchannels: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcchannels),
                    )
                }
                pub unsafe fn GetLevelRange(
                    &self,
                    nchannel: u32,
                    pfminleveldb: *mut f32,
                    pfmaxleveldb: *mut f32,
                    pfstepping: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nchannel),
                        ::std::mem::transmute(pfminleveldb),
                        ::std::mem::transmute(pfmaxleveldb),
                        ::std::mem::transmute(pfstepping),
                    )
                }
                pub unsafe fn GetLevel(
                    &self,
                    nchannel: u32,
                    pfleveldb: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nchannel),
                        ::std::mem::transmute(pfleveldb),
                    )
                }
                pub unsafe fn SetLevel(
                    &self,
                    nchannel: u32,
                    fleveldb: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nchannel),
                        ::std::mem::transmute(fleveldb),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
                pub unsafe fn SetLevelUniform(
                    &self,
                    fleveldb: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(fleveldb),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
                pub unsafe fn SetLevelAllChannels(
                    &self,
                    alevelsdb: *mut f32,
                    cchannels: u32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(alevelsdb),
                        ::std::mem::transmute(cchannels),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
            }
            impl ::std::convert::From<IAudioTreble> for ::windows::IUnknown {
                fn from(value: IAudioTreble) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioTreble> for ::windows::IUnknown {
                fn from(value: &IAudioTreble) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioTreble {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioTreble {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            impl ::std::convert::From<IAudioTreble> for IPerChannelDbLevel {
                fn from(value: IAudioTreble) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioTreble> for IPerChannelDbLevel {
                fn from(value: &IAudioTreble) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IPerChannelDbLevel> for IAudioTreble {
                fn into_param(self) -> ::windows::Param<'a, IPerChannelDbLevel> {
                    ::windows::Param::Owned(::std::convert::Into::<IPerChannelDbLevel>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IPerChannelDbLevel> for &'a IAudioTreble {
                fn into_param(self) -> ::windows::Param<'a, IPerChannelDbLevel> {
                    ::windows::Param::Owned(::std::convert::Into::<IPerChannelDbLevel>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioTreble_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcchannels: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nchannel: u32,
                    pfminleveldb: *mut f32,
                    pfmaxleveldb: *mut f32,
                    pfstepping: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nchannel: u32,
                    pfleveldb: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nchannel: u32,
                    fleveldb: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    fleveldb: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    alevelsdb: *mut f32,
                    cchannels: u32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioVolumeDuckNotification(::windows::IUnknown);
            impl IAudioVolumeDuckNotification {}
            unsafe impl ::windows::Interface for IAudioVolumeDuckNotification {
                type Vtable = IAudioVolumeDuckNotification_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3283256532,
                    27961,
                    17241,
                    [179, 207, 181, 109, 219, 59, 179, 156],
                );
            }
            impl IAudioVolumeDuckNotification {
                pub unsafe fn OnVolumeDuckNotification<'a>(
                    &self,
                    sessionid: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                    countcommunicationsessions: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        sessionid.into_param().abi(),
                        ::std::mem::transmute(countcommunicationsessions),
                    )
                }
                pub unsafe fn OnVolumeUnduckNotification<'a>(
                    &self,
                    sessionid: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        sessionid.into_param().abi(),
                    )
                }
            }
            impl ::std::convert::From<IAudioVolumeDuckNotification> for ::windows::IUnknown {
                fn from(value: IAudioVolumeDuckNotification) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioVolumeDuckNotification> for ::windows::IUnknown {
                fn from(value: &IAudioVolumeDuckNotification) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioVolumeDuckNotification {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioVolumeDuckNotification {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioVolumeDuckNotification_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    sessionid: super::SystemServices::PWSTR,
                    countcommunicationsessions: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    sessionid: super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IAudioVolumeLevel(::windows::IUnknown);
            impl IAudioVolumeLevel {}
            unsafe impl ::windows::Interface for IAudioVolumeLevel {
                type Vtable = IAudioVolumeLevel_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2142745743,
                    21277,
                    17570,
                    [188, 179, 90, 213, 161, 52, 179, 220],
                );
            }
            impl IAudioVolumeLevel {
                pub unsafe fn GetChannelCount(&self, pcchannels: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcchannels),
                    )
                }
                pub unsafe fn GetLevelRange(
                    &self,
                    nchannel: u32,
                    pfminleveldb: *mut f32,
                    pfmaxleveldb: *mut f32,
                    pfstepping: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nchannel),
                        ::std::mem::transmute(pfminleveldb),
                        ::std::mem::transmute(pfmaxleveldb),
                        ::std::mem::transmute(pfstepping),
                    )
                }
                pub unsafe fn GetLevel(
                    &self,
                    nchannel: u32,
                    pfleveldb: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nchannel),
                        ::std::mem::transmute(pfleveldb),
                    )
                }
                pub unsafe fn SetLevel(
                    &self,
                    nchannel: u32,
                    fleveldb: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nchannel),
                        ::std::mem::transmute(fleveldb),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
                pub unsafe fn SetLevelUniform(
                    &self,
                    fleveldb: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(fleveldb),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
                pub unsafe fn SetLevelAllChannels(
                    &self,
                    alevelsdb: *mut f32,
                    cchannels: u32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(alevelsdb),
                        ::std::mem::transmute(cchannels),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
            }
            impl ::std::convert::From<IAudioVolumeLevel> for ::windows::IUnknown {
                fn from(value: IAudioVolumeLevel) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioVolumeLevel> for ::windows::IUnknown {
                fn from(value: &IAudioVolumeLevel) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IAudioVolumeLevel {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IAudioVolumeLevel {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            impl ::std::convert::From<IAudioVolumeLevel> for IPerChannelDbLevel {
                fn from(value: IAudioVolumeLevel) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IAudioVolumeLevel> for IPerChannelDbLevel {
                fn from(value: &IAudioVolumeLevel) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IPerChannelDbLevel> for IAudioVolumeLevel {
                fn into_param(self) -> ::windows::Param<'a, IPerChannelDbLevel> {
                    ::windows::Param::Owned(::std::convert::Into::<IPerChannelDbLevel>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, IPerChannelDbLevel> for &'a IAudioVolumeLevel {
                fn into_param(self) -> ::windows::Param<'a, IPerChannelDbLevel> {
                    ::windows::Param::Owned(::std::convert::Into::<IPerChannelDbLevel>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IAudioVolumeLevel_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcchannels: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nchannel: u32,
                    pfminleveldb: *mut f32,
                    pfmaxleveldb: *mut f32,
                    pfstepping: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nchannel: u32,
                    pfleveldb: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nchannel: u32,
                    fleveldb: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    fleveldb: f32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    alevelsdb: *mut f32,
                    cchannels: u32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IChannelAudioVolume(::windows::IUnknown);
            impl IChannelAudioVolume {}
            unsafe impl ::windows::Interface for IChannelAudioVolume {
                type Vtable = IChannelAudioVolume_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    471173217,
                    46387,
                    19248,
                    [177, 207, 232, 83, 229, 28, 89, 184],
                );
            }
            impl IChannelAudioVolume {
                pub unsafe fn GetChannelCount(&self, pdwcount: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdwcount),
                    )
                }
                pub unsafe fn SetChannelVolume(
                    &self,
                    dwindex: u32,
                    flevel: f32,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwindex),
                        ::std::mem::transmute(flevel),
                        ::std::mem::transmute(eventcontext),
                    )
                }
                pub unsafe fn GetChannelVolume(
                    &self,
                    dwindex: u32,
                    pflevel: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwindex),
                        ::std::mem::transmute(pflevel),
                    )
                }
                pub unsafe fn SetAllVolumes(
                    &self,
                    dwcount: u32,
                    pfvolumes: *const f32,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwcount),
                        ::std::mem::transmute(pfvolumes),
                        ::std::mem::transmute(eventcontext),
                    )
                }
                pub unsafe fn GetAllVolumes(
                    &self,
                    dwcount: u32,
                    pfvolumes: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwcount),
                        ::std::mem::transmute(pfvolumes),
                    )
                }
            }
            impl ::std::convert::From<IChannelAudioVolume> for ::windows::IUnknown {
                fn from(value: IChannelAudioVolume) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IChannelAudioVolume> for ::windows::IUnknown {
                fn from(value: &IChannelAudioVolume) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IChannelAudioVolume {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IChannelAudioVolume {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IChannelAudioVolume_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdwcount: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwindex: u32,
                    flevel: f32,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwindex: u32,
                    pflevel: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwcount: u32,
                    pfvolumes: *const f32,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwcount: u32,
                    pfvolumes: *mut f32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IConnector(::windows::IUnknown);
            impl IConnector {}
            unsafe impl ::windows::Interface for IConnector {
                type Vtable = IConnector_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2620145752,
                    9205,
                    16862,
                    [135, 122, 223, 58, 242, 54, 160, 158],
                );
            }
            impl IConnector {
                pub unsafe fn GetType(&self, ptype: *mut ConnectorType) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(ptype),
                    )
                }
                pub unsafe fn GetDataFlow(&self, pflow: *mut DataFlow) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pflow),
                    )
                }
                pub unsafe fn ConnectTo<'a>(
                    &self,
                    pconnectto: impl ::windows::IntoParam<'a, IConnector>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        pconnectto.into_param().abi(),
                    )
                }
                pub unsafe fn Disconnect(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(::windows::Abi::abi(self))
                }
                pub unsafe fn IsConnected(
                    &self,
                    pbconnected: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pbconnected),
                    )
                }
                pub unsafe fn GetConnectedTo(
                    &self,
                    ppconto: *mut ::std::option::Option<IConnector>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(ppconto),
                    )
                }
                pub unsafe fn GetConnectorIdConnectedTo(
                    &self,
                    ppwstrconnectorid: *mut super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(ppwstrconnectorid),
                    )
                }
                pub unsafe fn GetDeviceIdConnectedTo(
                    &self,
                    ppwstrdeviceid: *mut super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(ppwstrdeviceid),
                    )
                }
            }
            impl ::std::convert::From<IConnector> for ::windows::IUnknown {
                fn from(value: IConnector) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IConnector> for ::windows::IUnknown {
                fn from(value: &IConnector) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IConnector {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IConnector {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IConnector_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    ptype: *mut ConnectorType,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pflow: *mut DataFlow,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pconnectto: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pbconnected: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    ppconto: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    ppwstrconnectorid: *mut super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    ppwstrdeviceid: *mut super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IControlChangeNotify(::windows::IUnknown);
            impl IControlChangeNotify {}
            unsafe impl ::windows::Interface for IControlChangeNotify {
                type Vtable = IControlChangeNotify_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2694124525,
                    50953,
                    19745,
                    [189, 123, 95, 52, 196, 127, 57, 71],
                );
            }
            impl IControlChangeNotify {
                pub unsafe fn OnNotify(
                    &self,
                    dwsenderprocessid: u32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwsenderprocessid),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
            }
            impl ::std::convert::From<IControlChangeNotify> for ::windows::IUnknown {
                fn from(value: IControlChangeNotify) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IControlChangeNotify> for ::windows::IUnknown {
                fn from(value: &IControlChangeNotify) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IControlChangeNotify {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IControlChangeNotify {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IControlChangeNotify_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwsenderprocessid: u32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IControlInterface(::windows::IUnknown);
            impl IControlInterface {}
            unsafe impl ::windows::Interface for IControlInterface {
                type Vtable = IControlInterface_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    1171487807,
                    20800,
                    17482,
                    [174, 36, 64, 7, 137, 243, 203, 243],
                );
            }
            impl IControlInterface {
                pub unsafe fn GetName(
                    &self,
                    ppwstrname: *mut super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(ppwstrname),
                    )
                }
                pub unsafe fn GetIID(&self, piid: *mut ::windows::Guid) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(piid),
                    )
                }
            }
            impl ::std::convert::From<IControlInterface> for ::windows::IUnknown {
                fn from(value: IControlInterface) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IControlInterface> for ::windows::IUnknown {
                fn from(value: &IControlInterface) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IControlInterface {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IControlInterface {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IControlInterface_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    ppwstrname: *mut super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    piid: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDeviceSpecificProperty(::windows::IUnknown);
            impl IDeviceSpecificProperty {}
            unsafe impl ::windows::Interface for IDeviceSpecificProperty {
                type Vtable = IDeviceSpecificProperty_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    992132287,
                    9606,
                    19184,
                    [133, 131, 32, 93, 57, 27, 128, 124],
                );
            }
            impl IDeviceSpecificProperty {
                pub unsafe fn GetType(&self, pvtype: *mut u16) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pvtype),
                    )
                }
                pub unsafe fn GetValue(
                    &self,
                    pvvalue: *mut ::std::ffi::c_void,
                    pcbvalue: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pvvalue),
                        ::std::mem::transmute(pcbvalue),
                    )
                }
                pub unsafe fn SetValue(
                    &self,
                    pvvalue: *mut ::std::ffi::c_void,
                    cbvalue: u32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pvvalue),
                        ::std::mem::transmute(cbvalue),
                        ::std::mem::transmute(pguideventcontext),
                    )
                }
                pub unsafe fn Get4BRange(
                    &self,
                    plmin: *mut i32,
                    plmax: *mut i32,
                    plstepping: *mut i32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(plmin),
                        ::std::mem::transmute(plmax),
                        ::std::mem::transmute(plstepping),
                    )
                }
            }
            impl ::std::convert::From<IDeviceSpecificProperty> for ::windows::IUnknown {
                fn from(value: IDeviceSpecificProperty) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDeviceSpecificProperty> for ::windows::IUnknown {
                fn from(value: &IDeviceSpecificProperty) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDeviceSpecificProperty {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDeviceSpecificProperty {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDeviceSpecificProperty_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pvtype: *mut u16,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pvvalue: *mut ::std::ffi::c_void,
                    pcbvalue: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pvvalue: *mut ::std::ffi::c_void,
                    cbvalue: u32,
                    pguideventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    plmin: *mut i32,
                    plmax: *mut i32,
                    plstepping: *mut i32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IDeviceTopology(::windows::IUnknown);
            impl IDeviceTopology {}
            unsafe impl ::windows::Interface for IDeviceTopology {
                type Vtable = IDeviceTopology_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    705118334,
                    25751,
                    18968,
                    [151, 135, 50, 247, 155, 208, 217, 143],
                );
            }
            impl IDeviceTopology {
                pub unsafe fn GetConnectorCount(&self, pcount: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcount),
                    )
                }
                pub unsafe fn GetConnector(
                    &self,
                    nindex: u32,
                    ppconnector: *mut ::std::option::Option<IConnector>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nindex),
                        ::std::mem::transmute(ppconnector),
                    )
                }
                pub unsafe fn GetSubunitCount(&self, pcount: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcount),
                    )
                }
                pub unsafe fn GetSubunit(
                    &self,
                    nindex: u32,
                    ppsubunit: *mut ::std::option::Option<ISubunit>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nindex),
                        ::std::mem::transmute(ppsubunit),
                    )
                }
                pub unsafe fn GetPartById(
                    &self,
                    nid: u32,
                    pppart: *mut ::std::option::Option<IPart>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nid),
                        ::std::mem::transmute(pppart),
                    )
                }
                pub unsafe fn GetDeviceId(
                    &self,
                    ppwstrdeviceid: *mut super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(ppwstrdeviceid),
                    )
                }
                pub unsafe fn GetSignalPath<'a>(
                    &self,
                    pipartfrom: impl ::windows::IntoParam<'a, IPart>,
                    pipartto: impl ::windows::IntoParam<'a, IPart>,
                    brejectmixedpaths: impl ::windows::IntoParam<'a, super::SystemServices::BOOL>,
                    ppparts: *mut ::std::option::Option<IPartsList>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        pipartfrom.into_param().abi(),
                        pipartto.into_param().abi(),
                        brejectmixedpaths.into_param().abi(),
                        ::std::mem::transmute(ppparts),
                    )
                }
            }
            impl ::std::convert::From<IDeviceTopology> for ::windows::IUnknown {
                fn from(value: IDeviceTopology) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IDeviceTopology> for ::windows::IUnknown {
                fn from(value: &IDeviceTopology) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IDeviceTopology {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IDeviceTopology {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IDeviceTopology_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcount: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nindex: u32,
                    ppconnector: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcount: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nindex: u32,
                    ppsubunit: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nid: u32,
                    pppart: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    ppwstrdeviceid: *mut super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pipartfrom: ::windows::RawPtr,
                    pipartto: ::windows::RawPtr,
                    brejectmixedpaths: super::SystemServices::BOOL,
                    ppparts: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IHardwareAudioEngineBase(::windows::IUnknown);
            impl IHardwareAudioEngineBase {}
            unsafe impl ::windows::Interface for IHardwareAudioEngineBase {
                type Vtable = IHardwareAudioEngineBase_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3990676452,
                    62401,
                    17722,
                    [180, 97, 34, 53, 99, 203, 216, 134],
                );
            }
            impl IHardwareAudioEngineBase {
                pub unsafe fn GetAvailableOffloadConnectorCount<'a>(
                    &self,
                    _pwstrdeviceid: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                    _uconnectorid: u32,
                    _pavailableconnectorinstancecount: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        _pwstrdeviceid.into_param().abi(),
                        ::std::mem::transmute(_uconnectorid),
                        ::std::mem::transmute(_pavailableconnectorinstancecount),
                    )
                }
                pub unsafe fn GetEngineFormat<'a>(
                    &self,
                    pdevice: impl ::windows::IntoParam<'a, IMMDevice>,
                    _brequestdeviceformat: impl ::windows::IntoParam<'a, super::SystemServices::BOOL>,
                    _ppwfxformat: *mut *mut super::Multimedia::WAVEFORMATEX,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        pdevice.into_param().abi(),
                        _brequestdeviceformat.into_param().abi(),
                        ::std::mem::transmute(_ppwfxformat),
                    )
                }
                pub unsafe fn SetEngineDeviceFormat<'a>(
                    &self,
                    pdevice: impl ::windows::IntoParam<'a, IMMDevice>,
                    _pwfxformat: *mut super::Multimedia::WAVEFORMATEX,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        pdevice.into_param().abi(),
                        ::std::mem::transmute(_pwfxformat),
                    )
                }
                pub unsafe fn SetGfxState<'a>(
                    &self,
                    pdevice: impl ::windows::IntoParam<'a, IMMDevice>,
                    _benable: impl ::windows::IntoParam<'a, super::SystemServices::BOOL>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        pdevice.into_param().abi(),
                        _benable.into_param().abi(),
                    )
                }
                pub unsafe fn GetGfxState<'a>(
                    &self,
                    pdevice: impl ::windows::IntoParam<'a, IMMDevice>,
                    _pbenable: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        pdevice.into_param().abi(),
                        ::std::mem::transmute(_pbenable),
                    )
                }
            }
            impl ::std::convert::From<IHardwareAudioEngineBase> for ::windows::IUnknown {
                fn from(value: IHardwareAudioEngineBase) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IHardwareAudioEngineBase> for ::windows::IUnknown {
                fn from(value: &IHardwareAudioEngineBase) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IHardwareAudioEngineBase {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IHardwareAudioEngineBase {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IHardwareAudioEngineBase_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    _pwstrdeviceid: super::SystemServices::PWSTR,
                    _uconnectorid: u32,
                    _pavailableconnectorinstancecount: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdevice: ::windows::RawPtr,
                    _brequestdeviceformat: super::SystemServices::BOOL,
                    _ppwfxformat: *mut *mut super::Multimedia::WAVEFORMATEX,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdevice: ::windows::RawPtr,
                    _pwfxformat: *mut super::Multimedia::WAVEFORMATEX,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdevice: ::windows::RawPtr,
                    _benable: super::SystemServices::BOOL,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdevice: ::windows::RawPtr,
                    _pbenable: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IKsFormatSupport(::windows::IUnknown);
            impl IKsFormatSupport {}
            unsafe impl ::windows::Interface for IKsFormatSupport {
                type Vtable = IKsFormatSupport_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    1018472093,
                    47983,
                    19755,
                    [149, 183, 69, 45, 44, 21, 93, 181],
                );
            }
            impl IKsFormatSupport {
                pub unsafe fn IsFormatSupported(
                    &self,
                    pksformat: *mut KSDATAFORMAT,
                    cbformat: u32,
                    pbsupported: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pksformat),
                        ::std::mem::transmute(cbformat),
                        ::std::mem::transmute(pbsupported),
                    )
                }
                pub unsafe fn GetDevicePreferredFormat(
                    &self,
                    ppksformat: *mut *mut KSDATAFORMAT,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(ppksformat),
                    )
                }
            }
            impl ::std::convert::From<IKsFormatSupport> for ::windows::IUnknown {
                fn from(value: IKsFormatSupport) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IKsFormatSupport> for ::windows::IUnknown {
                fn from(value: &IKsFormatSupport) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IKsFormatSupport {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IKsFormatSupport {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IKsFormatSupport_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pksformat: *mut KSDATAFORMAT,
                    cbformat: u32,
                    pbsupported: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    ppksformat: *mut *mut KSDATAFORMAT,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IKsJackContainerId(::windows::IUnknown);
            impl IKsJackContainerId {}
            unsafe impl ::windows::Interface for IKsJackContainerId {
                type Vtable = IKsJackContainerId_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3382375523,
                    54825,
                    20164,
                    [140, 0, 229, 77, 104, 21, 66, 72],
                );
            }
            impl IKsJackContainerId {
                pub unsafe fn GetJackContainerId(
                    &self,
                    pjackcontainerid: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pjackcontainerid),
                    )
                }
            }
            impl ::std::convert::From<IKsJackContainerId> for ::windows::IUnknown {
                fn from(value: IKsJackContainerId) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IKsJackContainerId> for ::windows::IUnknown {
                fn from(value: &IKsJackContainerId) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IKsJackContainerId {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IKsJackContainerId {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IKsJackContainerId_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pjackcontainerid: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IKsJackDescription(::windows::IUnknown);
            impl IKsJackDescription {}
            unsafe impl ::windows::Interface for IKsJackDescription {
                type Vtable = IKsJackDescription_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    1158281047,
                    11590,
                    17975,
                    [142, 98, 206, 125, 185, 68, 245, 123],
                );
            }
            impl IKsJackDescription {
                pub unsafe fn GetJackCount(&self, pcjacks: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcjacks),
                    )
                }
                pub unsafe fn GetJackDescription(
                    &self,
                    njack: u32,
                    pdescription: *mut KSJACK_DESCRIPTION,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(njack),
                        ::std::mem::transmute(pdescription),
                    )
                }
            }
            impl ::std::convert::From<IKsJackDescription> for ::windows::IUnknown {
                fn from(value: IKsJackDescription) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IKsJackDescription> for ::windows::IUnknown {
                fn from(value: &IKsJackDescription) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IKsJackDescription {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IKsJackDescription {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IKsJackDescription_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcjacks: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    njack: u32,
                    pdescription: *mut KSJACK_DESCRIPTION,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IKsJackDescription2(::windows::IUnknown);
            impl IKsJackDescription2 {}
            unsafe impl ::windows::Interface for IKsJackDescription2 {
                type Vtable = IKsJackDescription2_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    1200568987,
                    57545,
                    18471,
                    [146, 40, 111, 85, 5, 255, 231, 106],
                );
            }
            impl IKsJackDescription2 {
                pub unsafe fn GetJackCount(&self, pcjacks: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcjacks),
                    )
                }
                pub unsafe fn GetJackDescription2(
                    &self,
                    njack: u32,
                    pdescription2: *mut KSJACK_DESCRIPTION2,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(njack),
                        ::std::mem::transmute(pdescription2),
                    )
                }
            }
            impl ::std::convert::From<IKsJackDescription2> for ::windows::IUnknown {
                fn from(value: IKsJackDescription2) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IKsJackDescription2> for ::windows::IUnknown {
                fn from(value: &IKsJackDescription2) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IKsJackDescription2 {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IKsJackDescription2 {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IKsJackDescription2_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcjacks: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    njack: u32,
                    pdescription2: *mut KSJACK_DESCRIPTION2,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IKsJackSinkInformation(::windows::IUnknown);
            impl IKsJackSinkInformation {}
            unsafe impl ::windows::Interface for IKsJackSinkInformation {
                type Vtable = IKsJackSinkInformation_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3653071597,
                    10511,
                    17793,
                    [159, 243, 97, 2, 122, 143, 229, 50],
                );
            }
            impl IKsJackSinkInformation {
                pub unsafe fn GetJackSinkInformation(
                    &self,
                    pjacksinkinformation: *mut KSJACK_SINK_INFORMATION,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pjacksinkinformation),
                    )
                }
            }
            impl ::std::convert::From<IKsJackSinkInformation> for ::windows::IUnknown {
                fn from(value: IKsJackSinkInformation) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IKsJackSinkInformation> for ::windows::IUnknown {
                fn from(value: &IKsJackSinkInformation) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IKsJackSinkInformation {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IKsJackSinkInformation {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IKsJackSinkInformation_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pjacksinkinformation: *mut KSJACK_SINK_INFORMATION,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IMMDeviceActivator(::windows::IUnknown);
            impl IMMDeviceActivator {}
            unsafe impl ::windows::Interface for IMMDeviceActivator {
                type Vtable = IMMDeviceActivator_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    990711460,
                    53417,
                    19214,
                    [147, 91, 9, 81, 103, 70, 250, 192],
                );
            }
            impl IMMDeviceActivator {
                pub unsafe fn Activate<'a>(
                    &self,
                    iid: *const ::windows::Guid,
                    pdevice: impl ::windows::IntoParam<'a, IMMDevice>,
                    pactivationparams: *mut super::StructuredStorage::PROPVARIANT,
                    ppinterface: *mut *mut ::std::ffi::c_void,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(iid),
                        pdevice.into_param().abi(),
                        ::std::mem::transmute(pactivationparams),
                        ::std::mem::transmute(ppinterface),
                    )
                }
            }
            impl ::std::convert::From<IMMDeviceActivator> for ::windows::IUnknown {
                fn from(value: IMMDeviceActivator) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IMMDeviceActivator> for ::windows::IUnknown {
                fn from(value: &IMMDeviceActivator) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IMMDeviceActivator {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IMMDeviceActivator {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IMMDeviceActivator_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: *const ::windows::Guid,
                    pdevice: ::windows::RawPtr,
                    pactivationparams: *mut super::StructuredStorage::PROPVARIANT_abi,
                    ppinterface: *mut *mut ::std::ffi::c_void,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IMMDeviceEnumerator(::windows::IUnknown);
            impl IMMDeviceEnumerator {}
            unsafe impl ::windows::Interface for IMMDeviceEnumerator {
                type Vtable = IMMDeviceEnumerator_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2841011410,
                    38420,
                    20277,
                    [167, 70, 222, 141, 182, 54, 23, 230],
                );
            }
            impl IMMDeviceEnumerator {
                pub unsafe fn EnumAudioEndpoints(
                    &self,
                    dataflow: EDataFlow,
                    dwstatemask: u32,
                    ppdevices: *mut ::std::option::Option<IMMDeviceCollection>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dataflow),
                        ::std::mem::transmute(dwstatemask),
                        ::std::mem::transmute(ppdevices),
                    )
                }
                pub unsafe fn GetDefaultAudioEndpoint(
                    &self,
                    dataflow: EDataFlow,
                    role: ERole,
                    ppendpoint: *mut ::std::option::Option<IMMDevice>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dataflow),
                        ::std::mem::transmute(role),
                        ::std::mem::transmute(ppendpoint),
                    )
                }
                pub unsafe fn GetDevice<'a>(
                    &self,
                    pwstrid: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                    ppdevice: *mut ::std::option::Option<IMMDevice>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        pwstrid.into_param().abi(),
                        ::std::mem::transmute(ppdevice),
                    )
                }
                pub unsafe fn RegisterEndpointNotificationCallback<'a>(
                    &self,
                    pclient: impl ::windows::IntoParam<'a, IMMNotificationClient>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        pclient.into_param().abi(),
                    )
                }
                pub unsafe fn UnregisterEndpointNotificationCallback<'a>(
                    &self,
                    pclient: impl ::windows::IntoParam<'a, IMMNotificationClient>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        pclient.into_param().abi(),
                    )
                }
            }
            impl ::std::convert::From<IMMDeviceEnumerator> for ::windows::IUnknown {
                fn from(value: IMMDeviceEnumerator) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IMMDeviceEnumerator> for ::windows::IUnknown {
                fn from(value: &IMMDeviceEnumerator) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IMMDeviceEnumerator {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IMMDeviceEnumerator {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IMMDeviceEnumerator_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dataflow: EDataFlow,
                    dwstatemask: u32,
                    ppdevices: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dataflow: EDataFlow,
                    role: ERole,
                    ppendpoint: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pwstrid: super::SystemServices::PWSTR,
                    ppdevice: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pclient: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pclient: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IMMEndpoint(::windows::IUnknown);
            impl IMMEndpoint {}
            unsafe impl ::windows::Interface for IMMEndpoint {
                type Vtable = IMMEndpoint_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    467703688,
                    26772,
                    16521,
                    [133, 134, 154, 42, 108, 38, 90, 197],
                );
            }
            impl IMMEndpoint {
                pub unsafe fn GetDataFlow(&self, pdataflow: *mut EDataFlow) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pdataflow),
                    )
                }
            }
            impl ::std::convert::From<IMMEndpoint> for ::windows::IUnknown {
                fn from(value: IMMEndpoint) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IMMEndpoint> for ::windows::IUnknown {
                fn from(value: &IMMEndpoint) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IMMEndpoint {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IMMEndpoint {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IMMEndpoint_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pdataflow: *mut EDataFlow,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IMMNotificationClient(::windows::IUnknown);
            impl IMMNotificationClient {}
            unsafe impl ::windows::Interface for IMMNotificationClient {
                type Vtable = IMMNotificationClient_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2039606985,
                    32393,
                    19845,
                    [131, 144, 108, 112, 60, 236, 96, 192],
                );
            }
            impl IMMNotificationClient {
                pub unsafe fn OnDeviceStateChanged<'a>(
                    &self,
                    pwstrdeviceid: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                    dwnewstate: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        pwstrdeviceid.into_param().abi(),
                        ::std::mem::transmute(dwnewstate),
                    )
                }
                pub unsafe fn OnDeviceAdded<'a>(
                    &self,
                    pwstrdeviceid: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        pwstrdeviceid.into_param().abi(),
                    )
                }
                pub unsafe fn OnDeviceRemoved<'a>(
                    &self,
                    pwstrdeviceid: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        pwstrdeviceid.into_param().abi(),
                    )
                }
                pub unsafe fn OnDefaultDeviceChanged<'a>(
                    &self,
                    flow: EDataFlow,
                    role: ERole,
                    pwstrdefaultdeviceid: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(flow),
                        ::std::mem::transmute(role),
                        pwstrdefaultdeviceid.into_param().abi(),
                    )
                }
                pub unsafe fn OnPropertyValueChanged<'a>(
                    &self,
                    pwstrdeviceid: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                    key: impl ::windows::IntoParam<'a, super::WindowsPropertiesSystem::PROPERTYKEY>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        pwstrdeviceid.into_param().abi(),
                        key.into_param().abi(),
                    )
                }
            }
            impl ::std::convert::From<IMMNotificationClient> for ::windows::IUnknown {
                fn from(value: IMMNotificationClient) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IMMNotificationClient> for ::windows::IUnknown {
                fn from(value: &IMMNotificationClient) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IMMNotificationClient {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IMMNotificationClient {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IMMNotificationClient_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pwstrdeviceid: super::SystemServices::PWSTR,
                    dwnewstate: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pwstrdeviceid: super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pwstrdeviceid: super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    flow: EDataFlow,
                    role: ERole,
                    pwstrdefaultdeviceid: super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pwstrdeviceid: super::SystemServices::PWSTR,
                    key: super::WindowsPropertiesSystem::PROPERTYKEY,
                ) -> ::windows::HRESULT,
            );
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct INTERLEAVED_AUDIO_FORMAT_INFORMATION {
                pub Size: u32,
                pub PrimaryChannelCount: u32,
                pub PrimaryChannelStartPosition: u32,
                pub PrimaryChannelMask: u32,
                pub InterleavedChannelCount: u32,
                pub InterleavedChannelStartPosition: u32,
                pub InterleavedChannelMask: u32,
            }
            impl INTERLEAVED_AUDIO_FORMAT_INFORMATION {}
            impl ::std::default::Default for INTERLEAVED_AUDIO_FORMAT_INFORMATION {
                fn default() -> Self {
                    Self {
                        Size: 0,
                        PrimaryChannelCount: 0,
                        PrimaryChannelStartPosition: 0,
                        PrimaryChannelMask: 0,
                        InterleavedChannelCount: 0,
                        InterleavedChannelStartPosition: 0,
                        InterleavedChannelMask: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for INTERLEAVED_AUDIO_FORMAT_INFORMATION {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("INTERLEAVED_AUDIO_FORMAT_INFORMATION")
                        .field("Size", &format_args!("{:?}", self.Size))
                        .field(
                            "PrimaryChannelCount",
                            &format_args!("{:?}", self.PrimaryChannelCount),
                        )
                        .field(
                            "PrimaryChannelStartPosition",
                            &format_args!("{:?}", self.PrimaryChannelStartPosition),
                        )
                        .field(
                            "PrimaryChannelMask",
                            &format_args!("{:?}", self.PrimaryChannelMask),
                        )
                        .field(
                            "InterleavedChannelCount",
                            &format_args!("{:?}", self.InterleavedChannelCount),
                        )
                        .field(
                            "InterleavedChannelStartPosition",
                            &format_args!("{:?}", self.InterleavedChannelStartPosition),
                        )
                        .field(
                            "InterleavedChannelMask",
                            &format_args!("{:?}", self.InterleavedChannelMask),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for INTERLEAVED_AUDIO_FORMAT_INFORMATION {
                fn eq(&self, other: &Self) -> bool {
                    self.Size == other.Size
                        && self.PrimaryChannelCount == other.PrimaryChannelCount
                        && self.PrimaryChannelStartPosition == other.PrimaryChannelStartPosition
                        && self.PrimaryChannelMask == other.PrimaryChannelMask
                        && self.InterleavedChannelCount == other.InterleavedChannelCount
                        && self.InterleavedChannelStartPosition
                            == other.InterleavedChannelStartPosition
                        && self.InterleavedChannelMask == other.InterleavedChannelMask
                }
            }
            impl ::std::cmp::Eq for INTERLEAVED_AUDIO_FORMAT_INFORMATION {}
            unsafe impl ::windows::Abi for INTERLEAVED_AUDIO_FORMAT_INFORMATION {
                type Abi = Self;
            }
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IPart(::windows::IUnknown);
            impl IPart {}
            unsafe impl ::windows::Interface for IPart {
                type Vtable = IPart_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2922242276,
                    23498,
                    20269,
                    [170, 70, 93, 19, 248, 253, 179, 169],
                );
            }
            impl IPart {
                pub unsafe fn GetName(
                    &self,
                    ppwstrname: *mut super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(ppwstrname),
                    )
                }
                pub unsafe fn GetLocalId(&self, pnid: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pnid),
                    )
                }
                pub unsafe fn GetGlobalId(
                    &self,
                    ppwstrglobalid: *mut super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(ppwstrglobalid),
                    )
                }
                pub unsafe fn GetPartType(&self, pparttype: *mut PartType) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pparttype),
                    )
                }
                pub unsafe fn GetSubType(
                    &self,
                    psubtype: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(psubtype),
                    )
                }
                pub unsafe fn GetControlInterfaceCount(
                    &self,
                    pcount: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcount),
                    )
                }
                pub unsafe fn GetControlInterface(
                    &self,
                    nindex: u32,
                    ppinterfacedesc: *mut ::std::option::Option<IControlInterface>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nindex),
                        ::std::mem::transmute(ppinterfacedesc),
                    )
                }
                pub unsafe fn EnumPartsIncoming(
                    &self,
                    ppparts: *mut ::std::option::Option<IPartsList>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(ppparts),
                    )
                }
                pub unsafe fn EnumPartsOutgoing(
                    &self,
                    ppparts: *mut ::std::option::Option<IPartsList>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).11)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(ppparts),
                    )
                }
                pub unsafe fn GetTopologyObject(
                    &self,
                    pptopology: *mut ::std::option::Option<IDeviceTopology>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).12)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pptopology),
                    )
                }
                pub unsafe fn Activate(
                    &self,
                    dwclscontext: u32,
                    refiid: *const ::windows::Guid,
                    ppvobject: *mut *mut ::std::ffi::c_void,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).13)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(dwclscontext),
                        ::std::mem::transmute(refiid),
                        ::std::mem::transmute(ppvobject),
                    )
                }
                pub unsafe fn RegisterControlChangeCallback<'a>(
                    &self,
                    riid: *const ::windows::Guid,
                    pnotify: impl ::windows::IntoParam<'a, IControlChangeNotify>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).14)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(riid),
                        pnotify.into_param().abi(),
                    )
                }
                pub unsafe fn UnregisterControlChangeCallback<'a>(
                    &self,
                    pnotify: impl ::windows::IntoParam<'a, IControlChangeNotify>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).15)(
                        ::windows::Abi::abi(self),
                        pnotify.into_param().abi(),
                    )
                }
            }
            impl ::std::convert::From<IPart> for ::windows::IUnknown {
                fn from(value: IPart) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IPart> for ::windows::IUnknown {
                fn from(value: &IPart) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IPart {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IPart {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IPart_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    ppwstrname: *mut super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pnid: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    ppwstrglobalid: *mut super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pparttype: *mut PartType,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    psubtype: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcount: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nindex: u32,
                    ppinterfacedesc: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    ppparts: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    ppparts: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pptopology: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    dwclscontext: u32,
                    refiid: *const ::windows::Guid,
                    ppvobject: *mut *mut ::std::ffi::c_void,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    riid: *const ::windows::Guid,
                    pnotify: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pnotify: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IPartsList(::windows::IUnknown);
            impl IPartsList {}
            unsafe impl ::windows::Interface for IPartsList {
                type Vtable = IPartsList_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    1839891596,
                    24240,
                    17868,
                    [174, 165, 153, 138, 44, 218, 31, 251],
                );
            }
            impl IPartsList {
                pub unsafe fn GetCount(&self, pcount: *mut u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pcount),
                    )
                }
                pub unsafe fn GetPart(
                    &self,
                    nindex: u32,
                    pppart: *mut ::std::option::Option<IPart>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(nindex),
                        ::std::mem::transmute(pppart),
                    )
                }
            }
            impl ::std::convert::From<IPartsList> for ::windows::IUnknown {
                fn from(value: IPartsList) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IPartsList> for ::windows::IUnknown {
                fn from(value: &IPartsList) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IPartsList {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IPartsList {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IPartsList_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pcount: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    nindex: u32,
                    pppart: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct ISimpleAudioVolume(::windows::IUnknown);
            impl ISimpleAudioVolume {}
            unsafe impl ::windows::Interface for ISimpleAudioVolume {
                type Vtable = ISimpleAudioVolume_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2278446232,
                    26838,
                    17637,
                    [146, 21, 109, 164, 126, 248, 131, 216],
                );
            }
            impl ISimpleAudioVolume {
                pub unsafe fn SetMasterVolume(
                    &self,
                    flevel: f32,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(flevel),
                        ::std::mem::transmute(eventcontext),
                    )
                }
                pub unsafe fn GetMasterVolume(&self, pflevel: *mut f32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pflevel),
                    )
                }
                pub unsafe fn SetMute<'a>(
                    &self,
                    bmute: impl ::windows::IntoParam<'a, super::SystemServices::BOOL>,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        bmute.into_param().abi(),
                        ::std::mem::transmute(eventcontext),
                    )
                }
                pub unsafe fn GetMute(
                    &self,
                    pbmute: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pbmute),
                    )
                }
            }
            impl ::std::convert::From<ISimpleAudioVolume> for ::windows::IUnknown {
                fn from(value: ISimpleAudioVolume) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&ISimpleAudioVolume> for ::windows::IUnknown {
                fn from(value: &ISimpleAudioVolume) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for ISimpleAudioVolume {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a ISimpleAudioVolume {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct ISimpleAudioVolume_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    flevel: f32,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pflevel: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    bmute: super::SystemServices::BOOL,
                    eventcontext: *mut ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pbmute: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct ISpatialAudioClient(::windows::IUnknown);
            impl ISpatialAudioClient {}
            unsafe impl ::windows::Interface for ISpatialAudioClient {
                type Vtable = ISpatialAudioClient_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3153649766,
                    43690,
                    18878,
                    [154, 77, 253, 42, 133, 142, 162, 127],
                );
            }
            impl ISpatialAudioClient {
                pub unsafe fn GetStaticObjectPosition(
                    &self,
                    r#type: AudioObjectType,
                    x: *mut f32,
                    y: *mut f32,
                    z: *mut f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(r#type),
                        ::std::mem::transmute(x),
                        ::std::mem::transmute(y),
                        ::std::mem::transmute(z),
                    )
                }
                pub unsafe fn GetNativeStaticObjectTypeMask(
                    &self,
                    mask: *mut AudioObjectType,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(mask),
                    )
                }
                pub unsafe fn GetMaxDynamicObjectCount(
                    &self,
                    value: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(value),
                    )
                }
                pub unsafe fn GetSupportedAudioObjectFormatEnumerator(
                    &self,
                    enumerator: *mut ::std::option::Option<IAudioFormatEnumerator>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(enumerator),
                    )
                }
                pub unsafe fn GetMaxFrameCount(
                    &self,
                    objectformat: *const super::Multimedia::WAVEFORMATEX,
                    framecountperbuffer: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(objectformat),
                        ::std::mem::transmute(framecountperbuffer),
                    )
                }
                pub unsafe fn IsAudioObjectFormatSupported(
                    &self,
                    objectformat: *const super::Multimedia::WAVEFORMATEX,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(objectformat),
                    )
                }
                pub unsafe fn IsSpatialAudioStreamAvailable(
                    &self,
                    streamuuid: *const ::windows::Guid,
                    auxiliaryinfo: *const super::StructuredStorage::PROPVARIANT,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(streamuuid),
                        ::std::mem::transmute(auxiliaryinfo),
                    )
                }
                pub unsafe fn ActivateSpatialAudioStream(
                    &self,
                    activationparams: *const super::StructuredStorage::PROPVARIANT,
                    riid: *const ::windows::Guid,
                    stream: *mut *mut ::std::ffi::c_void,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(activationparams),
                        ::std::mem::transmute(riid),
                        ::std::mem::transmute(stream),
                    )
                }
            }
            impl ::std::convert::From<ISpatialAudioClient> for ::windows::IUnknown {
                fn from(value: ISpatialAudioClient) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&ISpatialAudioClient> for ::windows::IUnknown {
                fn from(value: &ISpatialAudioClient) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for ISpatialAudioClient {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a ISpatialAudioClient {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct ISpatialAudioClient_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    r#type: AudioObjectType,
                    x: *mut f32,
                    y: *mut f32,
                    z: *mut f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    mask: *mut AudioObjectType,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    value: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    enumerator: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    objectformat: *const super::Multimedia::WAVEFORMATEX,
                    framecountperbuffer: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    objectformat: *const super::Multimedia::WAVEFORMATEX,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    streamuuid: *const ::windows::Guid,
                    auxiliaryinfo: *const super::StructuredStorage::PROPVARIANT_abi,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    activationparams: *const super::StructuredStorage::PROPVARIANT_abi,
                    riid: *const ::windows::Guid,
                    stream: *mut *mut ::std::ffi::c_void,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct ISpatialAudioMetadataClient(::windows::IUnknown);
            impl ISpatialAudioMetadataClient {}
            unsafe impl ::windows::Interface for ISpatialAudioMetadataClient {
                type Vtable = ISpatialAudioMetadataClient_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2004699707,
                    63231,
                    18982,
                    [133, 220, 104, 215, 205, 237, 161, 212],
                );
            }
            impl ISpatialAudioMetadataClient {
                pub unsafe fn ActivateSpatialAudioMetadataItems(
                    &self,
                    maxitemcount: u16,
                    framecount: u16,
                    metadataitemsbuffer: *mut ::std::option::Option<
                        ISpatialAudioMetadataItemsBuffer,
                    >,
                    metadataitems: *mut ::std::option::Option<ISpatialAudioMetadataItems>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(maxitemcount),
                        ::std::mem::transmute(framecount),
                        ::std::mem::transmute(metadataitemsbuffer),
                        ::std::mem::transmute(metadataitems),
                    )
                }
                pub unsafe fn GetSpatialAudioMetadataItemsBufferLength(
                    &self,
                    maxitemcount: u16,
                    bufferlength: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(maxitemcount),
                        ::std::mem::transmute(bufferlength),
                    )
                }
                pub unsafe fn ActivateSpatialAudioMetadataWriter(
                    &self,
                    overflowmode: SpatialAudioMetadataWriterOverflowMode,
                    metadatawriter: *mut ::std::option::Option<ISpatialAudioMetadataWriter>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(overflowmode),
                        ::std::mem::transmute(metadatawriter),
                    )
                }
                pub unsafe fn ActivateSpatialAudioMetadataCopier(
                    &self,
                    metadatacopier: *mut ::std::option::Option<ISpatialAudioMetadataCopier>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(metadatacopier),
                    )
                }
                pub unsafe fn ActivateSpatialAudioMetadataReader(
                    &self,
                    metadatareader: *mut ::std::option::Option<ISpatialAudioMetadataReader>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(metadatareader),
                    )
                }
            }
            impl ::std::convert::From<ISpatialAudioMetadataClient> for ::windows::IUnknown {
                fn from(value: ISpatialAudioMetadataClient) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&ISpatialAudioMetadataClient> for ::windows::IUnknown {
                fn from(value: &ISpatialAudioMetadataClient) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for ISpatialAudioMetadataClient {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a ISpatialAudioMetadataClient {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct ISpatialAudioMetadataClient_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    maxitemcount: u16,
                    framecount: u16,
                    metadataitemsbuffer: *mut ::windows::RawPtr,
                    metadataitems: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    maxitemcount: u16,
                    bufferlength: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    overflowmode: SpatialAudioMetadataWriterOverflowMode,
                    metadatawriter: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    metadatacopier: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    metadatareader: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct ISpatialAudioMetadataCopier(::windows::IUnknown);
            impl ISpatialAudioMetadataCopier {}
            unsafe impl ::windows::Interface for ISpatialAudioMetadataCopier {
                type Vtable = ISpatialAudioMetadataCopier_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3525620275,
                    57937,
                    20432,
                    [156, 162, 213, 236, 249, 166, 132, 4],
                );
            }
            impl ISpatialAudioMetadataCopier {
                pub unsafe fn Open<'a>(
                    &self,
                    metadataitems: impl ::windows::IntoParam<'a, ISpatialAudioMetadataItems>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        metadataitems.into_param().abi(),
                    )
                }
                pub unsafe fn CopyMetadataForFrames<'a>(
                    &self,
                    copyframecount: u16,
                    copymode: SpatialAudioMetadataCopyMode,
                    dstmetadataitems: impl ::windows::IntoParam<'a, ISpatialAudioMetadataItems>,
                    itemscopied: *mut u16,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(copyframecount),
                        ::std::mem::transmute(copymode),
                        dstmetadataitems.into_param().abi(),
                        ::std::mem::transmute(itemscopied),
                    )
                }
                pub unsafe fn Close(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(::windows::Abi::abi(self))
                }
            }
            impl ::std::convert::From<ISpatialAudioMetadataCopier> for ::windows::IUnknown {
                fn from(value: ISpatialAudioMetadataCopier) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&ISpatialAudioMetadataCopier> for ::windows::IUnknown {
                fn from(value: &ISpatialAudioMetadataCopier) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for ISpatialAudioMetadataCopier {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a ISpatialAudioMetadataCopier {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct ISpatialAudioMetadataCopier_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    metadataitems: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    copyframecount: u16,
                    copymode: SpatialAudioMetadataCopyMode,
                    dstmetadataitems: ::windows::RawPtr,
                    itemscopied: *mut u16,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct ISpatialAudioMetadataItems(::windows::IUnknown);
            impl ISpatialAudioMetadataItems {}
            unsafe impl ::windows::Interface for ISpatialAudioMetadataItems {
                type Vtable = ISpatialAudioMetadataItems_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3168257935,
                    12440,
                    20258,
                    [181, 71, 162, 242, 90, 56, 18, 105],
                );
            }
            impl ISpatialAudioMetadataItems {
                pub unsafe fn GetFrameCount(&self, framecount: *mut u16) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(framecount),
                    )
                }
                pub unsafe fn GetItemCount(&self, itemcount: *mut u16) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(itemcount),
                    )
                }
                pub unsafe fn GetMaxItemCount(&self, maxitemcount: *mut u16) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(maxitemcount),
                    )
                }
                pub unsafe fn GetMaxValueBufferLength(
                    &self,
                    maxvaluebufferlength: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(maxvaluebufferlength),
                    )
                }
                pub unsafe fn GetInfo(
                    &self,
                    info: *mut SpatialAudioMetadataItemsInfo,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(info),
                    )
                }
            }
            impl ::std::convert::From<ISpatialAudioMetadataItems> for ::windows::IUnknown {
                fn from(value: ISpatialAudioMetadataItems) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&ISpatialAudioMetadataItems> for ::windows::IUnknown {
                fn from(value: &ISpatialAudioMetadataItems) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for ISpatialAudioMetadataItems {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a ISpatialAudioMetadataItems {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct ISpatialAudioMetadataItems_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    framecount: *mut u16,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    itemcount: *mut u16,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    maxitemcount: *mut u16,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    maxvaluebufferlength: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    info: *mut SpatialAudioMetadataItemsInfo,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct ISpatialAudioMetadataItemsBuffer(::windows::IUnknown);
            impl ISpatialAudioMetadataItemsBuffer {}
            unsafe impl ::windows::Interface for ISpatialAudioMetadataItemsBuffer {
                type Vtable = ISpatialAudioMetadataItemsBuffer_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    1113852438,
                    57789,
                    17113,
                    [159, 246, 3, 26, 183, 26, 45, 186],
                );
            }
            impl ISpatialAudioMetadataItemsBuffer {
                pub unsafe fn AttachToBuffer(
                    &self,
                    buffer: *mut u8,
                    bufferlength: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(buffer),
                        ::std::mem::transmute(bufferlength),
                    )
                }
                pub unsafe fn AttachToPopulatedBuffer(
                    &self,
                    buffer: *mut u8,
                    bufferlength: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(buffer),
                        ::std::mem::transmute(bufferlength),
                    )
                }
                pub unsafe fn DetachBuffer(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(::windows::Abi::abi(self))
                }
            }
            impl ::std::convert::From<ISpatialAudioMetadataItemsBuffer> for ::windows::IUnknown {
                fn from(value: ISpatialAudioMetadataItemsBuffer) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&ISpatialAudioMetadataItemsBuffer> for ::windows::IUnknown {
                fn from(value: &ISpatialAudioMetadataItemsBuffer) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for ISpatialAudioMetadataItemsBuffer {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a ISpatialAudioMetadataItemsBuffer {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct ISpatialAudioMetadataItemsBuffer_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    buffer: *mut u8,
                    bufferlength: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    buffer: *mut u8,
                    bufferlength: u32,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct ISpatialAudioMetadataReader(::windows::IUnknown);
            impl ISpatialAudioMetadataReader {}
            unsafe impl ::windows::Interface for ISpatialAudioMetadataReader {
                type Vtable = ISpatialAudioMetadataReader_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3079571106,
                    12761,
                    19506,
                    [148, 210, 125, 244, 15, 199, 235, 236],
                );
            }
            impl ISpatialAudioMetadataReader {
                pub unsafe fn Open<'a>(
                    &self,
                    metadataitems: impl ::windows::IntoParam<'a, ISpatialAudioMetadataItems>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        metadataitems.into_param().abi(),
                    )
                }
                pub unsafe fn ReadNextItem(
                    &self,
                    commandcount: *mut u8,
                    frameoffset: *mut u16,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(commandcount),
                        ::std::mem::transmute(frameoffset),
                    )
                }
                pub unsafe fn ReadNextItemCommand(
                    &self,
                    commandid: *mut u8,
                    valuebuffer: *mut ::std::ffi::c_void,
                    maxvaluebufferlength: u32,
                    valuebufferlength: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(commandid),
                        ::std::mem::transmute(valuebuffer),
                        ::std::mem::transmute(maxvaluebufferlength),
                        ::std::mem::transmute(valuebufferlength),
                    )
                }
                pub unsafe fn Close(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(::windows::Abi::abi(self))
                }
            }
            impl ::std::convert::From<ISpatialAudioMetadataReader> for ::windows::IUnknown {
                fn from(value: ISpatialAudioMetadataReader) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&ISpatialAudioMetadataReader> for ::windows::IUnknown {
                fn from(value: &ISpatialAudioMetadataReader) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for ISpatialAudioMetadataReader {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a ISpatialAudioMetadataReader {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct ISpatialAudioMetadataReader_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    metadataitems: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    commandcount: *mut u8,
                    frameoffset: *mut u16,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    commandid: *mut u8,
                    valuebuffer: *mut ::std::ffi::c_void,
                    maxvaluebufferlength: u32,
                    valuebufferlength: *mut u32,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct ISpatialAudioMetadataWriter(::windows::IUnknown);
            impl ISpatialAudioMetadataWriter {}
            unsafe impl ::windows::Interface for ISpatialAudioMetadataWriter {
                type Vtable = ISpatialAudioMetadataWriter_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    454543873,
                    10581,
                    17485,
                    [164, 48, 83, 125, 197, 137, 168, 68],
                );
            }
            impl ISpatialAudioMetadataWriter {
                pub unsafe fn Open<'a>(
                    &self,
                    metadataitems: impl ::windows::IntoParam<'a, ISpatialAudioMetadataItems>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        metadataitems.into_param().abi(),
                    )
                }
                pub unsafe fn WriteNextItem(&self, frameoffset: u16) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(frameoffset),
                    )
                }
                pub unsafe fn WriteNextItemCommand(
                    &self,
                    commandid: u8,
                    valuebuffer: *const ::std::ffi::c_void,
                    valuebufferlength: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(commandid),
                        ::std::mem::transmute(valuebuffer),
                        ::std::mem::transmute(valuebufferlength),
                    )
                }
                pub unsafe fn Close(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(::windows::Abi::abi(self))
                }
            }
            impl ::std::convert::From<ISpatialAudioMetadataWriter> for ::windows::IUnknown {
                fn from(value: ISpatialAudioMetadataWriter) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&ISpatialAudioMetadataWriter> for ::windows::IUnknown {
                fn from(value: &ISpatialAudioMetadataWriter) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for ISpatialAudioMetadataWriter {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a ISpatialAudioMetadataWriter {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct ISpatialAudioMetadataWriter_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    metadataitems: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    frameoffset: u16,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    commandid: u8,
                    valuebuffer: *const ::std::ffi::c_void,
                    valuebufferlength: u32,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct ISpatialAudioObjectBase(::windows::IUnknown);
            impl ISpatialAudioObjectBase {}
            unsafe impl ::windows::Interface for ISpatialAudioObjectBase {
                type Vtable = ISpatialAudioObjectBase_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3437279474,
                    36173,
                    20219,
                    [168, 207, 61, 110, 207, 28, 48, 224],
                );
            }
            impl ISpatialAudioObjectBase {
                pub unsafe fn GetBuffer(
                    &self,
                    buffer: *mut *mut u8,
                    bufferlength: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(buffer),
                        ::std::mem::transmute(bufferlength),
                    )
                }
                pub unsafe fn SetEndOfStream(&self, framecount: u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(framecount),
                    )
                }
                pub unsafe fn IsActive(
                    &self,
                    isactive: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(isactive),
                    )
                }
                pub unsafe fn GetAudioObjectType(
                    &self,
                    audioobjecttype: *mut AudioObjectType,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(audioobjecttype),
                    )
                }
            }
            impl ::std::convert::From<ISpatialAudioObjectBase> for ::windows::IUnknown {
                fn from(value: ISpatialAudioObjectBase) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&ISpatialAudioObjectBase> for ::windows::IUnknown {
                fn from(value: &ISpatialAudioObjectBase) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for ISpatialAudioObjectBase {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a ISpatialAudioObjectBase {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct ISpatialAudioObjectBase_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    buffer: *mut *mut u8,
                    bufferlength: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    framecount: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    isactive: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    audioobjecttype: *mut AudioObjectType,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct ISpatialAudioObject(::windows::IUnknown);
            impl ISpatialAudioObject {}
            unsafe impl ::windows::Interface for ISpatialAudioObject {
                type Vtable = ISpatialAudioObject_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3722611047,
                    21019,
                    18149,
                    [143, 0, 189, 111, 43, 200, 171, 29],
                );
            }
            impl ISpatialAudioObject {
                pub unsafe fn GetBuffer(
                    &self,
                    buffer: *mut *mut u8,
                    bufferlength: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(buffer),
                        ::std::mem::transmute(bufferlength),
                    )
                }
                pub unsafe fn SetEndOfStream(&self, framecount: u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(framecount),
                    )
                }
                pub unsafe fn IsActive(
                    &self,
                    isactive: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(isactive),
                    )
                }
                pub unsafe fn GetAudioObjectType(
                    &self,
                    audioobjecttype: *mut AudioObjectType,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(audioobjecttype),
                    )
                }
                pub unsafe fn SetPosition(&self, x: f32, y: f32, z: f32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(x),
                        ::std::mem::transmute(y),
                        ::std::mem::transmute(z),
                    )
                }
                pub unsafe fn SetVolume(&self, volume: f32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(volume),
                    )
                }
            }
            impl ::std::convert::From<ISpatialAudioObject> for ::windows::IUnknown {
                fn from(value: ISpatialAudioObject) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&ISpatialAudioObject> for ::windows::IUnknown {
                fn from(value: &ISpatialAudioObject) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for ISpatialAudioObject {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a ISpatialAudioObject {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            impl ::std::convert::From<ISpatialAudioObject> for ISpatialAudioObjectBase {
                fn from(value: ISpatialAudioObject) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&ISpatialAudioObject> for ISpatialAudioObjectBase {
                fn from(value: &ISpatialAudioObject) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ISpatialAudioObjectBase> for ISpatialAudioObject {
                fn into_param(self) -> ::windows::Param<'a, ISpatialAudioObjectBase> {
                    ::windows::Param::Owned(::std::convert::Into::<ISpatialAudioObjectBase>::into(
                        self,
                    ))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ISpatialAudioObjectBase> for &'a ISpatialAudioObject {
                fn into_param(self) -> ::windows::Param<'a, ISpatialAudioObjectBase> {
                    ::windows::Param::Owned(::std::convert::Into::<ISpatialAudioObjectBase>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct ISpatialAudioObject_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    buffer: *mut *mut u8,
                    bufferlength: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    framecount: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    isactive: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    audioobjecttype: *mut AudioObjectType,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    x: f32,
                    y: f32,
                    z: f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    volume: f32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct ISpatialAudioObjectForHrtf(::windows::IUnknown);
            impl ISpatialAudioObjectForHrtf {}
            unsafe impl ::windows::Interface for ISpatialAudioObjectForHrtf {
                type Vtable = ISpatialAudioObjectForHrtf_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3611519710,
                    6520,
                    19988,
                    [171, 160, 85, 91, 216, 235, 131, 180],
                );
            }
            impl ISpatialAudioObjectForHrtf {
                pub unsafe fn GetBuffer(
                    &self,
                    buffer: *mut *mut u8,
                    bufferlength: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(buffer),
                        ::std::mem::transmute(bufferlength),
                    )
                }
                pub unsafe fn SetEndOfStream(&self, framecount: u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(framecount),
                    )
                }
                pub unsafe fn IsActive(
                    &self,
                    isactive: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(isactive),
                    )
                }
                pub unsafe fn GetAudioObjectType(
                    &self,
                    audioobjecttype: *mut AudioObjectType,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(audioobjecttype),
                    )
                }
                pub unsafe fn SetPosition(&self, x: f32, y: f32, z: f32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(x),
                        ::std::mem::transmute(y),
                        ::std::mem::transmute(z),
                    )
                }
                pub unsafe fn SetGain(&self, gain: f32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(gain),
                    )
                }
                pub unsafe fn SetOrientation(
                    &self,
                    orientation: *const *const f32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(orientation),
                    )
                }
                pub unsafe fn SetEnvironment(
                    &self,
                    environment: SpatialAudioHrtfEnvironmentType,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(environment),
                    )
                }
                pub unsafe fn SetDistanceDecay(
                    &self,
                    distancedecay: *mut SpatialAudioHrtfDistanceDecay,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).11)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(distancedecay),
                    )
                }
                pub unsafe fn SetDirectivity(
                    &self,
                    directivity: *mut SpatialAudioHrtfDirectivityUnion,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).12)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(directivity),
                    )
                }
            }
            impl ::std::convert::From<ISpatialAudioObjectForHrtf> for ::windows::IUnknown {
                fn from(value: ISpatialAudioObjectForHrtf) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&ISpatialAudioObjectForHrtf> for ::windows::IUnknown {
                fn from(value: &ISpatialAudioObjectForHrtf) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for ISpatialAudioObjectForHrtf {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a ISpatialAudioObjectForHrtf {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            impl ::std::convert::From<ISpatialAudioObjectForHrtf> for ISpatialAudioObjectBase {
                fn from(value: ISpatialAudioObjectForHrtf) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&ISpatialAudioObjectForHrtf> for ISpatialAudioObjectBase {
                fn from(value: &ISpatialAudioObjectForHrtf) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ISpatialAudioObjectBase> for ISpatialAudioObjectForHrtf {
                fn into_param(self) -> ::windows::Param<'a, ISpatialAudioObjectBase> {
                    ::windows::Param::Owned(::std::convert::Into::<ISpatialAudioObjectBase>::into(
                        self,
                    ))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ISpatialAudioObjectBase> for &'a ISpatialAudioObjectForHrtf {
                fn into_param(self) -> ::windows::Param<'a, ISpatialAudioObjectBase> {
                    ::windows::Param::Owned(::std::convert::Into::<ISpatialAudioObjectBase>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct ISpatialAudioObjectForHrtf_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    buffer: *mut *mut u8,
                    bufferlength: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    framecount: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    isactive: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    audioobjecttype: *mut AudioObjectType,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    x: f32,
                    y: f32,
                    z: f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    gain: f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    orientation: *const *const f32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    environment: SpatialAudioHrtfEnvironmentType,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    distancedecay: *mut SpatialAudioHrtfDistanceDecay,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    directivity: *mut SpatialAudioHrtfDirectivityUnion,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct ISpatialAudioObjectForMetadataCommands(::windows::IUnknown);
            impl ISpatialAudioObjectForMetadataCommands {}
            unsafe impl ::windows::Interface for ISpatialAudioObjectForMetadataCommands {
                type Vtable = ISpatialAudioObjectForMetadataCommands_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    234015051,
                    62969,
                    18221,
                    [175, 107, 196, 110, 10, 201, 205, 5],
                );
            }
            impl ISpatialAudioObjectForMetadataCommands {
                pub unsafe fn GetBuffer(
                    &self,
                    buffer: *mut *mut u8,
                    bufferlength: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(buffer),
                        ::std::mem::transmute(bufferlength),
                    )
                }
                pub unsafe fn SetEndOfStream(&self, framecount: u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(framecount),
                    )
                }
                pub unsafe fn IsActive(
                    &self,
                    isactive: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(isactive),
                    )
                }
                pub unsafe fn GetAudioObjectType(
                    &self,
                    audioobjecttype: *mut AudioObjectType,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(audioobjecttype),
                    )
                }
                pub unsafe fn WriteNextMetadataCommand(
                    &self,
                    commandid: u8,
                    valuebuffer: *mut ::std::ffi::c_void,
                    valuebufferlength: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(commandid),
                        ::std::mem::transmute(valuebuffer),
                        ::std::mem::transmute(valuebufferlength),
                    )
                }
            }
            impl ::std::convert::From<ISpatialAudioObjectForMetadataCommands> for ::windows::IUnknown {
                fn from(value: ISpatialAudioObjectForMetadataCommands) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&ISpatialAudioObjectForMetadataCommands> for ::windows::IUnknown {
                fn from(value: &ISpatialAudioObjectForMetadataCommands) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for ISpatialAudioObjectForMetadataCommands {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown>
                for &'a ISpatialAudioObjectForMetadataCommands
            {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            impl ::std::convert::From<ISpatialAudioObjectForMetadataCommands> for ISpatialAudioObjectBase {
                fn from(value: ISpatialAudioObjectForMetadataCommands) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&ISpatialAudioObjectForMetadataCommands> for ISpatialAudioObjectBase {
                fn from(value: &ISpatialAudioObjectForMetadataCommands) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ISpatialAudioObjectBase>
                for ISpatialAudioObjectForMetadataCommands
            {
                fn into_param(self) -> ::windows::Param<'a, ISpatialAudioObjectBase> {
                    ::windows::Param::Owned(::std::convert::Into::<ISpatialAudioObjectBase>::into(
                        self,
                    ))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ISpatialAudioObjectBase>
                for &'a ISpatialAudioObjectForMetadataCommands
            {
                fn into_param(self) -> ::windows::Param<'a, ISpatialAudioObjectBase> {
                    ::windows::Param::Owned(::std::convert::Into::<ISpatialAudioObjectBase>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct ISpatialAudioObjectForMetadataCommands_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    buffer: *mut *mut u8,
                    bufferlength: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    framecount: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    isactive: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    audioobjecttype: *mut AudioObjectType,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    commandid: u8,
                    valuebuffer: *mut ::std::ffi::c_void,
                    valuebufferlength: u32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct ISpatialAudioObjectForMetadataItems(::windows::IUnknown);
            impl ISpatialAudioObjectForMetadataItems {}
            unsafe impl ::windows::Interface for ISpatialAudioObjectForMetadataItems {
                type Vtable = ISpatialAudioObjectForMetadataItems_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3723119103,
                    15296,
                    17271,
                    [138, 173, 159, 188, 253, 128, 133, 102],
                );
            }
            impl ISpatialAudioObjectForMetadataItems {
                pub unsafe fn GetBuffer(
                    &self,
                    buffer: *mut *mut u8,
                    bufferlength: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(buffer),
                        ::std::mem::transmute(bufferlength),
                    )
                }
                pub unsafe fn SetEndOfStream(&self, framecount: u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(framecount),
                    )
                }
                pub unsafe fn IsActive(
                    &self,
                    isactive: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(isactive),
                    )
                }
                pub unsafe fn GetAudioObjectType(
                    &self,
                    audioobjecttype: *mut AudioObjectType,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(audioobjecttype),
                    )
                }
                pub unsafe fn GetSpatialAudioMetadataItems(
                    &self,
                    metadataitems: *mut ::std::option::Option<ISpatialAudioMetadataItems>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(metadataitems),
                    )
                }
            }
            impl ::std::convert::From<ISpatialAudioObjectForMetadataItems> for ::windows::IUnknown {
                fn from(value: ISpatialAudioObjectForMetadataItems) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&ISpatialAudioObjectForMetadataItems> for ::windows::IUnknown {
                fn from(value: &ISpatialAudioObjectForMetadataItems) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for ISpatialAudioObjectForMetadataItems {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a ISpatialAudioObjectForMetadataItems {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            impl ::std::convert::From<ISpatialAudioObjectForMetadataItems> for ISpatialAudioObjectBase {
                fn from(value: ISpatialAudioObjectForMetadataItems) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&ISpatialAudioObjectForMetadataItems> for ISpatialAudioObjectBase {
                fn from(value: &ISpatialAudioObjectForMetadataItems) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ISpatialAudioObjectBase> for ISpatialAudioObjectForMetadataItems {
                fn into_param(self) -> ::windows::Param<'a, ISpatialAudioObjectBase> {
                    ::windows::Param::Owned(::std::convert::Into::<ISpatialAudioObjectBase>::into(
                        self,
                    ))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ISpatialAudioObjectBase>
                for &'a ISpatialAudioObjectForMetadataItems
            {
                fn into_param(self) -> ::windows::Param<'a, ISpatialAudioObjectBase> {
                    ::windows::Param::Owned(::std::convert::Into::<ISpatialAudioObjectBase>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct ISpatialAudioObjectForMetadataItems_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    buffer: *mut *mut u8,
                    bufferlength: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    framecount: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    isactive: *mut super::SystemServices::BOOL,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    audioobjecttype: *mut AudioObjectType,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    metadataitems: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct ISpatialAudioObjectRenderStreamBase(::windows::IUnknown);
            impl ISpatialAudioObjectRenderStreamBase {}
            unsafe impl ::windows::Interface for ISpatialAudioObjectRenderStreamBase {
                type Vtable = ISpatialAudioObjectRenderStreamBase_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    4272616451,
                    49624,
                    17677,
                    [170, 5, 224, 204, 238, 117, 2, 168],
                );
            }
            impl ISpatialAudioObjectRenderStreamBase {
                pub unsafe fn GetAvailableDynamicObjectCount(
                    &self,
                    value: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(value),
                    )
                }
                pub unsafe fn GetService(
                    &self,
                    riid: *const ::windows::Guid,
                    service: *mut *mut ::std::ffi::c_void,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(riid),
                        ::std::mem::transmute(service),
                    )
                }
                pub unsafe fn Start(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(::windows::Abi::abi(self))
                }
                pub unsafe fn Stop(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(::windows::Abi::abi(self))
                }
                pub unsafe fn Reset(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(::windows::Abi::abi(self))
                }
                pub unsafe fn BeginUpdatingAudioObjects(
                    &self,
                    availabledynamicobjectcount: *mut u32,
                    framecountperbuffer: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(availabledynamicobjectcount),
                        ::std::mem::transmute(framecountperbuffer),
                    )
                }
                pub unsafe fn EndUpdatingAudioObjects(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(::windows::Abi::abi(self))
                }
            }
            impl ::std::convert::From<ISpatialAudioObjectRenderStreamBase> for ::windows::IUnknown {
                fn from(value: ISpatialAudioObjectRenderStreamBase) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&ISpatialAudioObjectRenderStreamBase> for ::windows::IUnknown {
                fn from(value: &ISpatialAudioObjectRenderStreamBase) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for ISpatialAudioObjectRenderStreamBase {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a ISpatialAudioObjectRenderStreamBase {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct ISpatialAudioObjectRenderStreamBase_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    value: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    riid: *const ::windows::Guid,
                    service: *mut *mut ::std::ffi::c_void,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    availabledynamicobjectcount: *mut u32,
                    framecountperbuffer: *mut u32,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct ISpatialAudioObjectRenderStream(::windows::IUnknown);
            impl ISpatialAudioObjectRenderStream {}
            unsafe impl ::windows::Interface for ISpatialAudioObjectRenderStream {
                type Vtable = ISpatialAudioObjectRenderStream_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3132486771,
                    46115,
                    18299,
                    [133, 245, 181, 163, 50, 160, 65, 83],
                );
            }
            impl ISpatialAudioObjectRenderStream {
                pub unsafe fn GetAvailableDynamicObjectCount(
                    &self,
                    value: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(value),
                    )
                }
                pub unsafe fn GetService(
                    &self,
                    riid: *const ::windows::Guid,
                    service: *mut *mut ::std::ffi::c_void,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(riid),
                        ::std::mem::transmute(service),
                    )
                }
                pub unsafe fn Start(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(::windows::Abi::abi(self))
                }
                pub unsafe fn Stop(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(::windows::Abi::abi(self))
                }
                pub unsafe fn Reset(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(::windows::Abi::abi(self))
                }
                pub unsafe fn BeginUpdatingAudioObjects(
                    &self,
                    availabledynamicobjectcount: *mut u32,
                    framecountperbuffer: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(availabledynamicobjectcount),
                        ::std::mem::transmute(framecountperbuffer),
                    )
                }
                pub unsafe fn EndUpdatingAudioObjects(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(::windows::Abi::abi(self))
                }
                pub unsafe fn ActivateSpatialAudioObject(
                    &self,
                    r#type: AudioObjectType,
                    audioobject: *mut ::std::option::Option<ISpatialAudioObject>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(r#type),
                        ::std::mem::transmute(audioobject),
                    )
                }
            }
            impl ::std::convert::From<ISpatialAudioObjectRenderStream> for ::windows::IUnknown {
                fn from(value: ISpatialAudioObjectRenderStream) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&ISpatialAudioObjectRenderStream> for ::windows::IUnknown {
                fn from(value: &ISpatialAudioObjectRenderStream) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for ISpatialAudioObjectRenderStream {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a ISpatialAudioObjectRenderStream {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            impl ::std::convert::From<ISpatialAudioObjectRenderStream> for ISpatialAudioObjectRenderStreamBase {
                fn from(value: ISpatialAudioObjectRenderStream) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&ISpatialAudioObjectRenderStream>
                for ISpatialAudioObjectRenderStreamBase
            {
                fn from(value: &ISpatialAudioObjectRenderStream) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ISpatialAudioObjectRenderStreamBase>
                for ISpatialAudioObjectRenderStream
            {
                fn into_param(self) -> ::windows::Param<'a, ISpatialAudioObjectRenderStreamBase> {
                    ::windows::Param::Owned(::std::convert::Into::<
                        ISpatialAudioObjectRenderStreamBase,
                    >::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ISpatialAudioObjectRenderStreamBase>
                for &'a ISpatialAudioObjectRenderStream
            {
                fn into_param(self) -> ::windows::Param<'a, ISpatialAudioObjectRenderStreamBase> {
                    ::windows::Param::Owned(::std::convert::Into::<
                        ISpatialAudioObjectRenderStreamBase,
                    >::into(::std::clone::Clone::clone(
                        self,
                    )))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct ISpatialAudioObjectRenderStream_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    value: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    riid: *const ::windows::Guid,
                    service: *mut *mut ::std::ffi::c_void,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    availabledynamicobjectcount: *mut u32,
                    framecountperbuffer: *mut u32,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    r#type: AudioObjectType,
                    audioobject: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct ISpatialAudioObjectRenderStreamForHrtf(::windows::IUnknown);
            impl ISpatialAudioObjectRenderStreamForHrtf {}
            unsafe impl ::windows::Interface for ISpatialAudioObjectRenderStreamForHrtf {
                type Vtable = ISpatialAudioObjectRenderStreamForHrtf_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3767398137,
                    21347,
                    16494,
                    [159, 220, 8, 14, 226, 71, 187, 224],
                );
            }
            impl ISpatialAudioObjectRenderStreamForHrtf {
                pub unsafe fn GetAvailableDynamicObjectCount(
                    &self,
                    value: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(value),
                    )
                }
                pub unsafe fn GetService(
                    &self,
                    riid: *const ::windows::Guid,
                    service: *mut *mut ::std::ffi::c_void,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(riid),
                        ::std::mem::transmute(service),
                    )
                }
                pub unsafe fn Start(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(::windows::Abi::abi(self))
                }
                pub unsafe fn Stop(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(::windows::Abi::abi(self))
                }
                pub unsafe fn Reset(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(::windows::Abi::abi(self))
                }
                pub unsafe fn BeginUpdatingAudioObjects(
                    &self,
                    availabledynamicobjectcount: *mut u32,
                    framecountperbuffer: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(availabledynamicobjectcount),
                        ::std::mem::transmute(framecountperbuffer),
                    )
                }
                pub unsafe fn EndUpdatingAudioObjects(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(::windows::Abi::abi(self))
                }
                pub unsafe fn ActivateSpatialAudioObjectForHrtf(
                    &self,
                    r#type: AudioObjectType,
                    audioobject: *mut ::std::option::Option<ISpatialAudioObjectForHrtf>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(r#type),
                        ::std::mem::transmute(audioobject),
                    )
                }
            }
            impl ::std::convert::From<ISpatialAudioObjectRenderStreamForHrtf> for ::windows::IUnknown {
                fn from(value: ISpatialAudioObjectRenderStreamForHrtf) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&ISpatialAudioObjectRenderStreamForHrtf> for ::windows::IUnknown {
                fn from(value: &ISpatialAudioObjectRenderStreamForHrtf) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for ISpatialAudioObjectRenderStreamForHrtf {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown>
                for &'a ISpatialAudioObjectRenderStreamForHrtf
            {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            impl ::std::convert::From<ISpatialAudioObjectRenderStreamForHrtf>
                for ISpatialAudioObjectRenderStreamBase
            {
                fn from(value: ISpatialAudioObjectRenderStreamForHrtf) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&ISpatialAudioObjectRenderStreamForHrtf>
                for ISpatialAudioObjectRenderStreamBase
            {
                fn from(value: &ISpatialAudioObjectRenderStreamForHrtf) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ISpatialAudioObjectRenderStreamBase>
                for ISpatialAudioObjectRenderStreamForHrtf
            {
                fn into_param(self) -> ::windows::Param<'a, ISpatialAudioObjectRenderStreamBase> {
                    ::windows::Param::Owned(::std::convert::Into::<
                        ISpatialAudioObjectRenderStreamBase,
                    >::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ISpatialAudioObjectRenderStreamBase>
                for &'a ISpatialAudioObjectRenderStreamForHrtf
            {
                fn into_param(self) -> ::windows::Param<'a, ISpatialAudioObjectRenderStreamBase> {
                    ::windows::Param::Owned(::std::convert::Into::<
                        ISpatialAudioObjectRenderStreamBase,
                    >::into(::std::clone::Clone::clone(
                        self,
                    )))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct ISpatialAudioObjectRenderStreamForHrtf_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    value: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    riid: *const ::windows::Guid,
                    service: *mut *mut ::std::ffi::c_void,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    availabledynamicobjectcount: *mut u32,
                    framecountperbuffer: *mut u32,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    r#type: AudioObjectType,
                    audioobject: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct ISpatialAudioObjectRenderStreamForMetadata(::windows::IUnknown);
            impl ISpatialAudioObjectRenderStreamForMetadata {}
            unsafe impl ::windows::Interface for ISpatialAudioObjectRenderStreamForMetadata {
                type Vtable = ISpatialAudioObjectRenderStreamForMetadata_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3150563591,
                    18645,
                    18990,
                    [160, 199, 247, 240, 214, 124, 31, 177],
                );
            }
            impl ISpatialAudioObjectRenderStreamForMetadata {
                pub unsafe fn GetAvailableDynamicObjectCount(
                    &self,
                    value: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(value),
                    )
                }
                pub unsafe fn GetService(
                    &self,
                    riid: *const ::windows::Guid,
                    service: *mut *mut ::std::ffi::c_void,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(riid),
                        ::std::mem::transmute(service),
                    )
                }
                pub unsafe fn Start(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(::windows::Abi::abi(self))
                }
                pub unsafe fn Stop(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(::windows::Abi::abi(self))
                }
                pub unsafe fn Reset(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(::windows::Abi::abi(self))
                }
                pub unsafe fn BeginUpdatingAudioObjects(
                    &self,
                    availabledynamicobjectcount: *mut u32,
                    framecountperbuffer: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(availabledynamicobjectcount),
                        ::std::mem::transmute(framecountperbuffer),
                    )
                }
                pub unsafe fn EndUpdatingAudioObjects(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(::windows::Abi::abi(self))
                }
                pub unsafe fn ActivateSpatialAudioObjectForMetadataCommands(
                    &self,
                    r#type: AudioObjectType,
                    audioobject: *mut ::std::option::Option<ISpatialAudioObjectForMetadataCommands>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(r#type),
                        ::std::mem::transmute(audioobject),
                    )
                }
                pub unsafe fn ActivateSpatialAudioObjectForMetadataItems(
                    &self,
                    r#type: AudioObjectType,
                    audioobject: *mut ::std::option::Option<ISpatialAudioObjectForMetadataItems>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).11)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(r#type),
                        ::std::mem::transmute(audioobject),
                    )
                }
            }
            impl ::std::convert::From<ISpatialAudioObjectRenderStreamForMetadata> for ::windows::IUnknown {
                fn from(value: ISpatialAudioObjectRenderStreamForMetadata) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&ISpatialAudioObjectRenderStreamForMetadata> for ::windows::IUnknown {
                fn from(value: &ISpatialAudioObjectRenderStreamForMetadata) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown>
                for ISpatialAudioObjectRenderStreamForMetadata
            {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown>
                for &'a ISpatialAudioObjectRenderStreamForMetadata
            {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            impl ::std::convert::From<ISpatialAudioObjectRenderStreamForMetadata>
                for ISpatialAudioObjectRenderStreamBase
            {
                fn from(value: ISpatialAudioObjectRenderStreamForMetadata) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&ISpatialAudioObjectRenderStreamForMetadata>
                for ISpatialAudioObjectRenderStreamBase
            {
                fn from(value: &ISpatialAudioObjectRenderStreamForMetadata) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ISpatialAudioObjectRenderStreamBase>
                for ISpatialAudioObjectRenderStreamForMetadata
            {
                fn into_param(self) -> ::windows::Param<'a, ISpatialAudioObjectRenderStreamBase> {
                    ::windows::Param::Owned(::std::convert::Into::<
                        ISpatialAudioObjectRenderStreamBase,
                    >::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ISpatialAudioObjectRenderStreamBase>
                for &'a ISpatialAudioObjectRenderStreamForMetadata
            {
                fn into_param(self) -> ::windows::Param<'a, ISpatialAudioObjectRenderStreamBase> {
                    ::windows::Param::Owned(::std::convert::Into::<
                        ISpatialAudioObjectRenderStreamBase,
                    >::into(::std::clone::Clone::clone(
                        self,
                    )))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct ISpatialAudioObjectRenderStreamForMetadata_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    value: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    riid: *const ::windows::Guid,
                    service: *mut *mut ::std::ffi::c_void,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    availabledynamicobjectcount: *mut u32,
                    framecountperbuffer: *mut u32,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    r#type: AudioObjectType,
                    audioobject: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    r#type: AudioObjectType,
                    audioobject: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct ISpatialAudioObjectRenderStreamNotify(::windows::IUnknown);
            impl ISpatialAudioObjectRenderStreamNotify {}
            unsafe impl ::windows::Interface for ISpatialAudioObjectRenderStreamNotify {
                type Vtable = ISpatialAudioObjectRenderStreamNotify_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    3722413030,
                    26839,
                    19568,
                    [136, 63, 161, 131, 106, 251, 74, 80],
                );
            }
            impl ISpatialAudioObjectRenderStreamNotify {
                pub unsafe fn OnAvailableDynamicObjectCountChange<'a>(
                    &self,
                    sender: impl ::windows::IntoParam<'a, ISpatialAudioObjectRenderStreamBase>,
                    hnscompliancedeadlinetime: i64,
                    availabledynamicobjectcountchange: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        sender.into_param().abi(),
                        ::std::mem::transmute(hnscompliancedeadlinetime),
                        ::std::mem::transmute(availabledynamicobjectcountchange),
                    )
                }
            }
            impl ::std::convert::From<ISpatialAudioObjectRenderStreamNotify> for ::windows::IUnknown {
                fn from(value: ISpatialAudioObjectRenderStreamNotify) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&ISpatialAudioObjectRenderStreamNotify> for ::windows::IUnknown {
                fn from(value: &ISpatialAudioObjectRenderStreamNotify) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for ISpatialAudioObjectRenderStreamNotify {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown>
                for &'a ISpatialAudioObjectRenderStreamNotify
            {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct ISpatialAudioObjectRenderStreamNotify_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    sender: ::windows::RawPtr,
                    hnscompliancedeadlinetime: i64,
                    availabledynamicobjectcountchange: u32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct ISubunit(::windows::IUnknown);
            impl ISubunit {}
            unsafe impl ::windows::Interface for ISubunit {
                type Vtable = ISubunit_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    2182388357,
                    56230,
                    17543,
                    [134, 187, 234, 143, 127, 239, 204, 113],
                );
            }
            impl ISubunit {}
            impl ::std::convert::From<ISubunit> for ::windows::IUnknown {
                fn from(value: ISubunit) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&ISubunit> for ::windows::IUnknown {
                fn from(value: &ISubunit) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for ISubunit {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a ISubunit {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct ISubunit_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
            );
            pub const JACKDESC2_DYNAMIC_FORMAT_CHANGE_CAPABILITY: u32 = 2u32;
            pub const JACKDESC2_PRESENCE_DETECT_CAPABILITY: u32 = 1u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSAC3_ALTERNATE_AUDIO {
                pub fStereo: super::SystemServices::BOOL,
                pub DualMode: u32,
            }
            impl KSAC3_ALTERNATE_AUDIO {}
            impl ::std::default::Default for KSAC3_ALTERNATE_AUDIO {
                fn default() -> Self {
                    Self {
                        fStereo: ::std::default::Default::default(),
                        DualMode: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSAC3_ALTERNATE_AUDIO {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSAC3_ALTERNATE_AUDIO")
                        .field("fStereo", &format_args!("{:?}", self.fStereo))
                        .field("DualMode", &format_args!("{:?}", self.DualMode))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSAC3_ALTERNATE_AUDIO {
                fn eq(&self, other: &Self) -> bool {
                    self.fStereo == other.fStereo && self.DualMode == other.DualMode
                }
            }
            impl ::std::cmp::Eq for KSAC3_ALTERNATE_AUDIO {}
            unsafe impl ::windows::Abi for KSAC3_ALTERNATE_AUDIO {
                type Abi = Self;
            }
            pub const KSAC3_ALTERNATE_AUDIO_1: u32 = 1u32;
            pub const KSAC3_ALTERNATE_AUDIO_2: u32 = 2u32;
            pub const KSAC3_ALTERNATE_AUDIO_BOTH: u32 = 3u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSAC3_BIT_STREAM_MODE {
                pub BitStreamMode: i32,
            }
            impl KSAC3_BIT_STREAM_MODE {}
            impl ::std::default::Default for KSAC3_BIT_STREAM_MODE {
                fn default() -> Self {
                    Self { BitStreamMode: 0 }
                }
            }
            impl ::std::fmt::Debug for KSAC3_BIT_STREAM_MODE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSAC3_BIT_STREAM_MODE")
                        .field("BitStreamMode", &format_args!("{:?}", self.BitStreamMode))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSAC3_BIT_STREAM_MODE {
                fn eq(&self, other: &Self) -> bool {
                    self.BitStreamMode == other.BitStreamMode
                }
            }
            impl ::std::cmp::Eq for KSAC3_BIT_STREAM_MODE {}
            unsafe impl ::windows::Abi for KSAC3_BIT_STREAM_MODE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSAC3_DIALOGUE_LEVEL {
                pub DialogueLevel: u32,
            }
            impl KSAC3_DIALOGUE_LEVEL {}
            impl ::std::default::Default for KSAC3_DIALOGUE_LEVEL {
                fn default() -> Self {
                    Self { DialogueLevel: 0 }
                }
            }
            impl ::std::fmt::Debug for KSAC3_DIALOGUE_LEVEL {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSAC3_DIALOGUE_LEVEL")
                        .field("DialogueLevel", &format_args!("{:?}", self.DialogueLevel))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSAC3_DIALOGUE_LEVEL {
                fn eq(&self, other: &Self) -> bool {
                    self.DialogueLevel == other.DialogueLevel
                }
            }
            impl ::std::cmp::Eq for KSAC3_DIALOGUE_LEVEL {}
            unsafe impl ::windows::Abi for KSAC3_DIALOGUE_LEVEL {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSAC3_DOWNMIX {
                pub fDownMix: super::SystemServices::BOOL,
                pub fDolbySurround: super::SystemServices::BOOL,
            }
            impl KSAC3_DOWNMIX {}
            impl ::std::default::Default for KSAC3_DOWNMIX {
                fn default() -> Self {
                    Self {
                        fDownMix: ::std::default::Default::default(),
                        fDolbySurround: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for KSAC3_DOWNMIX {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSAC3_DOWNMIX")
                        .field("fDownMix", &format_args!("{:?}", self.fDownMix))
                        .field("fDolbySurround", &format_args!("{:?}", self.fDolbySurround))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSAC3_DOWNMIX {
                fn eq(&self, other: &Self) -> bool {
                    self.fDownMix == other.fDownMix && self.fDolbySurround == other.fDolbySurround
                }
            }
            impl ::std::cmp::Eq for KSAC3_DOWNMIX {}
            unsafe impl ::windows::Abi for KSAC3_DOWNMIX {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSAC3_ERROR_CONCEALMENT {
                pub fRepeatPreviousBlock: super::SystemServices::BOOL,
                pub fErrorInCurrentBlock: super::SystemServices::BOOL,
            }
            impl KSAC3_ERROR_CONCEALMENT {}
            impl ::std::default::Default for KSAC3_ERROR_CONCEALMENT {
                fn default() -> Self {
                    Self {
                        fRepeatPreviousBlock: ::std::default::Default::default(),
                        fErrorInCurrentBlock: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for KSAC3_ERROR_CONCEALMENT {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSAC3_ERROR_CONCEALMENT")
                        .field(
                            "fRepeatPreviousBlock",
                            &format_args!("{:?}", self.fRepeatPreviousBlock),
                        )
                        .field(
                            "fErrorInCurrentBlock",
                            &format_args!("{:?}", self.fErrorInCurrentBlock),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSAC3_ERROR_CONCEALMENT {
                fn eq(&self, other: &Self) -> bool {
                    self.fRepeatPreviousBlock == other.fRepeatPreviousBlock
                        && self.fErrorInCurrentBlock == other.fErrorInCurrentBlock
                }
            }
            impl ::std::cmp::Eq for KSAC3_ERROR_CONCEALMENT {}
            unsafe impl ::windows::Abi for KSAC3_ERROR_CONCEALMENT {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSAC3_ROOM_TYPE {
                pub fLargeRoom: super::SystemServices::BOOL,
            }
            impl KSAC3_ROOM_TYPE {}
            impl ::std::default::Default for KSAC3_ROOM_TYPE {
                fn default() -> Self {
                    Self {
                        fLargeRoom: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for KSAC3_ROOM_TYPE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSAC3_ROOM_TYPE")
                        .field("fLargeRoom", &format_args!("{:?}", self.fLargeRoom))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSAC3_ROOM_TYPE {
                fn eq(&self, other: &Self) -> bool {
                    self.fLargeRoom == other.fLargeRoom
                }
            }
            impl ::std::cmp::Eq for KSAC3_ROOM_TYPE {}
            unsafe impl ::windows::Abi for KSAC3_ROOM_TYPE {
                type Abi = Self;
            }
            pub const KSAC3_SERVICE_COMMENTARY: u32 = 5u32;
            pub const KSAC3_SERVICE_DIALOG_ONLY: u32 = 4u32;
            pub const KSAC3_SERVICE_EMERGENCY_FLASH: u32 = 6u32;
            pub const KSAC3_SERVICE_HEARING_IMPAIRED: u32 = 3u32;
            pub const KSAC3_SERVICE_MAIN_AUDIO: u32 = 0u32;
            pub const KSAC3_SERVICE_NO_DIALOG: u32 = 1u32;
            pub const KSAC3_SERVICE_VISUALLY_IMPAIRED: u32 = 2u32;
            pub const KSAC3_SERVICE_VOICE_OVER: u32 = 7u32;
            pub const KSALGORITHMINSTANCE_SYSTEM_ACOUSTIC_ECHO_CANCEL: ::windows::Guid =
                ::windows::Guid::from_values(
                    472040813,
                    39033,
                    20315,
                    [163, 137, 39, 153, 109, 220, 40, 16],
                );
            pub const KSALGORITHMINSTANCE_SYSTEM_AGC: ::windows::Guid =
                ::windows::Guid::from_values(
                    2500744633,
                    34684,
                    19559,
                    [190, 8, 228, 123, 86, 17, 19, 10],
                );
            pub const KSALGORITHMINSTANCE_SYSTEM_MICROPHONE_ARRAY_PROCESSOR: ::windows::Guid =
                ::windows::Guid::from_values(
                    3069550752,
                    40545,
                    20364,
                    [145, 227, 118, 207, 15, 60, 71, 31],
                );
            pub const KSALGORITHMINSTANCE_SYSTEM_NOISE_SUPPRESS: ::windows::Guid =
                ::windows::Guid::from_values(
                    1521518638,
                    29300,
                    17686,
                    [135, 125, 78, 238, 153, 186, 79, 208],
                );
            pub const KSALLOCATOR_FLAG_2D_BUFFER_REQUIRED: u32 = 32768u32;
            pub const KSALLOCATOR_FLAG_ALLOCATOR_EXISTS: u32 = 2048u32;
            pub const KSALLOCATOR_FLAG_ATTENTION_STEPPING: u32 = 8192u32;
            pub const KSALLOCATOR_FLAG_CAN_ALLOCATE: u32 = 64u32;
            pub const KSALLOCATOR_FLAG_CYCLE: u32 = 1024u32;
            pub const KSALLOCATOR_FLAG_DEVICE_SPECIFIC: u32 = 32u32;
            pub const KSALLOCATOR_FLAG_ENABLE_CACHED_MDL: u32 = 16384u32;
            pub const KSALLOCATOR_FLAG_INDEPENDENT_RANGES: u32 = 4096u32;
            pub const KSALLOCATOR_FLAG_INSIST_ON_FRAMESIZE_RATIO: u32 = 128u32;
            pub const KSALLOCATOR_FLAG_MULTIPLE_OUTPUT: u32 = 512u32;
            pub const KSALLOCATOR_FLAG_NO_FRAME_INTEGRITY: u32 = 256u32;
            pub const KSALLOCATOR_FLAG_PARTIAL_READ_SUPPORT: u32 = 16u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSALLOCATOR_FRAMING {
                pub Anonymous1: KSALLOCATOR_FRAMING_0,
                pub PoolType: u32,
                pub Frames: u32,
                pub FrameSize: u32,
                pub Anonymous2: KSALLOCATOR_FRAMING_1,
                pub Reserved: u32,
            }
            impl KSALLOCATOR_FRAMING {}
            unsafe impl ::windows::Abi for KSALLOCATOR_FRAMING {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union KSALLOCATOR_FRAMING_0 {
                pub OptionsFlags: u32,
                pub RequirementsFlags: u32,
            }
            impl KSALLOCATOR_FRAMING_0 {}
            unsafe impl ::windows::Abi for KSALLOCATOR_FRAMING_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union KSALLOCATOR_FRAMING_1 {
                pub FileAlignment: u32,
                pub FramePitch: i32,
            }
            impl KSALLOCATOR_FRAMING_1 {}
            unsafe impl ::windows::Abi for KSALLOCATOR_FRAMING_1 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_COMPRESSION {
                pub RatioNumerator: u32,
                pub RatioDenominator: u32,
                pub RatioConstantMargin: u32,
            }
            impl KS_COMPRESSION {}
            impl ::std::default::Default for KS_COMPRESSION {
                fn default() -> Self {
                    Self {
                        RatioNumerator: 0,
                        RatioDenominator: 0,
                        RatioConstantMargin: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KS_COMPRESSION {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_COMPRESSION")
                        .field("RatioNumerator", &format_args!("{:?}", self.RatioNumerator))
                        .field(
                            "RatioDenominator",
                            &format_args!("{:?}", self.RatioDenominator),
                        )
                        .field(
                            "RatioConstantMargin",
                            &format_args!("{:?}", self.RatioConstantMargin),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_COMPRESSION {
                fn eq(&self, other: &Self) -> bool {
                    self.RatioNumerator == other.RatioNumerator
                        && self.RatioDenominator == other.RatioDenominator
                        && self.RatioConstantMargin == other.RatioConstantMargin
                }
            }
            impl ::std::cmp::Eq for KS_COMPRESSION {}
            unsafe impl ::windows::Abi for KS_COMPRESSION {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_FRAMING_RANGE {
                pub MinFrameSize: u32,
                pub MaxFrameSize: u32,
                pub Stepping: u32,
            }
            impl KS_FRAMING_RANGE {}
            impl ::std::default::Default for KS_FRAMING_RANGE {
                fn default() -> Self {
                    Self {
                        MinFrameSize: 0,
                        MaxFrameSize: 0,
                        Stepping: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KS_FRAMING_RANGE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_FRAMING_RANGE")
                        .field("MinFrameSize", &format_args!("{:?}", self.MinFrameSize))
                        .field("MaxFrameSize", &format_args!("{:?}", self.MaxFrameSize))
                        .field("Stepping", &format_args!("{:?}", self.Stepping))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_FRAMING_RANGE {
                fn eq(&self, other: &Self) -> bool {
                    self.MinFrameSize == other.MinFrameSize
                        && self.MaxFrameSize == other.MaxFrameSize
                        && self.Stepping == other.Stepping
                }
            }
            impl ::std::cmp::Eq for KS_FRAMING_RANGE {}
            unsafe impl ::windows::Abi for KS_FRAMING_RANGE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_FRAMING_RANGE_WEIGHTED {
                pub Range: KS_FRAMING_RANGE,
                pub InPlaceWeight: u32,
                pub NotInPlaceWeight: u32,
            }
            impl KS_FRAMING_RANGE_WEIGHTED {}
            impl ::std::default::Default for KS_FRAMING_RANGE_WEIGHTED {
                fn default() -> Self {
                    Self {
                        Range: ::std::default::Default::default(),
                        InPlaceWeight: 0,
                        NotInPlaceWeight: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KS_FRAMING_RANGE_WEIGHTED {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_FRAMING_RANGE_WEIGHTED")
                        .field("Range", &format_args!("{:?}", self.Range))
                        .field("InPlaceWeight", &format_args!("{:?}", self.InPlaceWeight))
                        .field(
                            "NotInPlaceWeight",
                            &format_args!("{:?}", self.NotInPlaceWeight),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_FRAMING_RANGE_WEIGHTED {
                fn eq(&self, other: &Self) -> bool {
                    self.Range == other.Range
                        && self.InPlaceWeight == other.InPlaceWeight
                        && self.NotInPlaceWeight == other.NotInPlaceWeight
                }
            }
            impl ::std::cmp::Eq for KS_FRAMING_RANGE_WEIGHTED {}
            unsafe impl ::windows::Abi for KS_FRAMING_RANGE_WEIGHTED {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_FRAMING_ITEM {
                pub MemoryType: ::windows::Guid,
                pub BusType: ::windows::Guid,
                pub MemoryFlags: u32,
                pub BusFlags: u32,
                pub Flags: u32,
                pub Frames: u32,
                pub Anonymous: KS_FRAMING_ITEM_0,
                pub MemoryTypeWeight: u32,
                pub PhysicalRange: KS_FRAMING_RANGE,
                pub FramingRange: KS_FRAMING_RANGE_WEIGHTED,
            }
            impl KS_FRAMING_ITEM {}
            unsafe impl ::windows::Abi for KS_FRAMING_ITEM {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union KS_FRAMING_ITEM_0 {
                pub FileAlignment: u32,
                pub FramePitch: i32,
            }
            impl KS_FRAMING_ITEM_0 {}
            unsafe impl ::windows::Abi for KS_FRAMING_ITEM_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSALLOCATOR_FRAMING_EX {
                pub CountItems: u32,
                pub PinFlags: u32,
                pub OutputCompression: KS_COMPRESSION,
                pub PinWeight: u32,
                pub FramingItem: [KS_FRAMING_ITEM; 1],
            }
            impl KSALLOCATOR_FRAMING_EX {}
            unsafe impl ::windows::Abi for KSALLOCATOR_FRAMING_EX {
                type Abi = Self;
            }
            pub const KSALLOCATOR_OPTIONF_COMPATIBLE: u32 = 1u32;
            pub const KSALLOCATOR_OPTIONF_SYSTEM_MEMORY: u32 = 2u32;
            pub const KSALLOCATOR_OPTIONF_VALID: u32 = 3u32;
            pub const KSALLOCATOR_REQUIREMENTF_FRAME_INTEGRITY: u32 = 4u32;
            pub const KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER: u32 = 1u32;
            pub const KSALLOCATOR_REQUIREMENTF_MUST_ALLOCATE: u32 = 8u32;
            pub const KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY: u32 = 2147483648u32;
            pub const KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY: u32 = 2u32;
            pub const KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY_CUSTOM_ALLOCATION: u32 = 16u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSATTRIBUTE {
                pub Size: u32,
                pub Flags: u32,
                pub Attribute: ::windows::Guid,
            }
            impl KSATTRIBUTE {}
            impl ::std::default::Default for KSATTRIBUTE {
                fn default() -> Self {
                    Self {
                        Size: 0,
                        Flags: 0,
                        Attribute: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for KSATTRIBUTE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSATTRIBUTE")
                        .field("Size", &format_args!("{:?}", self.Size))
                        .field("Flags", &format_args!("{:?}", self.Flags))
                        .field("Attribute", &format_args!("{:?}", self.Attribute))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSATTRIBUTE {
                fn eq(&self, other: &Self) -> bool {
                    self.Size == other.Size
                        && self.Flags == other.Flags
                        && self.Attribute == other.Attribute
                }
            }
            impl ::std::cmp::Eq for KSATTRIBUTE {}
            unsafe impl ::windows::Abi for KSATTRIBUTE {
                type Abi = Self;
            }
            pub const KSATTRIBUTEID_AUDIOSIGNALPROCESSING_MODE: ::windows::Guid =
                ::windows::Guid::from_values(
                    3791167157,
                    24390,
                    16795,
                    [150, 123, 255, 103, 112, 185, 132, 1],
                );
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSATTRIBUTE_AUDIOSIGNALPROCESSING_MODE {
                pub AttributeHeader: KSATTRIBUTE,
                pub SignalProcessingMode: ::windows::Guid,
            }
            impl KSATTRIBUTE_AUDIOSIGNALPROCESSING_MODE {}
            impl ::std::default::Default for KSATTRIBUTE_AUDIOSIGNALPROCESSING_MODE {
                fn default() -> Self {
                    Self {
                        AttributeHeader: ::std::default::Default::default(),
                        SignalProcessingMode: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for KSATTRIBUTE_AUDIOSIGNALPROCESSING_MODE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSATTRIBUTE_AUDIOSIGNALPROCESSING_MODE")
                        .field(
                            "AttributeHeader",
                            &format_args!("{:?}", self.AttributeHeader),
                        )
                        .field(
                            "SignalProcessingMode",
                            &format_args!("{:?}", self.SignalProcessingMode),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSATTRIBUTE_AUDIOSIGNALPROCESSING_MODE {
                fn eq(&self, other: &Self) -> bool {
                    self.AttributeHeader == other.AttributeHeader
                        && self.SignalProcessingMode == other.SignalProcessingMode
                }
            }
            impl ::std::cmp::Eq for KSATTRIBUTE_AUDIOSIGNALPROCESSING_MODE {}
            unsafe impl ::windows::Abi for KSATTRIBUTE_AUDIOSIGNALPROCESSING_MODE {
                type Abi = Self;
            }
            pub const KSATTRIBUTE_REQUIRED: u32 = 1u32;
            pub const KSAUDDECOUTMODE_PCM_51: u32 = 2u32;
            pub const KSAUDDECOUTMODE_SPDIFF: u32 = 4u32;
            pub const KSAUDDECOUTMODE_STEREO_ANALOG: u32 = 1u32;
            pub const KSAUDFNAME_3D_CENTER: ::windows::Guid = ::windows::Guid::from_values(
                2667999412,
                39199,
                4562,
                [172, 77, 0, 192, 79, 142, 251, 104],
            );
            pub const KSAUDFNAME_3D_DEPTH: ::windows::Guid = ::windows::Guid::from_values(
                1677678407,
                39199,
                4562,
                [172, 77, 0, 192, 79, 142, 251, 104],
            );
            pub const KSAUDFNAME_3D_STEREO: ::windows::Guid = ::windows::Guid::from_values(
                408940002,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_ALTERNATE_MICROPHONE: ::windows::Guid =
                ::windows::Guid::from_values(
                    734207339,
                    38627,
                    4562,
                    [172, 76, 0, 192, 79, 142, 251, 104],
                );
            pub const KSAUDFNAME_AUX: ::windows::Guid = ::windows::Guid::from_values(
                408940030,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_AUX_MUTE: ::windows::Guid = ::windows::Guid::from_values(
                408940029,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_AUX_VOLUME: ::windows::Guid = ::windows::Guid::from_values(
                408940028,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_BASS: ::windows::Guid = ::windows::Guid::from_values(
                408940000,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_CD_AUDIO: ::windows::Guid = ::windows::Guid::from_values(
                408940027,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_CD_IN_VOLUME: ::windows::Guid = ::windows::Guid::from_values(
                408940019,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_CD_MUTE: ::windows::Guid = ::windows::Guid::from_values(
                408940010,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_CD_VOLUME: ::windows::Guid = ::windows::Guid::from_values(
                408940009,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_LINE_IN: ::windows::Guid = ::windows::Guid::from_values(
                408940025,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_LINE_IN_VOLUME: ::windows::Guid = ::windows::Guid::from_values(
                408940020,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_LINE_MUTE: ::windows::Guid = ::windows::Guid::from_values(
                408940012,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_LINE_VOLUME: ::windows::Guid = ::windows::Guid::from_values(
                408940011,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_MASTER_MUTE: ::windows::Guid = ::windows::Guid::from_values(
                408940004,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_MASTER_VOLUME: ::windows::Guid = ::windows::Guid::from_values(
                408940003,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_MICROPHONE_BOOST: ::windows::Guid = ::windows::Guid::from_values(
                734207338,
                38627,
                4562,
                [172, 76, 0, 192, 79, 142, 251, 104],
            );
            pub const KSAUDFNAME_MIC_IN_VOLUME: ::windows::Guid = ::windows::Guid::from_values(
                408940021,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_MIC_MUTE: ::windows::Guid = ::windows::Guid::from_values(
                408940014,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_MIC_VOLUME: ::windows::Guid = ::windows::Guid::from_values(
                408940013,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_MIDI: ::windows::Guid = ::windows::Guid::from_values(
                408940024,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_MIDI_IN_VOLUME: ::windows::Guid = ::windows::Guid::from_values(
                408940018,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_MIDI_MUTE: ::windows::Guid = ::windows::Guid::from_values(
                408940008,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_MIDI_VOLUME: ::windows::Guid = ::windows::Guid::from_values(
                408940007,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_MIDRANGE: ::windows::Guid = ::windows::Guid::from_values(
                2731271288,
                44676,
                18849,
                [139, 114, 74, 208, 155, 120, 237, 52],
            );
            pub const KSAUDFNAME_MONO_MIX: ::windows::Guid = ::windows::Guid::from_values(
                14676088,
                38627,
                4562,
                [172, 76, 0, 192, 79, 142, 251, 104],
            );
            pub const KSAUDFNAME_MONO_MIX_MUTE: ::windows::Guid = ::windows::Guid::from_values(
                734207337,
                38627,
                4562,
                [172, 76, 0, 192, 79, 142, 251, 104],
            );
            pub const KSAUDFNAME_MONO_MIX_VOLUME: ::windows::Guid = ::windows::Guid::from_values(
                582019838,
                38627,
                4562,
                [172, 76, 0, 192, 79, 142, 251, 104],
            );
            pub const KSAUDFNAME_MONO_OUT: ::windows::Guid = ::windows::Guid::from_values(
                4189330883,
                38626,
                4562,
                [172, 76, 0, 192, 79, 142, 251, 104],
            );
            pub const KSAUDFNAME_MONO_OUT_MUTE: ::windows::Guid = ::windows::Guid::from_values(
                449988588,
                38627,
                4562,
                [172, 76, 0, 192, 79, 142, 251, 104],
            );
            pub const KSAUDFNAME_MONO_OUT_VOLUME: ::windows::Guid = ::windows::Guid::from_values(
                449988587,
                38627,
                4562,
                [172, 76, 0, 192, 79, 142, 251, 104],
            );
            pub const KSAUDFNAME_PC_SPEAKER: ::windows::Guid = ::windows::Guid::from_values(
                408940031,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_PC_SPEAKER_MUTE: ::windows::Guid = ::windows::Guid::from_values(
                408940017,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_PC_SPEAKER_VOLUME: ::windows::Guid = ::windows::Guid::from_values(
                408940016,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_PEAKMETER: ::windows::Guid = ::windows::Guid::from_values(
                1474446144,
                64603,
                17938,
                [165, 98, 114, 177, 26, 41, 223, 174],
            );
            pub const KSAUDFNAME_RECORDING_CONTROL: ::windows::Guid = ::windows::Guid::from_values(
                408940026,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_RECORDING_SOURCE: ::windows::Guid = ::windows::Guid::from_values(
                408940015,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_STEREO_MIX: ::windows::Guid = ::windows::Guid::from_values(
                14676087,
                38627,
                4562,
                [172, 76, 0, 192, 79, 142, 251, 104],
            );
            pub const KSAUDFNAME_STEREO_MIX_MUTE: ::windows::Guid = ::windows::Guid::from_values(
                582019837,
                38627,
                4562,
                [172, 76, 0, 192, 79, 142, 251, 104],
            );
            pub const KSAUDFNAME_STEREO_MIX_VOLUME: ::windows::Guid = ::windows::Guid::from_values(
                449988589,
                38627,
                4562,
                [172, 76, 0, 192, 79, 142, 251, 104],
            );
            pub const KSAUDFNAME_TREBLE: ::windows::Guid = ::windows::Guid::from_values(
                408940001,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_VIDEO: ::windows::Guid = ::windows::Guid::from_values(
                2438835908,
                42036,
                4562,
                [172, 82, 0, 192, 79, 142, 251, 104],
            );
            pub const KSAUDFNAME_VIDEO_MUTE: ::windows::Guid = ::windows::Guid::from_values(
                2605115145,
                39210,
                4562,
                [172, 77, 0, 192, 79, 142, 251, 104],
            );
            pub const KSAUDFNAME_VIDEO_VOLUME: ::windows::Guid = ::windows::Guid::from_values(
                2605115144,
                39210,
                4562,
                [172, 77, 0, 192, 79, 142, 251, 104],
            );
            pub const KSAUDFNAME_VOLUME_CONTROL: ::windows::Guid = ::windows::Guid::from_values(
                408940023,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_WAVE_IN_VOLUME: ::windows::Guid = ::windows::Guid::from_values(
                408940022,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_WAVE_MUTE: ::windows::Guid = ::windows::Guid::from_values(
                408940006,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_WAVE_OUT_MIX: ::windows::Guid = ::windows::Guid::from_values(
                408940032,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            pub const KSAUDFNAME_WAVE_VOLUME: ::windows::Guid = ::windows::Guid::from_values(
                408940005,
                39173,
                4561,
                [149, 169, 0, 192, 79, 185, 37, 211],
            );
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSAUDIOENGINE_BUFFER_SIZE_RANGE {
                pub MinBufferBytes: u32,
                pub MaxBufferBytes: u32,
            }
            impl KSAUDIOENGINE_BUFFER_SIZE_RANGE {}
            impl ::std::default::Default for KSAUDIOENGINE_BUFFER_SIZE_RANGE {
                fn default() -> Self {
                    Self {
                        MinBufferBytes: 0,
                        MaxBufferBytes: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSAUDIOENGINE_BUFFER_SIZE_RANGE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSAUDIOENGINE_BUFFER_SIZE_RANGE")
                        .field("MinBufferBytes", &format_args!("{:?}", self.MinBufferBytes))
                        .field("MaxBufferBytes", &format_args!("{:?}", self.MaxBufferBytes))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSAUDIOENGINE_BUFFER_SIZE_RANGE {
                fn eq(&self, other: &Self) -> bool {
                    self.MinBufferBytes == other.MinBufferBytes
                        && self.MaxBufferBytes == other.MaxBufferBytes
                }
            }
            impl ::std::cmp::Eq for KSAUDIOENGINE_BUFFER_SIZE_RANGE {}
            unsafe impl ::windows::Abi for KSAUDIOENGINE_BUFFER_SIZE_RANGE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSAUDIOENGINE_DESCRIPTOR {
                pub nHostPinId: u32,
                pub nOffloadPinId: u32,
                pub nLoopbackPinId: u32,
            }
            impl KSAUDIOENGINE_DESCRIPTOR {}
            impl ::std::default::Default for KSAUDIOENGINE_DESCRIPTOR {
                fn default() -> Self {
                    Self {
                        nHostPinId: 0,
                        nOffloadPinId: 0,
                        nLoopbackPinId: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSAUDIOENGINE_DESCRIPTOR {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSAUDIOENGINE_DESCRIPTOR")
                        .field("nHostPinId", &format_args!("{:?}", self.nHostPinId))
                        .field("nOffloadPinId", &format_args!("{:?}", self.nOffloadPinId))
                        .field("nLoopbackPinId", &format_args!("{:?}", self.nLoopbackPinId))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSAUDIOENGINE_DESCRIPTOR {
                fn eq(&self, other: &Self) -> bool {
                    self.nHostPinId == other.nHostPinId
                        && self.nOffloadPinId == other.nOffloadPinId
                        && self.nLoopbackPinId == other.nLoopbackPinId
                }
            }
            impl ::std::cmp::Eq for KSAUDIOENGINE_DESCRIPTOR {}
            unsafe impl ::windows::Abi for KSAUDIOENGINE_DESCRIPTOR {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSAUDIOENGINE_VOLUMELEVEL {
                pub TargetVolume: i32,
                pub CurveType: AUDIO_CURVE_TYPE,
                pub CurveDuration: u64,
            }
            impl KSAUDIOENGINE_VOLUMELEVEL {}
            impl ::std::default::Default for KSAUDIOENGINE_VOLUMELEVEL {
                fn default() -> Self {
                    Self {
                        TargetVolume: 0,
                        CurveType: ::std::default::Default::default(),
                        CurveDuration: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSAUDIOENGINE_VOLUMELEVEL {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSAUDIOENGINE_VOLUMELEVEL")
                        .field("TargetVolume", &format_args!("{:?}", self.TargetVolume))
                        .field("CurveType", &format_args!("{:?}", self.CurveType))
                        .field("CurveDuration", &format_args!("{:?}", self.CurveDuration))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSAUDIOENGINE_VOLUMELEVEL {
                fn eq(&self, other: &Self) -> bool {
                    self.TargetVolume == other.TargetVolume
                        && self.CurveType == other.CurveType
                        && self.CurveDuration == other.CurveDuration
                }
            }
            impl ::std::cmp::Eq for KSAUDIOENGINE_VOLUMELEVEL {}
            unsafe impl ::windows::Abi for KSAUDIOENGINE_VOLUMELEVEL {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSAUDIOMODULE_DESCRIPTOR {
                pub ClassId: ::windows::Guid,
                pub InstanceId: u32,
                pub VersionMajor: u32,
                pub VersionMinor: u32,
                pub Name: [u16; 128],
            }
            impl KSAUDIOMODULE_DESCRIPTOR {}
            impl ::std::default::Default for KSAUDIOMODULE_DESCRIPTOR {
                fn default() -> Self {
                    Self {
                        ClassId: ::std::default::Default::default(),
                        InstanceId: 0,
                        VersionMajor: 0,
                        VersionMinor: 0,
                        Name: [0; 128],
                    }
                }
            }
            impl ::std::fmt::Debug for KSAUDIOMODULE_DESCRIPTOR {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSAUDIOMODULE_DESCRIPTOR")
                        .field("ClassId", &format_args!("{:?}", self.ClassId))
                        .field("InstanceId", &format_args!("{:?}", self.InstanceId))
                        .field("VersionMajor", &format_args!("{:?}", self.VersionMajor))
                        .field("VersionMinor", &format_args!("{:?}", self.VersionMinor))
                        .field("Name", &format_args!("{:?}", self.Name))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSAUDIOMODULE_DESCRIPTOR {
                fn eq(&self, other: &Self) -> bool {
                    self.ClassId == other.ClassId
                        && self.InstanceId == other.InstanceId
                        && self.VersionMajor == other.VersionMajor
                        && self.VersionMinor == other.VersionMinor
                        && self.Name == other.Name
                }
            }
            impl ::std::cmp::Eq for KSAUDIOMODULE_DESCRIPTOR {}
            unsafe impl ::windows::Abi for KSAUDIOMODULE_DESCRIPTOR {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSAUDIOMODULE_NOTIFICATION {
                pub Anonymous: KSAUDIOMODULE_NOTIFICATION_0,
            }
            impl KSAUDIOMODULE_NOTIFICATION {}
            unsafe impl ::windows::Abi for KSAUDIOMODULE_NOTIFICATION {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union KSAUDIOMODULE_NOTIFICATION_0 {
                pub ProviderId: KSAUDIOMODULE_NOTIFICATION_0_0,
                pub Alignment: i64,
            }
            impl KSAUDIOMODULE_NOTIFICATION_0 {}
            unsafe impl ::windows::Abi for KSAUDIOMODULE_NOTIFICATION_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSAUDIOMODULE_NOTIFICATION_0_0 {
                pub DeviceId: ::windows::Guid,
                pub ClassId: ::windows::Guid,
                pub InstanceId: u32,
                pub Reserved: u32,
            }
            impl KSAUDIOMODULE_NOTIFICATION_0_0 {}
            impl ::std::default::Default for KSAUDIOMODULE_NOTIFICATION_0_0 {
                fn default() -> Self {
                    Self {
                        DeviceId: ::std::default::Default::default(),
                        ClassId: ::std::default::Default::default(),
                        InstanceId: 0,
                        Reserved: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSAUDIOMODULE_NOTIFICATION_0_0 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_ProviderId_e__Struct")
                        .field("DeviceId", &format_args!("{:?}", self.DeviceId))
                        .field("ClassId", &format_args!("{:?}", self.ClassId))
                        .field("InstanceId", &format_args!("{:?}", self.InstanceId))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSAUDIOMODULE_NOTIFICATION_0_0 {
                fn eq(&self, other: &Self) -> bool {
                    self.DeviceId == other.DeviceId
                        && self.ClassId == other.ClassId
                        && self.InstanceId == other.InstanceId
                        && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for KSAUDIOMODULE_NOTIFICATION_0_0 {}
            unsafe impl ::windows::Abi for KSAUDIOMODULE_NOTIFICATION_0_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSAUDIOMODULE_PROPERTY {
                pub Property: KSIDENTIFIER,
                pub ClassId: ::windows::Guid,
                pub InstanceId: u32,
            }
            impl KSAUDIOMODULE_PROPERTY {}
            unsafe impl ::windows::Abi for KSAUDIOMODULE_PROPERTY {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSAUDIOPOSTURE_DESCRIPTION {
                pub CbSize: u32,
                pub MembersListCount: u32,
            }
            impl KSAUDIOPOSTURE_DESCRIPTION {}
            impl ::std::default::Default for KSAUDIOPOSTURE_DESCRIPTION {
                fn default() -> Self {
                    Self {
                        CbSize: 0,
                        MembersListCount: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSAUDIOPOSTURE_DESCRIPTION {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSAUDIOPOSTURE_DESCRIPTION")
                        .field("CbSize", &format_args!("{:?}", self.CbSize))
                        .field(
                            "MembersListCount",
                            &format_args!("{:?}", self.MembersListCount),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSAUDIOPOSTURE_DESCRIPTION {
                fn eq(&self, other: &Self) -> bool {
                    self.CbSize == other.CbSize && self.MembersListCount == other.MembersListCount
                }
            }
            impl ::std::cmp::Eq for KSAUDIOPOSTURE_DESCRIPTION {}
            unsafe impl ::windows::Abi for KSAUDIOPOSTURE_DESCRIPTION {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSAUDIOPOSTURE_PANEL_STATE {
                pub Power: AUDIOPOSTURE_PANEL_POWER,
                pub Orientation: AUDIOPOSTURE_PANEL_ORIENTATION,
            }
            impl KSAUDIOPOSTURE_PANEL_STATE {}
            impl ::std::default::Default for KSAUDIOPOSTURE_PANEL_STATE {
                fn default() -> Self {
                    Self {
                        Power: ::std::default::Default::default(),
                        Orientation: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for KSAUDIOPOSTURE_PANEL_STATE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSAUDIOPOSTURE_PANEL_STATE")
                        .field("Power", &format_args!("{:?}", self.Power))
                        .field("Orientation", &format_args!("{:?}", self.Orientation))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSAUDIOPOSTURE_PANEL_STATE {
                fn eq(&self, other: &Self) -> bool {
                    self.Power == other.Power && self.Orientation == other.Orientation
                }
            }
            impl ::std::cmp::Eq for KSAUDIOPOSTURE_PANEL_STATE {}
            unsafe impl ::windows::Abi for KSAUDIOPOSTURE_PANEL_STATE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSAUDIO_CHANNEL_CONFIG {
                pub ActiveSpeakerPositions: i32,
            }
            impl KSAUDIO_CHANNEL_CONFIG {}
            impl ::std::default::Default for KSAUDIO_CHANNEL_CONFIG {
                fn default() -> Self {
                    Self {
                        ActiveSpeakerPositions: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSAUDIO_CHANNEL_CONFIG {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSAUDIO_CHANNEL_CONFIG")
                        .field(
                            "ActiveSpeakerPositions",
                            &format_args!("{:?}", self.ActiveSpeakerPositions),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSAUDIO_CHANNEL_CONFIG {
                fn eq(&self, other: &Self) -> bool {
                    self.ActiveSpeakerPositions == other.ActiveSpeakerPositions
                }
            }
            impl ::std::cmp::Eq for KSAUDIO_CHANNEL_CONFIG {}
            unsafe impl ::windows::Abi for KSAUDIO_CHANNEL_CONFIG {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSAUDIO_COPY_PROTECTION {
                pub fCopyrighted: super::SystemServices::BOOL,
                pub fOriginal: super::SystemServices::BOOL,
            }
            impl KSAUDIO_COPY_PROTECTION {}
            impl ::std::default::Default for KSAUDIO_COPY_PROTECTION {
                fn default() -> Self {
                    Self {
                        fCopyrighted: ::std::default::Default::default(),
                        fOriginal: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for KSAUDIO_COPY_PROTECTION {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSAUDIO_COPY_PROTECTION")
                        .field("fCopyrighted", &format_args!("{:?}", self.fCopyrighted))
                        .field("fOriginal", &format_args!("{:?}", self.fOriginal))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSAUDIO_COPY_PROTECTION {
                fn eq(&self, other: &Self) -> bool {
                    self.fCopyrighted == other.fCopyrighted && self.fOriginal == other.fOriginal
                }
            }
            impl ::std::cmp::Eq for KSAUDIO_COPY_PROTECTION {}
            unsafe impl ::windows::Abi for KSAUDIO_COPY_PROTECTION {
                type Abi = Self;
            }
            pub const KSAUDIO_CPU_RESOURCES_HOST_CPU: u32 = 2147483647u32;
            pub const KSAUDIO_CPU_RESOURCES_NOT_HOST_CPU: u32 = 0u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSAUDIO_DYNAMIC_RANGE {
                pub QuietCompression: u32,
                pub LoudCompression: u32,
            }
            impl KSAUDIO_DYNAMIC_RANGE {}
            impl ::std::default::Default for KSAUDIO_DYNAMIC_RANGE {
                fn default() -> Self {
                    Self {
                        QuietCompression: 0,
                        LoudCompression: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSAUDIO_DYNAMIC_RANGE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSAUDIO_DYNAMIC_RANGE")
                        .field(
                            "QuietCompression",
                            &format_args!("{:?}", self.QuietCompression),
                        )
                        .field(
                            "LoudCompression",
                            &format_args!("{:?}", self.LoudCompression),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSAUDIO_DYNAMIC_RANGE {
                fn eq(&self, other: &Self) -> bool {
                    self.QuietCompression == other.QuietCompression
                        && self.LoudCompression == other.LoudCompression
                }
            }
            impl ::std::cmp::Eq for KSAUDIO_DYNAMIC_RANGE {}
            unsafe impl ::windows::Abi for KSAUDIO_DYNAMIC_RANGE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSAUDIO_MICROPHONE_COORDINATES {
                pub usType: u16,
                pub wXCoord: i16,
                pub wYCoord: i16,
                pub wZCoord: i16,
                pub wVerticalAngle: i16,
                pub wHorizontalAngle: i16,
            }
            impl KSAUDIO_MICROPHONE_COORDINATES {}
            impl ::std::default::Default for KSAUDIO_MICROPHONE_COORDINATES {
                fn default() -> Self {
                    Self {
                        usType: 0,
                        wXCoord: 0,
                        wYCoord: 0,
                        wZCoord: 0,
                        wVerticalAngle: 0,
                        wHorizontalAngle: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSAUDIO_MICROPHONE_COORDINATES {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSAUDIO_MICROPHONE_COORDINATES")
                        .field("usType", &format_args!("{:?}", self.usType))
                        .field("wXCoord", &format_args!("{:?}", self.wXCoord))
                        .field("wYCoord", &format_args!("{:?}", self.wYCoord))
                        .field("wZCoord", &format_args!("{:?}", self.wZCoord))
                        .field("wVerticalAngle", &format_args!("{:?}", self.wVerticalAngle))
                        .field(
                            "wHorizontalAngle",
                            &format_args!("{:?}", self.wHorizontalAngle),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSAUDIO_MICROPHONE_COORDINATES {
                fn eq(&self, other: &Self) -> bool {
                    self.usType == other.usType
                        && self.wXCoord == other.wXCoord
                        && self.wYCoord == other.wYCoord
                        && self.wZCoord == other.wZCoord
                        && self.wVerticalAngle == other.wVerticalAngle
                        && self.wHorizontalAngle == other.wHorizontalAngle
                }
            }
            impl ::std::cmp::Eq for KSAUDIO_MICROPHONE_COORDINATES {}
            unsafe impl ::windows::Abi for KSAUDIO_MICROPHONE_COORDINATES {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSAUDIO_MIC_ARRAY_GEOMETRY {
                pub usVersion: u16,
                pub usMicArrayType: u16,
                pub wVerticalAngleBegin: i16,
                pub wVerticalAngleEnd: i16,
                pub wHorizontalAngleBegin: i16,
                pub wHorizontalAngleEnd: i16,
                pub usFrequencyBandLo: u16,
                pub usFrequencyBandHi: u16,
                pub usNumberOfMicrophones: u16,
                pub KsMicCoord: [KSAUDIO_MICROPHONE_COORDINATES; 1],
            }
            impl KSAUDIO_MIC_ARRAY_GEOMETRY {}
            impl ::std::default::Default for KSAUDIO_MIC_ARRAY_GEOMETRY {
                fn default() -> Self {
                    Self {
                        usVersion: 0,
                        usMicArrayType: 0,
                        wVerticalAngleBegin: 0,
                        wVerticalAngleEnd: 0,
                        wHorizontalAngleBegin: 0,
                        wHorizontalAngleEnd: 0,
                        usFrequencyBandLo: 0,
                        usFrequencyBandHi: 0,
                        usNumberOfMicrophones: 0,
                        KsMicCoord: [::std::default::Default::default(); 1],
                    }
                }
            }
            impl ::std::fmt::Debug for KSAUDIO_MIC_ARRAY_GEOMETRY {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSAUDIO_MIC_ARRAY_GEOMETRY")
                        .field("usVersion", &format_args!("{:?}", self.usVersion))
                        .field("usMicArrayType", &format_args!("{:?}", self.usMicArrayType))
                        .field(
                            "wVerticalAngleBegin",
                            &format_args!("{:?}", self.wVerticalAngleBegin),
                        )
                        .field(
                            "wVerticalAngleEnd",
                            &format_args!("{:?}", self.wVerticalAngleEnd),
                        )
                        .field(
                            "wHorizontalAngleBegin",
                            &format_args!("{:?}", self.wHorizontalAngleBegin),
                        )
                        .field(
                            "wHorizontalAngleEnd",
                            &format_args!("{:?}", self.wHorizontalAngleEnd),
                        )
                        .field(
                            "usFrequencyBandLo",
                            &format_args!("{:?}", self.usFrequencyBandLo),
                        )
                        .field(
                            "usFrequencyBandHi",
                            &format_args!("{:?}", self.usFrequencyBandHi),
                        )
                        .field(
                            "usNumberOfMicrophones",
                            &format_args!("{:?}", self.usNumberOfMicrophones),
                        )
                        .field("KsMicCoord", &format_args!("{:?}", self.KsMicCoord))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSAUDIO_MIC_ARRAY_GEOMETRY {
                fn eq(&self, other: &Self) -> bool {
                    self.usVersion == other.usVersion
                        && self.usMicArrayType == other.usMicArrayType
                        && self.wVerticalAngleBegin == other.wVerticalAngleBegin
                        && self.wVerticalAngleEnd == other.wVerticalAngleEnd
                        && self.wHorizontalAngleBegin == other.wHorizontalAngleBegin
                        && self.wHorizontalAngleEnd == other.wHorizontalAngleEnd
                        && self.usFrequencyBandLo == other.usFrequencyBandLo
                        && self.usFrequencyBandHi == other.usFrequencyBandHi
                        && self.usNumberOfMicrophones == other.usNumberOfMicrophones
                        && self.KsMicCoord == other.KsMicCoord
                }
            }
            impl ::std::cmp::Eq for KSAUDIO_MIC_ARRAY_GEOMETRY {}
            unsafe impl ::windows::Abi for KSAUDIO_MIC_ARRAY_GEOMETRY {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSAUDIO_MIX_CAPS {
                pub Mute: super::SystemServices::BOOL,
                pub Minimum: i32,
                pub Maximum: i32,
                pub Anonymous: KSAUDIO_MIX_CAPS_0,
            }
            impl KSAUDIO_MIX_CAPS {}
            unsafe impl ::windows::Abi for KSAUDIO_MIX_CAPS {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union KSAUDIO_MIX_CAPS_0 {
                pub Reset: i32,
                pub Resolution: i32,
            }
            impl KSAUDIO_MIX_CAPS_0 {}
            unsafe impl ::windows::Abi for KSAUDIO_MIX_CAPS_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSAUDIO_MIXCAP_TABLE {
                pub InputChannels: u32,
                pub OutputChannels: u32,
                pub Capabilities: [KSAUDIO_MIX_CAPS; 1],
            }
            impl KSAUDIO_MIXCAP_TABLE {}
            unsafe impl ::windows::Abi for KSAUDIO_MIXCAP_TABLE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSAUDIO_MIXLEVEL {
                pub Mute: super::SystemServices::BOOL,
                pub Level: i32,
            }
            impl KSAUDIO_MIXLEVEL {}
            impl ::std::default::Default for KSAUDIO_MIXLEVEL {
                fn default() -> Self {
                    Self {
                        Mute: ::std::default::Default::default(),
                        Level: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSAUDIO_MIXLEVEL {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSAUDIO_MIXLEVEL")
                        .field("Mute", &format_args!("{:?}", self.Mute))
                        .field("Level", &format_args!("{:?}", self.Level))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSAUDIO_MIXLEVEL {
                fn eq(&self, other: &Self) -> bool {
                    self.Mute == other.Mute && self.Level == other.Level
                }
            }
            impl ::std::cmp::Eq for KSAUDIO_MIXLEVEL {}
            unsafe impl ::windows::Abi for KSAUDIO_MIXLEVEL {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct _KSAUDIO_PACKETSIZE_SIGNALPROCESSINGMODE_CONSTRAINT {
                pub ProcessingMode: ::windows::Guid,
                pub SamplesPerProcessingPacket: u32,
                pub ProcessingPacketDurationInHns: u32,
            }
            impl _KSAUDIO_PACKETSIZE_SIGNALPROCESSINGMODE_CONSTRAINT {}
            impl ::std::default::Default for _KSAUDIO_PACKETSIZE_SIGNALPROCESSINGMODE_CONSTRAINT {
                fn default() -> Self {
                    Self {
                        ProcessingMode: ::std::default::Default::default(),
                        SamplesPerProcessingPacket: 0,
                        ProcessingPacketDurationInHns: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for _KSAUDIO_PACKETSIZE_SIGNALPROCESSINGMODE_CONSTRAINT {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_KSAUDIO_PACKETSIZE_SIGNALPROCESSINGMODE_CONSTRAINT")
                        .field("ProcessingMode", &format_args!("{:?}", self.ProcessingMode))
                        .field(
                            "SamplesPerProcessingPacket",
                            &format_args!("{:?}", self.SamplesPerProcessingPacket),
                        )
                        .field(
                            "ProcessingPacketDurationInHns",
                            &format_args!("{:?}", self.ProcessingPacketDurationInHns),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for _KSAUDIO_PACKETSIZE_SIGNALPROCESSINGMODE_CONSTRAINT {
                fn eq(&self, other: &Self) -> bool {
                    self.ProcessingMode == other.ProcessingMode
                        && self.SamplesPerProcessingPacket == other.SamplesPerProcessingPacket
                        && self.ProcessingPacketDurationInHns == other.ProcessingPacketDurationInHns
                }
            }
            impl ::std::cmp::Eq for _KSAUDIO_PACKETSIZE_SIGNALPROCESSINGMODE_CONSTRAINT {}
            unsafe impl ::windows::Abi for _KSAUDIO_PACKETSIZE_SIGNALPROCESSINGMODE_CONSTRAINT {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSAUDIO_PACKETSIZE_CONSTRAINTS {
                pub MinPacketPeriodInHns: u32,
                pub PacketSizeFileAlignment: u32,
                pub Reserved: u32,
                pub NumProcessingModeConstraints: u32,
                pub ProcessingModeConstraints:
                    [_KSAUDIO_PACKETSIZE_SIGNALPROCESSINGMODE_CONSTRAINT; 1],
            }
            impl KSAUDIO_PACKETSIZE_CONSTRAINTS {}
            impl ::std::default::Default for KSAUDIO_PACKETSIZE_CONSTRAINTS {
                fn default() -> Self {
                    Self {
                        MinPacketPeriodInHns: 0,
                        PacketSizeFileAlignment: 0,
                        Reserved: 0,
                        NumProcessingModeConstraints: 0,
                        ProcessingModeConstraints: [::std::default::Default::default(); 1],
                    }
                }
            }
            impl ::std::fmt::Debug for KSAUDIO_PACKETSIZE_CONSTRAINTS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSAUDIO_PACKETSIZE_CONSTRAINTS")
                        .field(
                            "MinPacketPeriodInHns",
                            &format_args!("{:?}", self.MinPacketPeriodInHns),
                        )
                        .field(
                            "PacketSizeFileAlignment",
                            &format_args!("{:?}", self.PacketSizeFileAlignment),
                        )
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .field(
                            "NumProcessingModeConstraints",
                            &format_args!("{:?}", self.NumProcessingModeConstraints),
                        )
                        .field(
                            "ProcessingModeConstraints",
                            &format_args!("{:?}", self.ProcessingModeConstraints),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSAUDIO_PACKETSIZE_CONSTRAINTS {
                fn eq(&self, other: &Self) -> bool {
                    self.MinPacketPeriodInHns == other.MinPacketPeriodInHns
                        && self.PacketSizeFileAlignment == other.PacketSizeFileAlignment
                        && self.Reserved == other.Reserved
                        && self.NumProcessingModeConstraints == other.NumProcessingModeConstraints
                        && self.ProcessingModeConstraints == other.ProcessingModeConstraints
                }
            }
            impl ::std::cmp::Eq for KSAUDIO_PACKETSIZE_CONSTRAINTS {}
            unsafe impl ::windows::Abi for KSAUDIO_PACKETSIZE_CONSTRAINTS {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSAUDIO_PACKETSIZE_CONSTRAINTS2 {
                pub MinPacketPeriodInHns: u32,
                pub PacketSizeFileAlignment: u32,
                pub MaxPacketSizeInBytes: u32,
                pub NumProcessingModeConstraints: u32,
                pub ProcessingModeConstraints:
                    [_KSAUDIO_PACKETSIZE_SIGNALPROCESSINGMODE_CONSTRAINT; 1],
            }
            impl KSAUDIO_PACKETSIZE_CONSTRAINTS2 {}
            impl ::std::default::Default for KSAUDIO_PACKETSIZE_CONSTRAINTS2 {
                fn default() -> Self {
                    Self {
                        MinPacketPeriodInHns: 0,
                        PacketSizeFileAlignment: 0,
                        MaxPacketSizeInBytes: 0,
                        NumProcessingModeConstraints: 0,
                        ProcessingModeConstraints: [::std::default::Default::default(); 1],
                    }
                }
            }
            impl ::std::fmt::Debug for KSAUDIO_PACKETSIZE_CONSTRAINTS2 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSAUDIO_PACKETSIZE_CONSTRAINTS2")
                        .field(
                            "MinPacketPeriodInHns",
                            &format_args!("{:?}", self.MinPacketPeriodInHns),
                        )
                        .field(
                            "PacketSizeFileAlignment",
                            &format_args!("{:?}", self.PacketSizeFileAlignment),
                        )
                        .field(
                            "MaxPacketSizeInBytes",
                            &format_args!("{:?}", self.MaxPacketSizeInBytes),
                        )
                        .field(
                            "NumProcessingModeConstraints",
                            &format_args!("{:?}", self.NumProcessingModeConstraints),
                        )
                        .field(
                            "ProcessingModeConstraints",
                            &format_args!("{:?}", self.ProcessingModeConstraints),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSAUDIO_PACKETSIZE_CONSTRAINTS2 {
                fn eq(&self, other: &Self) -> bool {
                    self.MinPacketPeriodInHns == other.MinPacketPeriodInHns
                        && self.PacketSizeFileAlignment == other.PacketSizeFileAlignment
                        && self.MaxPacketSizeInBytes == other.MaxPacketSizeInBytes
                        && self.NumProcessingModeConstraints == other.NumProcessingModeConstraints
                        && self.ProcessingModeConstraints == other.ProcessingModeConstraints
                }
            }
            impl ::std::cmp::Eq for KSAUDIO_PACKETSIZE_CONSTRAINTS2 {}
            unsafe impl ::windows::Abi for KSAUDIO_PACKETSIZE_CONSTRAINTS2 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSAUDIO_POSITION {
                pub PlayOffset: u64,
                pub WriteOffset: u64,
            }
            impl KSAUDIO_POSITION {}
            impl ::std::default::Default for KSAUDIO_POSITION {
                fn default() -> Self {
                    Self {
                        PlayOffset: 0,
                        WriteOffset: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSAUDIO_POSITION {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSAUDIO_POSITION")
                        .field("PlayOffset", &format_args!("{:?}", self.PlayOffset))
                        .field("WriteOffset", &format_args!("{:?}", self.WriteOffset))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSAUDIO_POSITION {
                fn eq(&self, other: &Self) -> bool {
                    self.PlayOffset == other.PlayOffset && self.WriteOffset == other.WriteOffset
                }
            }
            impl ::std::cmp::Eq for KSAUDIO_POSITION {}
            unsafe impl ::windows::Abi for KSAUDIO_POSITION {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSAUDIO_POSITIONEX {
                pub TimerFrequency: i64,
                pub TimeStamp1: i64,
                pub Position: KSAUDIO_POSITION,
                pub TimeStamp2: i64,
            }
            impl KSAUDIO_POSITIONEX {}
            impl ::std::default::Default for KSAUDIO_POSITIONEX {
                fn default() -> Self {
                    Self {
                        TimerFrequency: 0,
                        TimeStamp1: 0,
                        Position: ::std::default::Default::default(),
                        TimeStamp2: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSAUDIO_POSITIONEX {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSAUDIO_POSITIONEX")
                        .field("TimerFrequency", &format_args!("{:?}", self.TimerFrequency))
                        .field("TimeStamp1", &format_args!("{:?}", self.TimeStamp1))
                        .field("Position", &format_args!("{:?}", self.Position))
                        .field("TimeStamp2", &format_args!("{:?}", self.TimeStamp2))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSAUDIO_POSITIONEX {
                fn eq(&self, other: &Self) -> bool {
                    self.TimerFrequency == other.TimerFrequency
                        && self.TimeStamp1 == other.TimeStamp1
                        && self.Position == other.Position
                        && self.TimeStamp2 == other.TimeStamp2
                }
            }
            impl ::std::cmp::Eq for KSAUDIO_POSITIONEX {}
            unsafe impl ::windows::Abi for KSAUDIO_POSITIONEX {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSAUDIO_PRESENTATION_POSITION {
                pub u64PositionInBlocks: u64,
                pub u64QPCPosition: u64,
            }
            impl KSAUDIO_PRESENTATION_POSITION {}
            impl ::std::default::Default for KSAUDIO_PRESENTATION_POSITION {
                fn default() -> Self {
                    Self {
                        u64PositionInBlocks: 0,
                        u64QPCPosition: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSAUDIO_PRESENTATION_POSITION {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSAUDIO_PRESENTATION_POSITION")
                        .field(
                            "u64PositionInBlocks",
                            &format_args!("{:?}", self.u64PositionInBlocks),
                        )
                        .field("u64QPCPosition", &format_args!("{:?}", self.u64QPCPosition))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSAUDIO_PRESENTATION_POSITION {
                fn eq(&self, other: &Self) -> bool {
                    self.u64PositionInBlocks == other.u64PositionInBlocks
                        && self.u64QPCPosition == other.u64QPCPosition
                }
            }
            impl ::std::cmp::Eq for KSAUDIO_PRESENTATION_POSITION {}
            unsafe impl ::windows::Abi for KSAUDIO_PRESENTATION_POSITION {
                type Abi = Self;
            }
            pub const KSAUDIO_QUALITY_ADVANCED: u32 = 3u32;
            pub const KSAUDIO_QUALITY_BASIC: u32 = 2u32;
            pub const KSAUDIO_QUALITY_PC: u32 = 1u32;
            pub const KSAUDIO_QUALITY_WORST: u32 = 0u32;
            pub const KSAUDIO_SPEAKER_DIRECTOUT: u32 = 0u32;
            pub const KSAUDIO_STEREO_SPEAKER_GEOMETRY_HEADPHONE: i32 = -1i32;
            pub const KSAUDIO_STEREO_SPEAKER_GEOMETRY_MAX: u32 = 180u32;
            pub const KSAUDIO_STEREO_SPEAKER_GEOMETRY_MIN: u32 = 5u32;
            pub const KSAUDIO_STEREO_SPEAKER_GEOMETRY_NARROW: u32 = 10u32;
            pub const KSAUDIO_STEREO_SPEAKER_GEOMETRY_WIDE: u32 = 20u32;
            pub const KSCAMERAPROFILE_BalancedVideoAndPhoto: ::windows::Guid =
                ::windows::Guid::from_values(
                    1800581143,
                    17095,
                    18977,
                    [191, 227, 35, 240, 9, 20, 152, 135],
                );
            pub const KSCAMERAPROFILE_FLAGS_FACEDETECTION: u64 = 8u64;
            pub const KSCAMERAPROFILE_FLAGS_PHOTOHDR: u64 = 4u64;
            pub const KSCAMERAPROFILE_FLAGS_PREVIEW_RES_MUSTMATCH: u64 = 32u64;
            pub const KSCAMERAPROFILE_FLAGS_VARIABLEPHOTOSEQUENCE: u64 = 16u64;
            pub const KSCAMERAPROFILE_FLAGS_VIDEOHDR: u64 = 2u64;
            pub const KSCAMERAPROFILE_FLAGS_VIDEOSTABLIZATION: u64 = 1u64;
            pub const KSCAMERAPROFILE_FaceAuth_Mode: ::windows::Guid = ::windows::Guid::from_values(
                2167806754,
                28683,
                17734,
                [162, 212, 197, 46, 144, 123, 252, 39],
            );
            pub const KSCAMERAPROFILE_HDRWithWCGPhoto: ::windows::Guid =
                ::windows::Guid::from_values(
                    2616652287,
                    46421,
                    17957,
                    [179, 38, 164, 109, 239, 49, 143, 183],
                );
            pub const KSCAMERAPROFILE_HDRWithWCGVideo: ::windows::Guid =
                ::windows::Guid::from_values(
                    1260897078,
                    18724,
                    18825,
                    [185, 148, 253, 175, 29, 199, 205, 133],
                );
            pub const KSCAMERAPROFILE_HighFrameRate: ::windows::Guid = ::windows::Guid::from_values(
                1450074387,
                35893,
                18663,
                [184, 159, 210, 63, 220, 18, 25, 220],
            );
            pub const KSCAMERAPROFILE_HighQualityPhoto: ::windows::Guid =
                ::windows::Guid::from_values(
                    843319077,
                    38427,
                    19619,
                    [181, 178, 133, 78, 113, 157, 158, 27],
                );
            pub const KSCAMERAPROFILE_Legacy: ::windows::Guid = ::windows::Guid::from_values(
                3028897153,
                25271,
                20204,
                [135, 64, 128, 101, 140, 74, 157, 62],
            );
            pub const KSCAMERAPROFILE_PhotoSequence: ::windows::Guid = ::windows::Guid::from_values(
                37330333,
                20200,
                18874,
                [188, 7, 95, 241, 86, 83, 20, 19],
            );
            pub const KSCAMERAPROFILE_VariablePhotoSequence: ::windows::Guid =
                ::windows::Guid::from_values(
                    2683489110,
                    59226,
                    18865,
                    [169, 40, 153, 133, 213, 148, 111, 135],
                );
            pub const KSCAMERAPROFILE_VideoConferencing: ::windows::Guid =
                ::windows::Guid::from_values(
                    3309587080,
                    57791,
                    17815,
                    [178, 221, 158, 30, 173, 134, 75, 184],
                );
            pub const KSCAMERAPROFILE_VideoHDR8: ::windows::Guid = ::windows::Guid::from_values(
                3572757740,
                48639,
                17172,
                [177, 212, 0, 142, 40, 31, 116, 231],
            );
            pub const KSCAMERAPROFILE_VideoRecording: ::windows::Guid =
                ::windows::Guid::from_values(
                    2699368424,
                    36748,
                    20335,
                    [154, 87, 70, 252, 47, 100, 126, 192],
                );
            pub const KSCAMERA_EXTENDEDPROP_ADVANCEDPHOTO_AUTO: u64 = 1u64;
            pub const KSCAMERA_EXTENDEDPROP_ADVANCEDPHOTO_FNF: u64 = 4u64;
            pub const KSCAMERA_EXTENDEDPROP_ADVANCEDPHOTO_HDR: u64 = 2u64;
            pub const KSCAMERA_EXTENDEDPROP_ADVANCEDPHOTO_OFF: u64 = 0u64;
            pub const KSCAMERA_EXTENDEDPROP_ADVANCEDPHOTO_ULTRALOWLIGHT: u64 = 8u64;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_EXTENDEDPROP_CAMERAOFFSET {
                pub PitchAngle: i32,
                pub YawAngle: i32,
                pub Flag: u32,
                pub Reserved: u32,
            }
            impl KSCAMERA_EXTENDEDPROP_CAMERAOFFSET {}
            impl ::std::default::Default for KSCAMERA_EXTENDEDPROP_CAMERAOFFSET {
                fn default() -> Self {
                    Self {
                        PitchAngle: 0,
                        YawAngle: 0,
                        Flag: 0,
                        Reserved: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_EXTENDEDPROP_CAMERAOFFSET {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_EXTENDEDPROP_CAMERAOFFSET")
                        .field("PitchAngle", &format_args!("{:?}", self.PitchAngle))
                        .field("YawAngle", &format_args!("{:?}", self.YawAngle))
                        .field("Flag", &format_args!("{:?}", self.Flag))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_EXTENDEDPROP_CAMERAOFFSET {
                fn eq(&self, other: &Self) -> bool {
                    self.PitchAngle == other.PitchAngle
                        && self.YawAngle == other.YawAngle
                        && self.Flag == other.Flag
                        && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_EXTENDEDPROP_CAMERAOFFSET {}
            unsafe impl ::windows::Abi for KSCAMERA_EXTENDEDPROP_CAMERAOFFSET {
                type Abi = Self;
            }
            pub const KSCAMERA_EXTENDEDPROP_CAPS_ASYNCCONTROL: u64 = 9223372036854775808u64;
            pub const KSCAMERA_EXTENDEDPROP_CAPS_CANCELLABLE: u64 = 4611686018427387904u64;
            pub const KSCAMERA_EXTENDEDPROP_CAPS_MASK: u64 = 18374686479671623680u64;
            pub const KSCAMERA_EXTENDEDPROP_CAPS_RESERVED: u64 = 18374686479671623680u64;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_EXTENDEDPROP_EVCOMPENSATION {
                pub Mode: u32,
                pub Min: i32,
                pub Max: i32,
                pub Value: i32,
                pub Reserved: u64,
            }
            impl KSCAMERA_EXTENDEDPROP_EVCOMPENSATION {}
            impl ::std::default::Default for KSCAMERA_EXTENDEDPROP_EVCOMPENSATION {
                fn default() -> Self {
                    Self {
                        Mode: 0,
                        Min: 0,
                        Max: 0,
                        Value: 0,
                        Reserved: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_EXTENDEDPROP_EVCOMPENSATION {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_EXTENDEDPROP_EVCOMPENSATION")
                        .field("Mode", &format_args!("{:?}", self.Mode))
                        .field("Min", &format_args!("{:?}", self.Min))
                        .field("Max", &format_args!("{:?}", self.Max))
                        .field("Value", &format_args!("{:?}", self.Value))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_EXTENDEDPROP_EVCOMPENSATION {
                fn eq(&self, other: &Self) -> bool {
                    self.Mode == other.Mode
                        && self.Min == other.Min
                        && self.Max == other.Max
                        && self.Value == other.Value
                        && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_EXTENDEDPROP_EVCOMPENSATION {}
            unsafe impl ::windows::Abi for KSCAMERA_EXTENDEDPROP_EVCOMPENSATION {
                type Abi = Self;
            }
            pub const KSCAMERA_EXTENDEDPROP_EVCOMP_FULLSTEP: u64 = 16u64;
            pub const KSCAMERA_EXTENDEDPROP_EVCOMP_HALFSTEP: u64 = 8u64;
            pub const KSCAMERA_EXTENDEDPROP_EVCOMP_QUARTERSTEP: u64 = 2u64;
            pub const KSCAMERA_EXTENDEDPROP_EVCOMP_SIXTHSTEP: u64 = 1u64;
            pub const KSCAMERA_EXTENDEDPROP_EVCOMP_THIRDSTEP: u64 = 4u64;
            pub const KSCAMERA_EXTENDEDPROP_FACEAUTH_MODE_ALTERNATIVE_FRAME_ILLUMINATION: u64 =
                2u64;
            pub const KSCAMERA_EXTENDEDPROP_FACEAUTH_MODE_BACKGROUND_SUBTRACTION: u64 = 4u64;
            pub const KSCAMERA_EXTENDEDPROP_FACEAUTH_MODE_DISABLED: u64 = 1u64;
            pub const KSCAMERA_EXTENDEDPROP_FACEDETECTION_BLINK: u64 = 8u64;
            pub const KSCAMERA_EXTENDEDPROP_FACEDETECTION_OFF: u64 = 0u64;
            pub const KSCAMERA_EXTENDEDPROP_FACEDETECTION_ON: u64 = 1u64;
            pub const KSCAMERA_EXTENDEDPROP_FACEDETECTION_PHOTO: u64 = 4u64;
            pub const KSCAMERA_EXTENDEDPROP_FACEDETECTION_PREVIEW: u64 = 1u64;
            pub const KSCAMERA_EXTENDEDPROP_FACEDETECTION_SMILE: u64 = 16u64;
            pub const KSCAMERA_EXTENDEDPROP_FACEDETECTION_VIDEO: u64 = 2u64;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_EXTENDEDPROP_FIELDOFVIEW {
                pub NormalizedFocalLengthX: u32,
                pub NormalizedFocalLengthY: u32,
                pub Flag: u32,
                pub Reserved: u32,
            }
            impl KSCAMERA_EXTENDEDPROP_FIELDOFVIEW {}
            impl ::std::default::Default for KSCAMERA_EXTENDEDPROP_FIELDOFVIEW {
                fn default() -> Self {
                    Self {
                        NormalizedFocalLengthX: 0,
                        NormalizedFocalLengthY: 0,
                        Flag: 0,
                        Reserved: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_EXTENDEDPROP_FIELDOFVIEW {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_EXTENDEDPROP_FIELDOFVIEW")
                        .field(
                            "NormalizedFocalLengthX",
                            &format_args!("{:?}", self.NormalizedFocalLengthX),
                        )
                        .field(
                            "NormalizedFocalLengthY",
                            &format_args!("{:?}", self.NormalizedFocalLengthY),
                        )
                        .field("Flag", &format_args!("{:?}", self.Flag))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_EXTENDEDPROP_FIELDOFVIEW {
                fn eq(&self, other: &Self) -> bool {
                    self.NormalizedFocalLengthX == other.NormalizedFocalLengthX
                        && self.NormalizedFocalLengthY == other.NormalizedFocalLengthY
                        && self.Flag == other.Flag
                        && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_EXTENDEDPROP_FIELDOFVIEW {}
            unsafe impl ::windows::Abi for KSCAMERA_EXTENDEDPROP_FIELDOFVIEW {
                type Abi = Self;
            }
            pub const KSCAMERA_EXTENDEDPROP_FILTERSCOPE: u32 = 4294967295u32;
            pub const KSCAMERA_EXTENDEDPROP_FLAG_CANCELOPERATION: u64 = 9223372036854775808u64;
            pub const KSCAMERA_EXTENDEDPROP_FLAG_MASK: u64 = 18374686479671623680u64;
            pub const KSCAMERA_EXTENDEDPROP_FLASH_ASSISTANT_AUTO: u64 = 256u64;
            pub const KSCAMERA_EXTENDEDPROP_FLASH_ASSISTANT_OFF: u64 = 0u64;
            pub const KSCAMERA_EXTENDEDPROP_FLASH_ASSISTANT_ON: u64 = 128u64;
            pub const KSCAMERA_EXTENDEDPROP_FLASH_AUTO: u64 = 4u64;
            pub const KSCAMERA_EXTENDEDPROP_FLASH_AUTO_ADJUSTABLEPOWER: u64 = 8u64;
            pub const KSCAMERA_EXTENDEDPROP_FLASH_MULTIFLASHSUPPORTED: u64 = 64u64;
            pub const KSCAMERA_EXTENDEDPROP_FLASH_OFF: u64 = 0u64;
            pub const KSCAMERA_EXTENDEDPROP_FLASH_ON: u64 = 1u64;
            pub const KSCAMERA_EXTENDEDPROP_FLASH_ON_ADJUSTABLEPOWER: u64 = 2u64;
            pub const KSCAMERA_EXTENDEDPROP_FLASH_REDEYEREDUCTION: u64 = 16u64;
            pub const KSCAMERA_EXTENDEDPROP_FLASH_SINGLEFLASH: u64 = 32u64;
            pub const KSCAMERA_EXTENDEDPROP_FOCUSPRIORITY_OFF: u64 = 0u64;
            pub const KSCAMERA_EXTENDEDPROP_FOCUSPRIORITY_ON: u64 = 1u64;
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSCAMERA_EXTENDEDPROP_FOCUSSTATE(pub i32);
            impl KSCAMERA_EXTENDEDPROP_FOCUSSTATE {
                pub const KSCAMERA_EXTENDEDPROP_FOCUSSTATE_UNINITIALIZED: Self = Self(0i32);
                pub const KSCAMERA_EXTENDEDPROP_FOCUSSTATE_LOST: Self = Self(1i32);
                pub const KSCAMERA_EXTENDEDPROP_FOCUSSTATE_SEARCHING: Self = Self(2i32);
                pub const KSCAMERA_EXTENDEDPROP_FOCUSSTATE_FOCUSED: Self = Self(3i32);
                pub const KSCAMERA_EXTENDEDPROP_FOCUSSTATE_FAILED: Self = Self(4i32);
            }
            impl ::std::convert::From<i32> for KSCAMERA_EXTENDEDPROP_FOCUSSTATE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSCAMERA_EXTENDEDPROP_FOCUSSTATE {
                type Abi = Self;
            }
            pub const KSCAMERA_EXTENDEDPROP_FOCUS_CONTINUOUS: u64 = 256u64;
            pub const KSCAMERA_EXTENDEDPROP_FOCUS_CONTINUOUSLOCK: u64 = 512u64;
            pub const KSCAMERA_EXTENDEDPROP_FOCUS_DISTANCE_HYPERFOCAL: u64 = 33554432u64;
            pub const KSCAMERA_EXTENDEDPROP_FOCUS_DISTANCE_INFINITY: u64 = 16777216u64;
            pub const KSCAMERA_EXTENDEDPROP_FOCUS_DISTANCE_NEAREST: u64 = 67108864u64;
            pub const KSCAMERA_EXTENDEDPROP_FOCUS_DRIVERFALLBACK_OFF: u64 = 2048u64;
            pub const KSCAMERA_EXTENDEDPROP_FOCUS_RANGE_FULLRANGE: u64 = 262144u64;
            pub const KSCAMERA_EXTENDEDPROP_FOCUS_RANGE_HYPERFOCAL: u64 = 1048576u64;
            pub const KSCAMERA_EXTENDEDPROP_FOCUS_RANGE_INFINITY: u64 = 524288u64;
            pub const KSCAMERA_EXTENDEDPROP_FOCUS_RANGE_MACRO: u64 = 65536u64;
            pub const KSCAMERA_EXTENDEDPROP_FOCUS_RANGE_NORMAL: u64 = 131072u64;
            pub const KSCAMERA_EXTENDEDPROP_FOCUS_REGIONBASED: u64 = 4096u64;
            pub const KSCAMERA_EXTENDEDPROP_FOCUS_UNLOCK: u64 = 1024u64;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_EXTENDEDPROP_HEADER {
                pub Version: u32,
                pub PinId: u32,
                pub Size: u32,
                pub Result: u32,
                pub Flags: u64,
                pub Capability: u64,
            }
            impl KSCAMERA_EXTENDEDPROP_HEADER {}
            impl ::std::default::Default for KSCAMERA_EXTENDEDPROP_HEADER {
                fn default() -> Self {
                    Self {
                        Version: 0,
                        PinId: 0,
                        Size: 0,
                        Result: 0,
                        Flags: 0,
                        Capability: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_EXTENDEDPROP_HEADER {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_EXTENDEDPROP_HEADER")
                        .field("Version", &format_args!("{:?}", self.Version))
                        .field("PinId", &format_args!("{:?}", self.PinId))
                        .field("Size", &format_args!("{:?}", self.Size))
                        .field("Result", &format_args!("{:?}", self.Result))
                        .field("Flags", &format_args!("{:?}", self.Flags))
                        .field("Capability", &format_args!("{:?}", self.Capability))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_EXTENDEDPROP_HEADER {
                fn eq(&self, other: &Self) -> bool {
                    self.Version == other.Version
                        && self.PinId == other.PinId
                        && self.Size == other.Size
                        && self.Result == other.Result
                        && self.Flags == other.Flags
                        && self.Capability == other.Capability
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_EXTENDEDPROP_HEADER {}
            unsafe impl ::windows::Abi for KSCAMERA_EXTENDEDPROP_HEADER {
                type Abi = Self;
            }
            pub const KSCAMERA_EXTENDEDPROP_HISTOGRAM_OFF: u64 = 0u64;
            pub const KSCAMERA_EXTENDEDPROP_HISTOGRAM_ON: u64 = 1u64;
            pub const KSCAMERA_EXTENDEDPROP_IRTORCHMODE_ALTERNATING_FRAME_ILLUMINATION: u64 = 4u64;
            pub const KSCAMERA_EXTENDEDPROP_IRTORCHMODE_ALWAYS_ON: u64 = 2u64;
            pub const KSCAMERA_EXTENDEDPROP_IRTORCHMODE_OFF: u64 = 1u64;
            pub const KSCAMERA_EXTENDEDPROP_ISO_100: u64 = 8u64;
            pub const KSCAMERA_EXTENDEDPROP_ISO_12800: u64 = 1024u64;
            pub const KSCAMERA_EXTENDEDPROP_ISO_1600: u64 = 128u64;
            pub const KSCAMERA_EXTENDEDPROP_ISO_200: u64 = 16u64;
            pub const KSCAMERA_EXTENDEDPROP_ISO_25600: u64 = 2048u64;
            pub const KSCAMERA_EXTENDEDPROP_ISO_3200: u64 = 256u64;
            pub const KSCAMERA_EXTENDEDPROP_ISO_400: u64 = 32u64;
            pub const KSCAMERA_EXTENDEDPROP_ISO_50: u64 = 2u64;
            pub const KSCAMERA_EXTENDEDPROP_ISO_6400: u64 = 512u64;
            pub const KSCAMERA_EXTENDEDPROP_ISO_80: u64 = 4u64;
            pub const KSCAMERA_EXTENDEDPROP_ISO_800: u64 = 64u64;
            pub const KSCAMERA_EXTENDEDPROP_ISO_AUTO: u64 = 1u64;
            pub const KSCAMERA_EXTENDEDPROP_ISO_MANUAL: u64 = 36028797018963968u64;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_EXTENDEDPROP_METADATAINFO {
                pub BufferAlignment: i32,
                pub MaxMetadataBufferSize: u32,
            }
            impl KSCAMERA_EXTENDEDPROP_METADATAINFO {}
            impl ::std::default::Default for KSCAMERA_EXTENDEDPROP_METADATAINFO {
                fn default() -> Self {
                    Self {
                        BufferAlignment: 0,
                        MaxMetadataBufferSize: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_EXTENDEDPROP_METADATAINFO {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_EXTENDEDPROP_METADATAINFO")
                        .field(
                            "BufferAlignment",
                            &format_args!("{:?}", self.BufferAlignment),
                        )
                        .field(
                            "MaxMetadataBufferSize",
                            &format_args!("{:?}", self.MaxMetadataBufferSize),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_EXTENDEDPROP_METADATAINFO {
                fn eq(&self, other: &Self) -> bool {
                    self.BufferAlignment == other.BufferAlignment
                        && self.MaxMetadataBufferSize == other.MaxMetadataBufferSize
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_EXTENDEDPROP_METADATAINFO {}
            unsafe impl ::windows::Abi for KSCAMERA_EXTENDEDPROP_METADATAINFO {
                type Abi = Self;
            }
            pub const KSCAMERA_EXTENDEDPROP_METADATA_ALIGNMENTREQUIRED: u64 = 256u64;
            pub const KSCAMERA_EXTENDEDPROP_METADATA_MEMORYTYPE_MASK: u64 = 255u64;
            pub const KSCAMERA_EXTENDEDPROP_METADATA_SYSTEMMEMORY: u64 = 1u64;
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSCAMERA_EXTENDEDPROP_MetadataAlignment(pub i32);
            impl KSCAMERA_EXTENDEDPROP_MetadataAlignment {
                pub const KSCAMERA_EXTENDEDPROP_MetadataAlignment_16: Self = Self(4i32);
                pub const KSCAMERA_EXTENDEDPROP_MetadataAlignment_32: Self = Self(5i32);
                pub const KSCAMERA_EXTENDEDPROP_MetadataAlignment_64: Self = Self(6i32);
                pub const KSCAMERA_EXTENDEDPROP_MetadataAlignment_128: Self = Self(7i32);
                pub const KSCAMERA_EXTENDEDPROP_MetadataAlignment_256: Self = Self(8i32);
                pub const KSCAMERA_EXTENDEDPROP_MetadataAlignment_512: Self = Self(9i32);
                pub const KSCAMERA_EXTENDEDPROP_MetadataAlignment_1024: Self = Self(10i32);
                pub const KSCAMERA_EXTENDEDPROP_MetadataAlignment_2048: Self = Self(11i32);
                pub const KSCAMERA_EXTENDEDPROP_MetadataAlignment_4096: Self = Self(12i32);
                pub const KSCAMERA_EXTENDEDPROP_MetadataAlignment_8192: Self = Self(13i32);
            }
            impl ::std::convert::From<i32> for KSCAMERA_EXTENDEDPROP_MetadataAlignment {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSCAMERA_EXTENDEDPROP_MetadataAlignment {
                type Abi = Self;
            }
            pub const KSCAMERA_EXTENDEDPROP_OIS_AUTO: u64 = 2u64;
            pub const KSCAMERA_EXTENDEDPROP_OIS_OFF: u64 = 0u64;
            pub const KSCAMERA_EXTENDEDPROP_OIS_ON: u64 = 1u64;
            pub const KSCAMERA_EXTENDEDPROP_OPTIMIZATION_DEFAULT: u64 = 0u64;
            pub const KSCAMERA_EXTENDEDPROP_OPTIMIZATION_LATENCY: u64 = 8u64;
            pub const KSCAMERA_EXTENDEDPROP_OPTIMIZATION_PHOTO: u64 = 1u64;
            pub const KSCAMERA_EXTENDEDPROP_OPTIMIZATION_POWER: u64 = 16u64;
            pub const KSCAMERA_EXTENDEDPROP_OPTIMIZATION_QUALITY: u64 = 4u64;
            pub const KSCAMERA_EXTENDEDPROP_OPTIMIZATION_VIDEO: u64 = 2u64;
            pub const KSCAMERA_EXTENDEDPROP_PHOTOCONFIRMATION_OFF: u64 = 0u64;
            pub const KSCAMERA_EXTENDEDPROP_PHOTOCONFIRMATION_ON: u64 = 1u64;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_EXTENDEDPROP_PHOTOMODE {
                pub RequestedHistoryFrames: u32,
                pub MaxHistoryFrames: u32,
                pub SubMode: u32,
                pub Reserved: u32,
            }
            impl KSCAMERA_EXTENDEDPROP_PHOTOMODE {}
            impl ::std::default::Default for KSCAMERA_EXTENDEDPROP_PHOTOMODE {
                fn default() -> Self {
                    Self {
                        RequestedHistoryFrames: 0,
                        MaxHistoryFrames: 0,
                        SubMode: 0,
                        Reserved: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_EXTENDEDPROP_PHOTOMODE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_EXTENDEDPROP_PHOTOMODE")
                        .field(
                            "RequestedHistoryFrames",
                            &format_args!("{:?}", self.RequestedHistoryFrames),
                        )
                        .field(
                            "MaxHistoryFrames",
                            &format_args!("{:?}", self.MaxHistoryFrames),
                        )
                        .field("SubMode", &format_args!("{:?}", self.SubMode))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_EXTENDEDPROP_PHOTOMODE {
                fn eq(&self, other: &Self) -> bool {
                    self.RequestedHistoryFrames == other.RequestedHistoryFrames
                        && self.MaxHistoryFrames == other.MaxHistoryFrames
                        && self.SubMode == other.SubMode
                        && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_EXTENDEDPROP_PHOTOMODE {}
            unsafe impl ::windows::Abi for KSCAMERA_EXTENDEDPROP_PHOTOMODE {
                type Abi = Self;
            }
            pub const KSCAMERA_EXTENDEDPROP_PHOTOMODE_NORMAL: u64 = 0u64;
            pub const KSCAMERA_EXTENDEDPROP_PHOTOMODE_SEQUENCE: u64 = 1u64;
            pub const KSCAMERA_EXTENDEDPROP_PHOTOMODE_SEQUENCE_SUB_NONE: u32 = 0u32;
            pub const KSCAMERA_EXTENDEDPROP_PHOTOMODE_SEQUENCE_SUB_VARIABLE: u32 = 1u32;
            pub const KSCAMERA_EXTENDEDPROP_PHOTOTHUMBNAIL_16X: u64 = 8u64;
            pub const KSCAMERA_EXTENDEDPROP_PHOTOTHUMBNAIL_2X: u64 = 1u64;
            pub const KSCAMERA_EXTENDEDPROP_PHOTOTHUMBNAIL_4X: u64 = 2u64;
            pub const KSCAMERA_EXTENDEDPROP_PHOTOTHUMBNAIL_8X: u64 = 4u64;
            pub const KSCAMERA_EXTENDEDPROP_PHOTOTHUMBNAIL_DISABLE: u64 = 0u64;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_EXTENDEDPROP_PROFILE {
                pub ProfileId: ::windows::Guid,
                pub Index: u32,
                pub Reserved: u32,
            }
            impl KSCAMERA_EXTENDEDPROP_PROFILE {}
            impl ::std::default::Default for KSCAMERA_EXTENDEDPROP_PROFILE {
                fn default() -> Self {
                    Self {
                        ProfileId: ::std::default::Default::default(),
                        Index: 0,
                        Reserved: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_EXTENDEDPROP_PROFILE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_EXTENDEDPROP_PROFILE")
                        .field("ProfileId", &format_args!("{:?}", self.ProfileId))
                        .field("Index", &format_args!("{:?}", self.Index))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_EXTENDEDPROP_PROFILE {
                fn eq(&self, other: &Self) -> bool {
                    self.ProfileId == other.ProfileId
                        && self.Index == other.Index
                        && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_EXTENDEDPROP_PROFILE {}
            unsafe impl ::windows::Abi for KSCAMERA_EXTENDEDPROP_PROFILE {
                type Abi = Self;
            }
            pub const KSCAMERA_EXTENDEDPROP_RELATIVEPANELOPTIMIZATION_DYNAMIC: u64 = 2u64;
            pub const KSCAMERA_EXTENDEDPROP_RELATIVEPANELOPTIMIZATION_OFF: u64 = 0u64;
            pub const KSCAMERA_EXTENDEDPROP_RELATIVEPANELOPTIMIZATION_ON: u64 = 1u64;
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSCAMERA_EXTENDEDPROP_ROITYPE(pub i32);
            impl KSCAMERA_EXTENDEDPROP_ROITYPE {
                pub const KSCAMERA_EXTENDEDPROP_ROITYPE_UNKNOWN: Self = Self(0i32);
                pub const KSCAMERA_EXTENDEDPROP_ROITYPE_FACE: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for KSCAMERA_EXTENDEDPROP_ROITYPE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSCAMERA_EXTENDEDPROP_ROITYPE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_EXTENDEDPROP_ROI_CONFIGCAPS {
                pub ControlId: u32,
                pub MaxNumberOfROIs: u32,
                pub Capability: u64,
            }
            impl KSCAMERA_EXTENDEDPROP_ROI_CONFIGCAPS {}
            impl ::std::default::Default for KSCAMERA_EXTENDEDPROP_ROI_CONFIGCAPS {
                fn default() -> Self {
                    Self {
                        ControlId: 0,
                        MaxNumberOfROIs: 0,
                        Capability: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_EXTENDEDPROP_ROI_CONFIGCAPS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_EXTENDEDPROP_ROI_CONFIGCAPS")
                        .field("ControlId", &format_args!("{:?}", self.ControlId))
                        .field(
                            "MaxNumberOfROIs",
                            &format_args!("{:?}", self.MaxNumberOfROIs),
                        )
                        .field("Capability", &format_args!("{:?}", self.Capability))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_EXTENDEDPROP_ROI_CONFIGCAPS {
                fn eq(&self, other: &Self) -> bool {
                    self.ControlId == other.ControlId
                        && self.MaxNumberOfROIs == other.MaxNumberOfROIs
                        && self.Capability == other.Capability
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_EXTENDEDPROP_ROI_CONFIGCAPS {}
            unsafe impl ::windows::Abi for KSCAMERA_EXTENDEDPROP_ROI_CONFIGCAPS {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_EXTENDEDPROP_ROI_CONFIGCAPSHEADER {
                pub Size: u32,
                pub ConfigCapCount: u32,
                pub Reserved: u64,
            }
            impl KSCAMERA_EXTENDEDPROP_ROI_CONFIGCAPSHEADER {}
            impl ::std::default::Default for KSCAMERA_EXTENDEDPROP_ROI_CONFIGCAPSHEADER {
                fn default() -> Self {
                    Self {
                        Size: 0,
                        ConfigCapCount: 0,
                        Reserved: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_EXTENDEDPROP_ROI_CONFIGCAPSHEADER {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_EXTENDEDPROP_ROI_CONFIGCAPSHEADER")
                        .field("Size", &format_args!("{:?}", self.Size))
                        .field("ConfigCapCount", &format_args!("{:?}", self.ConfigCapCount))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_EXTENDEDPROP_ROI_CONFIGCAPSHEADER {
                fn eq(&self, other: &Self) -> bool {
                    self.Size == other.Size
                        && self.ConfigCapCount == other.ConfigCapCount
                        && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_EXTENDEDPROP_ROI_CONFIGCAPSHEADER {}
            unsafe impl ::windows::Abi for KSCAMERA_EXTENDEDPROP_ROI_CONFIGCAPSHEADER {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_EXTENDEDPROP_ROI_INFO {
                pub Region: super::DisplayDevices::RECT,
                pub Flags: u64,
                pub Weight: i32,
                pub RegionOfInterestType: i32,
            }
            impl KSCAMERA_EXTENDEDPROP_ROI_INFO {}
            impl ::std::default::Default for KSCAMERA_EXTENDEDPROP_ROI_INFO {
                fn default() -> Self {
                    Self {
                        Region: ::std::default::Default::default(),
                        Flags: 0,
                        Weight: 0,
                        RegionOfInterestType: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_EXTENDEDPROP_ROI_INFO {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_EXTENDEDPROP_ROI_INFO")
                        .field("Region", &format_args!("{:?}", self.Region))
                        .field("Flags", &format_args!("{:?}", self.Flags))
                        .field("Weight", &format_args!("{:?}", self.Weight))
                        .field(
                            "RegionOfInterestType",
                            &format_args!("{:?}", self.RegionOfInterestType),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_EXTENDEDPROP_ROI_INFO {
                fn eq(&self, other: &Self) -> bool {
                    self.Region == other.Region
                        && self.Flags == other.Flags
                        && self.Weight == other.Weight
                        && self.RegionOfInterestType == other.RegionOfInterestType
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_EXTENDEDPROP_ROI_INFO {}
            unsafe impl ::windows::Abi for KSCAMERA_EXTENDEDPROP_ROI_INFO {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_EXTENDEDPROP_ROI_EXPOSURE {
                pub ROIInfo: KSCAMERA_EXTENDEDPROP_ROI_INFO,
                pub Reserved: u64,
            }
            impl KSCAMERA_EXTENDEDPROP_ROI_EXPOSURE {}
            impl ::std::default::Default for KSCAMERA_EXTENDEDPROP_ROI_EXPOSURE {
                fn default() -> Self {
                    Self {
                        ROIInfo: ::std::default::Default::default(),
                        Reserved: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_EXTENDEDPROP_ROI_EXPOSURE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_EXTENDEDPROP_ROI_EXPOSURE")
                        .field("ROIInfo", &format_args!("{:?}", self.ROIInfo))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_EXTENDEDPROP_ROI_EXPOSURE {
                fn eq(&self, other: &Self) -> bool {
                    self.ROIInfo == other.ROIInfo && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_EXTENDEDPROP_ROI_EXPOSURE {}
            unsafe impl ::windows::Abi for KSCAMERA_EXTENDEDPROP_ROI_EXPOSURE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_EXTENDEDPROP_ROI_FOCUS {
                pub ROIInfo: KSCAMERA_EXTENDEDPROP_ROI_INFO,
                pub Reserved: u64,
            }
            impl KSCAMERA_EXTENDEDPROP_ROI_FOCUS {}
            impl ::std::default::Default for KSCAMERA_EXTENDEDPROP_ROI_FOCUS {
                fn default() -> Self {
                    Self {
                        ROIInfo: ::std::default::Default::default(),
                        Reserved: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_EXTENDEDPROP_ROI_FOCUS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_EXTENDEDPROP_ROI_FOCUS")
                        .field("ROIInfo", &format_args!("{:?}", self.ROIInfo))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_EXTENDEDPROP_ROI_FOCUS {
                fn eq(&self, other: &Self) -> bool {
                    self.ROIInfo == other.ROIInfo && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_EXTENDEDPROP_ROI_FOCUS {}
            unsafe impl ::windows::Abi for KSCAMERA_EXTENDEDPROP_ROI_FOCUS {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_EXTENDEDPROP_ROI_ISPCONTROL {
                pub ControlId: u32,
                pub ROICount: u32,
                pub Result: u32,
                pub Reserved: u32,
            }
            impl KSCAMERA_EXTENDEDPROP_ROI_ISPCONTROL {}
            impl ::std::default::Default for KSCAMERA_EXTENDEDPROP_ROI_ISPCONTROL {
                fn default() -> Self {
                    Self {
                        ControlId: 0,
                        ROICount: 0,
                        Result: 0,
                        Reserved: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_EXTENDEDPROP_ROI_ISPCONTROL {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_EXTENDEDPROP_ROI_ISPCONTROL")
                        .field("ControlId", &format_args!("{:?}", self.ControlId))
                        .field("ROICount", &format_args!("{:?}", self.ROICount))
                        .field("Result", &format_args!("{:?}", self.Result))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_EXTENDEDPROP_ROI_ISPCONTROL {
                fn eq(&self, other: &Self) -> bool {
                    self.ControlId == other.ControlId
                        && self.ROICount == other.ROICount
                        && self.Result == other.Result
                        && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_EXTENDEDPROP_ROI_ISPCONTROL {}
            unsafe impl ::windows::Abi for KSCAMERA_EXTENDEDPROP_ROI_ISPCONTROL {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_EXTENDEDPROP_ROI_ISPCONTROLHEADER {
                pub Size: u32,
                pub ControlCount: u32,
                pub Reserved: u64,
            }
            impl KSCAMERA_EXTENDEDPROP_ROI_ISPCONTROLHEADER {}
            impl ::std::default::Default for KSCAMERA_EXTENDEDPROP_ROI_ISPCONTROLHEADER {
                fn default() -> Self {
                    Self {
                        Size: 0,
                        ControlCount: 0,
                        Reserved: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_EXTENDEDPROP_ROI_ISPCONTROLHEADER {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_EXTENDEDPROP_ROI_ISPCONTROLHEADER")
                        .field("Size", &format_args!("{:?}", self.Size))
                        .field("ControlCount", &format_args!("{:?}", self.ControlCount))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_EXTENDEDPROP_ROI_ISPCONTROLHEADER {
                fn eq(&self, other: &Self) -> bool {
                    self.Size == other.Size
                        && self.ControlCount == other.ControlCount
                        && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_EXTENDEDPROP_ROI_ISPCONTROLHEADER {}
            unsafe impl ::windows::Abi for KSCAMERA_EXTENDEDPROP_ROI_ISPCONTROLHEADER {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_EXTENDEDPROP_ROI_WHITEBALANCE {
                pub ROIInfo: KSCAMERA_EXTENDEDPROP_ROI_INFO,
                pub Reserved: u64,
            }
            impl KSCAMERA_EXTENDEDPROP_ROI_WHITEBALANCE {}
            impl ::std::default::Default for KSCAMERA_EXTENDEDPROP_ROI_WHITEBALANCE {
                fn default() -> Self {
                    Self {
                        ROIInfo: ::std::default::Default::default(),
                        Reserved: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_EXTENDEDPROP_ROI_WHITEBALANCE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_EXTENDEDPROP_ROI_WHITEBALANCE")
                        .field("ROIInfo", &format_args!("{:?}", self.ROIInfo))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_EXTENDEDPROP_ROI_WHITEBALANCE {
                fn eq(&self, other: &Self) -> bool {
                    self.ROIInfo == other.ROIInfo && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_EXTENDEDPROP_ROI_WHITEBALANCE {}
            unsafe impl ::windows::Abi for KSCAMERA_EXTENDEDPROP_ROI_WHITEBALANCE {
                type Abi = Self;
            }
            pub const KSCAMERA_EXTENDEDPROP_SCENEMODE_AUTO: u64 = 0u64;
            pub const KSCAMERA_EXTENDEDPROP_SCENEMODE_BACKLIT: u64 = 1024u64;
            pub const KSCAMERA_EXTENDEDPROP_SCENEMODE_BEACH: u64 = 32u64;
            pub const KSCAMERA_EXTENDEDPROP_SCENEMODE_CANDLELIGHT: u64 = 128u64;
            pub const KSCAMERA_EXTENDEDPROP_SCENEMODE_LANDSCAPE: u64 = 256u64;
            pub const KSCAMERA_EXTENDEDPROP_SCENEMODE_MACRO: u64 = 1u64;
            pub const KSCAMERA_EXTENDEDPROP_SCENEMODE_MANUAL: u64 = 36028797018963968u64;
            pub const KSCAMERA_EXTENDEDPROP_SCENEMODE_NIGHT: u64 = 16u64;
            pub const KSCAMERA_EXTENDEDPROP_SCENEMODE_NIGHTPORTRAIT: u64 = 512u64;
            pub const KSCAMERA_EXTENDEDPROP_SCENEMODE_PORTRAIT: u64 = 2u64;
            pub const KSCAMERA_EXTENDEDPROP_SCENEMODE_SNOW: u64 = 8u64;
            pub const KSCAMERA_EXTENDEDPROP_SCENEMODE_SPORT: u64 = 4u64;
            pub const KSCAMERA_EXTENDEDPROP_SCENEMODE_SUNSET: u64 = 64u64;
            pub const KSCAMERA_EXTENDEDPROP_SECUREMODE_DISABLED: u64 = 1u64;
            pub const KSCAMERA_EXTENDEDPROP_SECUREMODE_ENABLED: u64 = 2u64;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_EXTENDEDPROP_VALUE {
                pub Value: KSCAMERA_EXTENDEDPROP_VALUE_0,
            }
            impl KSCAMERA_EXTENDEDPROP_VALUE {}
            unsafe impl ::windows::Abi for KSCAMERA_EXTENDEDPROP_VALUE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union KSCAMERA_EXTENDEDPROP_VALUE_0 {
                pub dbl: f64,
                pub ull: u64,
                pub ul: u32,
                pub ratio: u64,
                pub l: i32,
                pub ll: i64,
            }
            impl KSCAMERA_EXTENDEDPROP_VALUE_0 {}
            unsafe impl ::windows::Abi for KSCAMERA_EXTENDEDPROP_VALUE_0 {
                type Abi = Self;
            }
            pub const KSCAMERA_EXTENDEDPROP_VFR_OFF: u64 = 0u64;
            pub const KSCAMERA_EXTENDEDPROP_VFR_ON: u64 = 1u64;
            pub const KSCAMERA_EXTENDEDPROP_VIDEOHDR_AUTO: u64 = 2u64;
            pub const KSCAMERA_EXTENDEDPROP_VIDEOHDR_OFF: u64 = 0u64;
            pub const KSCAMERA_EXTENDEDPROP_VIDEOHDR_ON: u64 = 1u64;
            pub const KSCAMERA_EXTENDEDPROP_VIDEOPROCFLAG_AUTO: u64 = 1u64;
            pub const KSCAMERA_EXTENDEDPROP_VIDEOPROCFLAG_LOCK: u64 = 4u64;
            pub const KSCAMERA_EXTENDEDPROP_VIDEOPROCFLAG_MANUAL: u64 = 2u64;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_EXTENDEDPROP_VIDEOPROCSETTING {
                pub Mode: u32,
                pub Min: i32,
                pub Max: i32,
                pub Step: i32,
                pub VideoProc: KSCAMERA_EXTENDEDPROP_VALUE,
                pub Reserved: u64,
            }
            impl KSCAMERA_EXTENDEDPROP_VIDEOPROCSETTING {}
            unsafe impl ::windows::Abi for KSCAMERA_EXTENDEDPROP_VIDEOPROCSETTING {
                type Abi = Self;
            }
            pub const KSCAMERA_EXTENDEDPROP_VIDEOSTABILIZATION_AUTO: u64 = 2u64;
            pub const KSCAMERA_EXTENDEDPROP_VIDEOSTABILIZATION_OFF: u64 = 0u64;
            pub const KSCAMERA_EXTENDEDPROP_VIDEOSTABILIZATION_ON: u64 = 1u64;
            pub const KSCAMERA_EXTENDEDPROP_VIDEOTEMPORALDENOISING_AUTO: u64 = 1u64;
            pub const KSCAMERA_EXTENDEDPROP_VIDEOTEMPORALDENOISING_OFF: u64 = 2u64;
            pub const KSCAMERA_EXTENDEDPROP_VIDEOTEMPORALDENOISING_ON: u64 = 4u64;
            pub const KSCAMERA_EXTENDEDPROP_VIDEOTORCH_OFF: u64 = 0u64;
            pub const KSCAMERA_EXTENDEDPROP_VIDEOTORCH_ON: u64 = 1u64;
            pub const KSCAMERA_EXTENDEDPROP_VIDEOTORCH_ON_ADJUSTABLEPOWER: u64 = 2u64;
            pub const KSCAMERA_EXTENDEDPROP_WARMSTART_MODE_DISABLED: u64 = 0u64;
            pub const KSCAMERA_EXTENDEDPROP_WARMSTART_MODE_ENABLED: u64 = 1u64;
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSCAMERA_EXTENDEDPROP_WBPRESET(pub i32);
            impl KSCAMERA_EXTENDEDPROP_WBPRESET {
                pub const KSCAMERA_EXTENDEDPROP_WBPRESET_CLOUDY: Self = Self(1i32);
                pub const KSCAMERA_EXTENDEDPROP_WBPRESET_DAYLIGHT: Self = Self(2i32);
                pub const KSCAMERA_EXTENDEDPROP_WBPRESET_FLASH: Self = Self(3i32);
                pub const KSCAMERA_EXTENDEDPROP_WBPRESET_FLUORESCENT: Self = Self(4i32);
                pub const KSCAMERA_EXTENDEDPROP_WBPRESET_TUNGSTEN: Self = Self(5i32);
                pub const KSCAMERA_EXTENDEDPROP_WBPRESET_CANDLELIGHT: Self = Self(6i32);
            }
            impl ::std::convert::From<i32> for KSCAMERA_EXTENDEDPROP_WBPRESET {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSCAMERA_EXTENDEDPROP_WBPRESET {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSCAMERA_EXTENDEDPROP_WHITEBALANCE_MODE(pub i32);
            impl KSCAMERA_EXTENDEDPROP_WHITEBALANCE_MODE {
                pub const KSCAMERA_EXTENDEDPROP_WHITEBALANCE_TEMPERATURE: Self = Self(1i32);
                pub const KSCAMERA_EXTENDEDPROP_WHITEBALANCE_PRESET: Self = Self(2i32);
            }
            impl ::std::convert::From<i32> for KSCAMERA_EXTENDEDPROP_WHITEBALANCE_MODE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSCAMERA_EXTENDEDPROP_WHITEBALANCE_MODE {
                type Abi = Self;
            }
            pub const KSCAMERA_EXTENDEDPROP_ZOOM_DEFAULT: u64 = 0u64;
            pub const KSCAMERA_EXTENDEDPROP_ZOOM_DIRECT: u64 = 1u64;
            pub const KSCAMERA_EXTENDEDPROP_ZOOM_SMOOTH: u64 = 2u64;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_MAXVIDEOFPS_FORPHOTORES {
                pub PhotoResWidth: u32,
                pub PhotoResHeight: u32,
                pub PreviewFPSNum: u32,
                pub PreviewFPSDenom: u32,
                pub CaptureFPSNum: u32,
                pub CaptureFPSDenom: u32,
            }
            impl KSCAMERA_MAXVIDEOFPS_FORPHOTORES {}
            impl ::std::default::Default for KSCAMERA_MAXVIDEOFPS_FORPHOTORES {
                fn default() -> Self {
                    Self {
                        PhotoResWidth: 0,
                        PhotoResHeight: 0,
                        PreviewFPSNum: 0,
                        PreviewFPSDenom: 0,
                        CaptureFPSNum: 0,
                        CaptureFPSDenom: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_MAXVIDEOFPS_FORPHOTORES {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_MAXVIDEOFPS_FORPHOTORES")
                        .field("PhotoResWidth", &format_args!("{:?}", self.PhotoResWidth))
                        .field("PhotoResHeight", &format_args!("{:?}", self.PhotoResHeight))
                        .field("PreviewFPSNum", &format_args!("{:?}", self.PreviewFPSNum))
                        .field(
                            "PreviewFPSDenom",
                            &format_args!("{:?}", self.PreviewFPSDenom),
                        )
                        .field("CaptureFPSNum", &format_args!("{:?}", self.CaptureFPSNum))
                        .field(
                            "CaptureFPSDenom",
                            &format_args!("{:?}", self.CaptureFPSDenom),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_MAXVIDEOFPS_FORPHOTORES {
                fn eq(&self, other: &Self) -> bool {
                    self.PhotoResWidth == other.PhotoResWidth
                        && self.PhotoResHeight == other.PhotoResHeight
                        && self.PreviewFPSNum == other.PreviewFPSNum
                        && self.PreviewFPSDenom == other.PreviewFPSDenom
                        && self.CaptureFPSNum == other.CaptureFPSNum
                        && self.CaptureFPSDenom == other.CaptureFPSDenom
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_MAXVIDEOFPS_FORPHOTORES {}
            unsafe impl ::windows::Abi for KSCAMERA_MAXVIDEOFPS_FORPHOTORES {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_METADATA_ITEMHEADER {
                pub MetadataId: u32,
                pub Size: u32,
            }
            impl KSCAMERA_METADATA_ITEMHEADER {}
            impl ::std::default::Default for KSCAMERA_METADATA_ITEMHEADER {
                fn default() -> Self {
                    Self {
                        MetadataId: 0,
                        Size: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_METADATA_ITEMHEADER {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_METADATA_ITEMHEADER")
                        .field("MetadataId", &format_args!("{:?}", self.MetadataId))
                        .field("Size", &format_args!("{:?}", self.Size))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_METADATA_ITEMHEADER {
                fn eq(&self, other: &Self) -> bool {
                    self.MetadataId == other.MetadataId && self.Size == other.Size
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_METADATA_ITEMHEADER {}
            unsafe impl ::windows::Abi for KSCAMERA_METADATA_ITEMHEADER {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_METADATA_CAPTURESTATS {
                pub Header: KSCAMERA_METADATA_ITEMHEADER,
                pub Flags: u32,
                pub Reserved: u32,
                pub ExposureTime: u64,
                pub ExposureCompensationFlags: u64,
                pub ExposureCompensationValue: i32,
                pub IsoSpeed: u32,
                pub FocusState: u32,
                pub LensPosition: u32,
                pub WhiteBalance: u32,
                pub Flash: u32,
                pub FlashPower: u32,
                pub ZoomFactor: u32,
                pub SceneMode: u64,
                pub SensorFramerate: u64,
            }
            impl KSCAMERA_METADATA_CAPTURESTATS {}
            impl ::std::default::Default for KSCAMERA_METADATA_CAPTURESTATS {
                fn default() -> Self {
                    Self {
                        Header: ::std::default::Default::default(),
                        Flags: 0,
                        Reserved: 0,
                        ExposureTime: 0,
                        ExposureCompensationFlags: 0,
                        ExposureCompensationValue: 0,
                        IsoSpeed: 0,
                        FocusState: 0,
                        LensPosition: 0,
                        WhiteBalance: 0,
                        Flash: 0,
                        FlashPower: 0,
                        ZoomFactor: 0,
                        SceneMode: 0,
                        SensorFramerate: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_METADATA_CAPTURESTATS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_METADATA_CAPTURESTATS")
                        .field("Header", &format_args!("{:?}", self.Header))
                        .field("Flags", &format_args!("{:?}", self.Flags))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .field("ExposureTime", &format_args!("{:?}", self.ExposureTime))
                        .field(
                            "ExposureCompensationFlags",
                            &format_args!("{:?}", self.ExposureCompensationFlags),
                        )
                        .field(
                            "ExposureCompensationValue",
                            &format_args!("{:?}", self.ExposureCompensationValue),
                        )
                        .field("IsoSpeed", &format_args!("{:?}", self.IsoSpeed))
                        .field("FocusState", &format_args!("{:?}", self.FocusState))
                        .field("LensPosition", &format_args!("{:?}", self.LensPosition))
                        .field("WhiteBalance", &format_args!("{:?}", self.WhiteBalance))
                        .field("Flash", &format_args!("{:?}", self.Flash))
                        .field("FlashPower", &format_args!("{:?}", self.FlashPower))
                        .field("ZoomFactor", &format_args!("{:?}", self.ZoomFactor))
                        .field("SceneMode", &format_args!("{:?}", self.SceneMode))
                        .field(
                            "SensorFramerate",
                            &format_args!("{:?}", self.SensorFramerate),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_METADATA_CAPTURESTATS {
                fn eq(&self, other: &Self) -> bool {
                    self.Header == other.Header
                        && self.Flags == other.Flags
                        && self.Reserved == other.Reserved
                        && self.ExposureTime == other.ExposureTime
                        && self.ExposureCompensationFlags == other.ExposureCompensationFlags
                        && self.ExposureCompensationValue == other.ExposureCompensationValue
                        && self.IsoSpeed == other.IsoSpeed
                        && self.FocusState == other.FocusState
                        && self.LensPosition == other.LensPosition
                        && self.WhiteBalance == other.WhiteBalance
                        && self.Flash == other.Flash
                        && self.FlashPower == other.FlashPower
                        && self.ZoomFactor == other.ZoomFactor
                        && self.SceneMode == other.SceneMode
                        && self.SensorFramerate == other.SensorFramerate
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_METADATA_CAPTURESTATS {}
            unsafe impl ::windows::Abi for KSCAMERA_METADATA_CAPTURESTATS {
                type Abi = Self;
            }
            pub const KSCAMERA_METADATA_CAPTURESTATS_FLAG_EXPOSURECOMPENSATION: u32 = 2u32;
            pub const KSCAMERA_METADATA_CAPTURESTATS_FLAG_EXPOSURETIME: u32 = 1u32;
            pub const KSCAMERA_METADATA_CAPTURESTATS_FLAG_FLASH: u32 = 64u32;
            pub const KSCAMERA_METADATA_CAPTURESTATS_FLAG_FLASHPOWER: u32 = 128u32;
            pub const KSCAMERA_METADATA_CAPTURESTATS_FLAG_FOCUSSTATE: u32 = 8u32;
            pub const KSCAMERA_METADATA_CAPTURESTATS_FLAG_ISOSPEED: u32 = 4u32;
            pub const KSCAMERA_METADATA_CAPTURESTATS_FLAG_LENSPOSITION: u32 = 16u32;
            pub const KSCAMERA_METADATA_CAPTURESTATS_FLAG_SCENEMODE: u32 = 512u32;
            pub const KSCAMERA_METADATA_CAPTURESTATS_FLAG_SENSORFRAMERATE: u32 = 1024u32;
            pub const KSCAMERA_METADATA_CAPTURESTATS_FLAG_WHITEBALANCE: u32 = 32u32;
            pub const KSCAMERA_METADATA_CAPTURESTATS_FLAG_ZOOMFACTOR: u32 = 256u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_METADATA_FRAMEILLUMINATION {
                pub Header: KSCAMERA_METADATA_ITEMHEADER,
                pub Flags: u32,
                pub Reserved: u32,
            }
            impl KSCAMERA_METADATA_FRAMEILLUMINATION {}
            impl ::std::default::Default for KSCAMERA_METADATA_FRAMEILLUMINATION {
                fn default() -> Self {
                    Self {
                        Header: ::std::default::Default::default(),
                        Flags: 0,
                        Reserved: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_METADATA_FRAMEILLUMINATION {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_METADATA_FRAMEILLUMINATION")
                        .field("Header", &format_args!("{:?}", self.Header))
                        .field("Flags", &format_args!("{:?}", self.Flags))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_METADATA_FRAMEILLUMINATION {
                fn eq(&self, other: &Self) -> bool {
                    self.Header == other.Header
                        && self.Flags == other.Flags
                        && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_METADATA_FRAMEILLUMINATION {}
            unsafe impl ::windows::Abi for KSCAMERA_METADATA_FRAMEILLUMINATION {
                type Abi = Self;
            }
            pub const KSCAMERA_METADATA_FRAMEILLUMINATION_FLAG_ON: u32 = 1u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_METADATA_PHOTOCONFIRMATION {
                pub Header: KSCAMERA_METADATA_ITEMHEADER,
                pub PhotoConfirmationIndex: u32,
                pub Reserved: u32,
            }
            impl KSCAMERA_METADATA_PHOTOCONFIRMATION {}
            impl ::std::default::Default for KSCAMERA_METADATA_PHOTOCONFIRMATION {
                fn default() -> Self {
                    Self {
                        Header: ::std::default::Default::default(),
                        PhotoConfirmationIndex: 0,
                        Reserved: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_METADATA_PHOTOCONFIRMATION {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_METADATA_PHOTOCONFIRMATION")
                        .field("Header", &format_args!("{:?}", self.Header))
                        .field(
                            "PhotoConfirmationIndex",
                            &format_args!("{:?}", self.PhotoConfirmationIndex),
                        )
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_METADATA_PHOTOCONFIRMATION {
                fn eq(&self, other: &Self) -> bool {
                    self.Header == other.Header
                        && self.PhotoConfirmationIndex == other.PhotoConfirmationIndex
                        && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_METADATA_PHOTOCONFIRMATION {}
            unsafe impl ::windows::Abi for KSCAMERA_METADATA_PHOTOCONFIRMATION {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSCAMERA_MetadataId(pub i32);
            impl KSCAMERA_MetadataId {
                pub const MetadataId_Standard_Start: Self = Self(1i32);
                pub const MetadataId_PhotoConfirmation: Self = Self(1i32);
                pub const MetadataId_UsbVideoHeader: Self = Self(2i32);
                pub const MetadataId_CaptureStats: Self = Self(3i32);
                pub const MetadataId_CameraExtrinsics: Self = Self(4i32);
                pub const MetadataId_CameraIntrinsics: Self = Self(5i32);
                pub const MetadataId_FrameIllumination: Self = Self(6i32);
                pub const MetadataId_Standard_End: Self = Self(6i32);
                pub const MetadataId_Custom_Start: Self = Self(-2147483648i32);
            }
            impl ::std::convert::From<i32> for KSCAMERA_MetadataId {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSCAMERA_MetadataId {
                type Abi = Self;
            }
            pub const KSCAMERA_PERFRAMESETTING_AUTO: u64 = 4294967296u64;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_PERFRAMESETTING_CAP_HEADER {
                pub Size: u32,
                pub ItemCount: u32,
                pub Flags: u64,
            }
            impl KSCAMERA_PERFRAMESETTING_CAP_HEADER {}
            impl ::std::default::Default for KSCAMERA_PERFRAMESETTING_CAP_HEADER {
                fn default() -> Self {
                    Self {
                        Size: 0,
                        ItemCount: 0,
                        Flags: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_PERFRAMESETTING_CAP_HEADER {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_PERFRAMESETTING_CAP_HEADER")
                        .field("Size", &format_args!("{:?}", self.Size))
                        .field("ItemCount", &format_args!("{:?}", self.ItemCount))
                        .field("Flags", &format_args!("{:?}", self.Flags))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_PERFRAMESETTING_CAP_HEADER {
                fn eq(&self, other: &Self) -> bool {
                    self.Size == other.Size
                        && self.ItemCount == other.ItemCount
                        && self.Flags == other.Flags
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_PERFRAMESETTING_CAP_HEADER {}
            unsafe impl ::windows::Abi for KSCAMERA_PERFRAMESETTING_CAP_HEADER {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_PERFRAMESETTING_CAP_ITEM_HEADER {
                pub Size: u32,
                pub Type: u32,
                pub Flags: u64,
            }
            impl KSCAMERA_PERFRAMESETTING_CAP_ITEM_HEADER {}
            impl ::std::default::Default for KSCAMERA_PERFRAMESETTING_CAP_ITEM_HEADER {
                fn default() -> Self {
                    Self {
                        Size: 0,
                        Type: 0,
                        Flags: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_PERFRAMESETTING_CAP_ITEM_HEADER {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_PERFRAMESETTING_CAP_ITEM_HEADER")
                        .field("Size", &format_args!("{:?}", self.Size))
                        .field("Type", &format_args!("{:?}", self.Type))
                        .field("Flags", &format_args!("{:?}", self.Flags))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_PERFRAMESETTING_CAP_ITEM_HEADER {
                fn eq(&self, other: &Self) -> bool {
                    self.Size == other.Size && self.Type == other.Type && self.Flags == other.Flags
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_PERFRAMESETTING_CAP_ITEM_HEADER {}
            unsafe impl ::windows::Abi for KSCAMERA_PERFRAMESETTING_CAP_ITEM_HEADER {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM {
                pub Size: u32,
                pub Reserved: u32,
                pub Id: ::windows::Guid,
            }
            impl KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM {}
            impl ::std::default::Default for KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM {
                fn default() -> Self {
                    Self {
                        Size: 0,
                        Reserved: 0,
                        Id: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM")
                        .field("Size", &format_args!("{:?}", self.Size))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .field("Id", &format_args!("{:?}", self.Id))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM {
                fn eq(&self, other: &Self) -> bool {
                    self.Size == other.Size
                        && self.Reserved == other.Reserved
                        && self.Id == other.Id
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM {}
            unsafe impl ::windows::Abi for KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_PERFRAMESETTING_FRAME_HEADER {
                pub Size: u32,
                pub Id: u32,
                pub ItemCount: u32,
                pub Reserved: u32,
            }
            impl KSCAMERA_PERFRAMESETTING_FRAME_HEADER {}
            impl ::std::default::Default for KSCAMERA_PERFRAMESETTING_FRAME_HEADER {
                fn default() -> Self {
                    Self {
                        Size: 0,
                        Id: 0,
                        ItemCount: 0,
                        Reserved: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_PERFRAMESETTING_FRAME_HEADER {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_PERFRAMESETTING_FRAME_HEADER")
                        .field("Size", &format_args!("{:?}", self.Size))
                        .field("Id", &format_args!("{:?}", self.Id))
                        .field("ItemCount", &format_args!("{:?}", self.ItemCount))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_PERFRAMESETTING_FRAME_HEADER {
                fn eq(&self, other: &Self) -> bool {
                    self.Size == other.Size
                        && self.Id == other.Id
                        && self.ItemCount == other.ItemCount
                        && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_PERFRAMESETTING_FRAME_HEADER {}
            unsafe impl ::windows::Abi for KSCAMERA_PERFRAMESETTING_FRAME_HEADER {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_PERFRAMESETTING_HEADER {
                pub Size: u32,
                pub FrameCount: u32,
                pub Id: ::windows::Guid,
                pub Flags: u64,
                pub LoopCount: u32,
                pub Reserved: u32,
            }
            impl KSCAMERA_PERFRAMESETTING_HEADER {}
            impl ::std::default::Default for KSCAMERA_PERFRAMESETTING_HEADER {
                fn default() -> Self {
                    Self {
                        Size: 0,
                        FrameCount: 0,
                        Id: ::std::default::Default::default(),
                        Flags: 0,
                        LoopCount: 0,
                        Reserved: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_PERFRAMESETTING_HEADER {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_PERFRAMESETTING_HEADER")
                        .field("Size", &format_args!("{:?}", self.Size))
                        .field("FrameCount", &format_args!("{:?}", self.FrameCount))
                        .field("Id", &format_args!("{:?}", self.Id))
                        .field("Flags", &format_args!("{:?}", self.Flags))
                        .field("LoopCount", &format_args!("{:?}", self.LoopCount))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_PERFRAMESETTING_HEADER {
                fn eq(&self, other: &Self) -> bool {
                    self.Size == other.Size
                        && self.FrameCount == other.FrameCount
                        && self.Id == other.Id
                        && self.Flags == other.Flags
                        && self.LoopCount == other.LoopCount
                        && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_PERFRAMESETTING_HEADER {}
            unsafe impl ::windows::Abi for KSCAMERA_PERFRAMESETTING_HEADER {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_PERFRAMESETTING_ITEM_HEADER {
                pub Size: u32,
                pub Type: u32,
                pub Flags: u64,
            }
            impl KSCAMERA_PERFRAMESETTING_ITEM_HEADER {}
            impl ::std::default::Default for KSCAMERA_PERFRAMESETTING_ITEM_HEADER {
                fn default() -> Self {
                    Self {
                        Size: 0,
                        Type: 0,
                        Flags: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_PERFRAMESETTING_ITEM_HEADER {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_PERFRAMESETTING_ITEM_HEADER")
                        .field("Size", &format_args!("{:?}", self.Size))
                        .field("Type", &format_args!("{:?}", self.Type))
                        .field("Flags", &format_args!("{:?}", self.Flags))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_PERFRAMESETTING_ITEM_HEADER {
                fn eq(&self, other: &Self) -> bool {
                    self.Size == other.Size && self.Type == other.Type && self.Flags == other.Flags
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_PERFRAMESETTING_ITEM_HEADER {}
            unsafe impl ::windows::Abi for KSCAMERA_PERFRAMESETTING_ITEM_HEADER {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSCAMERA_PERFRAMESETTING_ITEM_TYPE(pub i32);
            impl KSCAMERA_PERFRAMESETTING_ITEM_TYPE {
                pub const KSCAMERA_PERFRAMESETTING_ITEM_EXPOSURE_TIME: Self = Self(1i32);
                pub const KSCAMERA_PERFRAMESETTING_ITEM_FLASH: Self = Self(2i32);
                pub const KSCAMERA_PERFRAMESETTING_ITEM_EXPOSURE_COMPENSATION: Self = Self(3i32);
                pub const KSCAMERA_PERFRAMESETTING_ITEM_ISO: Self = Self(4i32);
                pub const KSCAMERA_PERFRAMESETTING_ITEM_FOCUS: Self = Self(5i32);
                pub const KSCAMERA_PERFRAMESETTING_ITEM_PHOTOCONFIRMATION: Self = Self(6i32);
                pub const KSCAMERA_PERFRAMESETTING_ITEM_CUSTOM: Self = Self(7i32);
            }
            impl ::std::convert::From<i32> for KSCAMERA_PERFRAMESETTING_ITEM_TYPE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSCAMERA_PERFRAMESETTING_ITEM_TYPE {
                type Abi = Self;
            }
            pub const KSCAMERA_PERFRAMESETTING_MANUAL: u64 = 8589934592u64;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_PROFILE_MEDIAINFO {
                pub Resolution: KSCAMERA_PROFILE_MEDIAINFO_1,
                pub MaxFrameRate: KSCAMERA_PROFILE_MEDIAINFO_0,
                pub Flags: u64,
                pub Data0: u32,
                pub Data1: u32,
                pub Data2: u32,
                pub Data3: u32,
            }
            impl KSCAMERA_PROFILE_MEDIAINFO {}
            impl ::std::default::Default for KSCAMERA_PROFILE_MEDIAINFO {
                fn default() -> Self {
                    Self {
                        Resolution: ::std::default::Default::default(),
                        MaxFrameRate: ::std::default::Default::default(),
                        Flags: 0,
                        Data0: 0,
                        Data1: 0,
                        Data2: 0,
                        Data3: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_PROFILE_MEDIAINFO {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_PROFILE_MEDIAINFO")
                        .field("Resolution", &format_args!("{:?}", self.Resolution))
                        .field("MaxFrameRate", &format_args!("{:?}", self.MaxFrameRate))
                        .field("Flags", &format_args!("{:?}", self.Flags))
                        .field("Data0", &format_args!("{:?}", self.Data0))
                        .field("Data1", &format_args!("{:?}", self.Data1))
                        .field("Data2", &format_args!("{:?}", self.Data2))
                        .field("Data3", &format_args!("{:?}", self.Data3))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_PROFILE_MEDIAINFO {
                fn eq(&self, other: &Self) -> bool {
                    self.Resolution == other.Resolution
                        && self.MaxFrameRate == other.MaxFrameRate
                        && self.Flags == other.Flags
                        && self.Data0 == other.Data0
                        && self.Data1 == other.Data1
                        && self.Data2 == other.Data2
                        && self.Data3 == other.Data3
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_PROFILE_MEDIAINFO {}
            unsafe impl ::windows::Abi for KSCAMERA_PROFILE_MEDIAINFO {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_PROFILE_MEDIAINFO_0 {
                pub Numerator: u32,
                pub Denominator: u32,
            }
            impl KSCAMERA_PROFILE_MEDIAINFO_0 {}
            impl ::std::default::Default for KSCAMERA_PROFILE_MEDIAINFO_0 {
                fn default() -> Self {
                    Self {
                        Numerator: 0,
                        Denominator: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_PROFILE_MEDIAINFO_0 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_MaxFrameRate_e__Struct")
                        .field("Numerator", &format_args!("{:?}", self.Numerator))
                        .field("Denominator", &format_args!("{:?}", self.Denominator))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_PROFILE_MEDIAINFO_0 {
                fn eq(&self, other: &Self) -> bool {
                    self.Numerator == other.Numerator && self.Denominator == other.Denominator
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_PROFILE_MEDIAINFO_0 {}
            unsafe impl ::windows::Abi for KSCAMERA_PROFILE_MEDIAINFO_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_PROFILE_MEDIAINFO_1 {
                pub X: u32,
                pub Y: u32,
            }
            impl KSCAMERA_PROFILE_MEDIAINFO_1 {}
            impl ::std::default::Default for KSCAMERA_PROFILE_MEDIAINFO_1 {
                fn default() -> Self {
                    Self { X: 0, Y: 0 }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_PROFILE_MEDIAINFO_1 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_Resolution_e__Struct")
                        .field("X", &format_args!("{:?}", self.X))
                        .field("Y", &format_args!("{:?}", self.Y))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_PROFILE_MEDIAINFO_1 {
                fn eq(&self, other: &Self) -> bool {
                    self.X == other.X && self.Y == other.Y
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_PROFILE_MEDIAINFO_1 {}
            unsafe impl ::windows::Abi for KSCAMERA_PROFILE_MEDIAINFO_1 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_PROFILE_PININFO {
                pub PinCategory: ::windows::Guid,
                pub Anonymous: KSCAMERA_PROFILE_PININFO_0,
                pub MediaInfoCount: u32,
                pub MediaInfos: *mut KSCAMERA_PROFILE_MEDIAINFO,
            }
            impl KSCAMERA_PROFILE_PININFO {}
            unsafe impl ::windows::Abi for KSCAMERA_PROFILE_PININFO {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union KSCAMERA_PROFILE_PININFO_0 {
                pub Anonymous: KSCAMERA_PROFILE_PININFO_0_0,
                pub Reserved: u32,
            }
            impl KSCAMERA_PROFILE_PININFO_0 {}
            unsafe impl ::windows::Abi for KSCAMERA_PROFILE_PININFO_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_PROFILE_PININFO_0_0 {
                pub PinIndex: u16,
                pub ProfileSensorType: u16,
            }
            impl KSCAMERA_PROFILE_PININFO_0_0 {}
            impl ::std::default::Default for KSCAMERA_PROFILE_PININFO_0_0 {
                fn default() -> Self {
                    Self {
                        PinIndex: 0,
                        ProfileSensorType: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_PROFILE_PININFO_0_0 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_Anonymous_e__Struct")
                        .field("PinIndex", &format_args!("{:?}", self.PinIndex))
                        .field(
                            "ProfileSensorType",
                            &format_args!("{:?}", self.ProfileSensorType),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_PROFILE_PININFO_0_0 {
                fn eq(&self, other: &Self) -> bool {
                    self.PinIndex == other.PinIndex
                        && self.ProfileSensorType == other.ProfileSensorType
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_PROFILE_PININFO_0_0 {}
            unsafe impl ::windows::Abi for KSCAMERA_PROFILE_PININFO_0_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_PROFILE_INFO {
                pub ProfileId: ::windows::Guid,
                pub Index: u32,
                pub PinCount: u32,
                pub Pins: *mut KSCAMERA_PROFILE_PININFO,
            }
            impl KSCAMERA_PROFILE_INFO {}
            impl ::std::default::Default for KSCAMERA_PROFILE_INFO {
                fn default() -> Self {
                    Self {
                        ProfileId: ::std::default::Default::default(),
                        Index: 0,
                        PinCount: 0,
                        Pins: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_PROFILE_INFO {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_PROFILE_INFO")
                        .field("ProfileId", &format_args!("{:?}", self.ProfileId))
                        .field("Index", &format_args!("{:?}", self.Index))
                        .field("PinCount", &format_args!("{:?}", self.PinCount))
                        .field("Pins", &format_args!("{:?}", self.Pins))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_PROFILE_INFO {
                fn eq(&self, other: &Self) -> bool {
                    self.ProfileId == other.ProfileId
                        && self.Index == other.Index
                        && self.PinCount == other.PinCount
                        && self.Pins == other.Pins
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_PROFILE_INFO {}
            unsafe impl ::windows::Abi for KSCAMERA_PROFILE_INFO {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCAMERA_PROFILE_CONCURRENCYINFO {
                pub ReferenceGuid: ::windows::Guid,
                pub Reserved: u32,
                pub ProfileCount: u32,
                pub Profiles: *mut KSCAMERA_PROFILE_INFO,
            }
            impl KSCAMERA_PROFILE_CONCURRENCYINFO {}
            impl ::std::default::Default for KSCAMERA_PROFILE_CONCURRENCYINFO {
                fn default() -> Self {
                    Self {
                        ReferenceGuid: ::std::default::Default::default(),
                        Reserved: 0,
                        ProfileCount: 0,
                        Profiles: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for KSCAMERA_PROFILE_CONCURRENCYINFO {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCAMERA_PROFILE_CONCURRENCYINFO")
                        .field("ReferenceGuid", &format_args!("{:?}", self.ReferenceGuid))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .field("ProfileCount", &format_args!("{:?}", self.ProfileCount))
                        .field("Profiles", &format_args!("{:?}", self.Profiles))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCAMERA_PROFILE_CONCURRENCYINFO {
                fn eq(&self, other: &Self) -> bool {
                    self.ReferenceGuid == other.ReferenceGuid
                        && self.Reserved == other.Reserved
                        && self.ProfileCount == other.ProfileCount
                        && self.Profiles == other.Profiles
                }
            }
            impl ::std::cmp::Eq for KSCAMERA_PROFILE_CONCURRENCYINFO {}
            unsafe impl ::windows::Abi for KSCAMERA_PROFILE_CONCURRENCYINFO {
                type Abi = Self;
            }
            pub const KSCATEGORY_ACOUSTIC_ECHO_CANCEL: ::windows::Guid =
                ::windows::Guid::from_values(
                    3214294400,
                    50521,
                    4560,
                    [138, 43, 0, 160, 201, 37, 90, 193],
                );
            pub const KSCATEGORY_AUDIO: ::windows::Guid = ::windows::Guid::from_values(
                1771351300,
                37871,
                4560,
                [163, 204, 0, 160, 201, 34, 49, 150],
            );
            pub const KSCATEGORY_BRIDGE: ::windows::Guid = ::windows::Guid::from_values(
                140181248,
                25294,
                4559,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            pub const KSCATEGORY_CAPTURE: ::windows::Guid = ::windows::Guid::from_values(
                1709733693,
                36694,
                4560,
                [163, 185, 0, 160, 201, 34, 49, 150],
            );
            pub const KSCATEGORY_CLOCK: ::windows::Guid = ::windows::Guid::from_values(
                1394025600,
                18321,
                4560,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            pub const KSCATEGORY_COMMUNICATIONSTRANSFORM: ::windows::Guid =
                ::windows::Guid::from_values(
                    3474840108,
                    38723,
                    4560,
                    [163, 238, 0, 160, 201, 34, 49, 150],
                );
            pub const KSCATEGORY_CROSSBAR: ::windows::Guid = ::windows::Guid::from_values(
                2811865089,
                42093,
                4560,
                [161, 140, 0, 160, 36, 1, 220, 212],
            );
            pub const KSCATEGORY_DATACOMPRESSOR: ::windows::Guid = ::windows::Guid::from_values(
                512018688,
                32368,
                4560,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            pub const KSCATEGORY_DATADECOMPRESSOR: ::windows::Guid = ::windows::Guid::from_values(
                656518688,
                32368,
                4560,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            pub const KSCATEGORY_DATATRANSFORM: ::windows::Guid = ::windows::Guid::from_values(
                783318688,
                32368,
                4560,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            pub const KSCATEGORY_ENCODER: ::windows::Guid = ::windows::Guid::from_values(
                426286070,
                50052,
                18685,
                [173, 81, 144, 229, 140, 121, 247, 11],
            );
            pub const KSCATEGORY_ESCALANTE_PLATFORM_DRIVER: ::windows::Guid =
                ::windows::Guid::from_values(
                    1962127016,
                    38760,
                    4561,
                    [142, 7, 0, 160, 201, 94, 194, 46],
                );
            pub const KSCATEGORY_FILESYSTEM: ::windows::Guid = ::windows::Guid::from_values(
                1980755294,
                37719,
                4560,
                [163, 204, 0, 160, 201, 34, 49, 150],
            );
            pub const KSCATEGORY_INTERFACETRANSFORM: ::windows::Guid = ::windows::Guid::from_values(
                3474840109,
                38723,
                4560,
                [163, 238, 0, 160, 201, 34, 49, 150],
            );
            pub const KSCATEGORY_MEDIUMTRANSFORM: ::windows::Guid = ::windows::Guid::from_values(
                3474840110,
                38723,
                4560,
                [163, 238, 0, 160, 201, 34, 49, 150],
            );
            pub const KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR: ::windows::Guid =
                ::windows::Guid::from_values(
                    2198488306,
                    41773,
                    18283,
                    [190, 151, 66, 132, 86, 115, 179, 90],
                );
            pub const KSCATEGORY_MIXER: ::windows::Guid = ::windows::Guid::from_values(
                2910886912,
                31624,
                4560,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            pub const KSCATEGORY_MULTIPLEXER: ::windows::Guid = ::windows::Guid::from_values(
                2052973011,
                417,
                17708,
                [180, 129, 79, 162, 185, 98, 113, 232],
            );
            pub const KSCATEGORY_NETWORK: ::windows::Guid = ::windows::Guid::from_values(
                1741278268,
                27076,
                4562,
                [135, 89, 0, 160, 201, 34, 49, 150],
            );
            pub const KSCATEGORY_NETWORK_CAMERA: ::windows::Guid = ::windows::Guid::from_values(
                3089335890,
                46336,
                16875,
                [180, 243, 66, 52, 247, 245, 174, 153],
            );
            pub const KSCATEGORY_PROXY: ::windows::Guid = ::windows::Guid::from_values(
                2548804298,
                38333,
                4560,
                [163, 234, 0, 160, 201, 34, 49, 150],
            );
            pub const KSCATEGORY_QUALITY: ::windows::Guid = ::windows::Guid::from_values(
                2548804299,
                38333,
                4560,
                [163, 234, 0, 160, 201, 34, 49, 150],
            );
            pub const KSCATEGORY_REALTIME: ::windows::Guid = ::windows::Guid::from_values(
                3943784444,
                4296,
                18788,
                [131, 29, 109, 203, 2, 230, 242, 63],
            );
            pub const KSCATEGORY_RENDER: ::windows::Guid = ::windows::Guid::from_values(
                1709733694,
                36694,
                4560,
                [163, 185, 0, 160, 201, 34, 49, 150],
            );
            pub const KSCATEGORY_SENSOR_CAMERA: ::windows::Guid = ::windows::Guid::from_values(
                619008727,
                25891,
                18423,
                [166, 71, 211, 70, 91, 241, 245, 202],
            );
            pub const KSCATEGORY_SENSOR_GROUP: ::windows::Guid = ::windows::Guid::from_values(
                1721528852,
                2696,
                17169,
                [167, 243, 78, 121, 130, 14, 51, 189],
            );
            pub const KSCATEGORY_SPLITTER: ::windows::Guid = ::windows::Guid::from_values(
                172118688,
                32368,
                4560,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            pub const KSCATEGORY_TEXT: ::windows::Guid = ::windows::Guid::from_values(
                1771351302,
                37871,
                4560,
                [163, 204, 0, 160, 201, 34, 49, 150],
            );
            pub const KSCATEGORY_TOPOLOGY: ::windows::Guid = ::windows::Guid::from_values(
                3718597184,
                7756,
                4561,
                [160, 80, 64, 87, 5, 193, 0, 0],
            );
            pub const KSCATEGORY_TVAUDIO: ::windows::Guid = ::windows::Guid::from_values(
                2811865090,
                42093,
                4560,
                [161, 140, 0, 160, 36, 1, 220, 212],
            );
            pub const KSCATEGORY_TVTUNER: ::windows::Guid = ::windows::Guid::from_values(
                2811865088,
                42093,
                4560,
                [161, 140, 0, 160, 36, 1, 220, 212],
            );
            pub const KSCATEGORY_VBICODEC: ::windows::Guid = ::windows::Guid::from_values(
                131782240,
                8945,
                4561,
                [169, 244, 0, 192, 79, 187, 222, 143],
            );
            pub const KSCATEGORY_VIDEO: ::windows::Guid = ::windows::Guid::from_values(
                1771351301,
                37871,
                4560,
                [163, 204, 0, 160, 201, 34, 49, 150],
            );
            pub const KSCATEGORY_VIDEO_CAMERA: ::windows::Guid = ::windows::Guid::from_values(
                3845273463,
                63862,
                20315,
                [155, 85, 185, 70, 153, 196, 110, 68],
            );
            pub const KSCATEGORY_VIRTUAL: ::windows::Guid = ::windows::Guid::from_values(
                889449156,
                7974,
                4561,
                [138, 176, 0, 160, 201, 34, 49, 150],
            );
            pub const KSCATEGORY_VPMUX: ::windows::Guid = ::windows::Guid::from_values(
                2811865091,
                42093,
                4560,
                [161, 140, 0, 160, 36, 1, 220, 212],
            );
            pub const KSCATEGORY_WDMAUD_USE_PIN_NAME: ::windows::Guid =
                ::windows::Guid::from_values(
                    1201994272,
                    41553,
                    4561,
                    [160, 80, 0, 0, 248, 0, 71, 136],
                );
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCLOCK_CREATE {
                pub CreateFlags: u32,
            }
            impl KSCLOCK_CREATE {}
            impl ::std::default::Default for KSCLOCK_CREATE {
                fn default() -> Self {
                    Self { CreateFlags: 0 }
                }
            }
            impl ::std::fmt::Debug for KSCLOCK_CREATE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCLOCK_CREATE")
                        .field("CreateFlags", &format_args!("{:?}", self.CreateFlags))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCLOCK_CREATE {
                fn eq(&self, other: &Self) -> bool {
                    self.CreateFlags == other.CreateFlags
                }
            }
            impl ::std::cmp::Eq for KSCLOCK_CREATE {}
            unsafe impl ::windows::Abi for KSCLOCK_CREATE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCOMPONENTID {
                pub Manufacturer: ::windows::Guid,
                pub Product: ::windows::Guid,
                pub Component: ::windows::Guid,
                pub Name: ::windows::Guid,
                pub Version: u32,
                pub Revision: u32,
            }
            impl KSCOMPONENTID {}
            impl ::std::default::Default for KSCOMPONENTID {
                fn default() -> Self {
                    Self {
                        Manufacturer: ::std::default::Default::default(),
                        Product: ::std::default::Default::default(),
                        Component: ::std::default::Default::default(),
                        Name: ::std::default::Default::default(),
                        Version: 0,
                        Revision: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCOMPONENTID {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCOMPONENTID")
                        .field("Manufacturer", &format_args!("{:?}", self.Manufacturer))
                        .field("Product", &format_args!("{:?}", self.Product))
                        .field("Component", &format_args!("{:?}", self.Component))
                        .field("Name", &format_args!("{:?}", self.Name))
                        .field("Version", &format_args!("{:?}", self.Version))
                        .field("Revision", &format_args!("{:?}", self.Revision))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCOMPONENTID {
                fn eq(&self, other: &Self) -> bool {
                    self.Manufacturer == other.Manufacturer
                        && self.Product == other.Product
                        && self.Component == other.Component
                        && self.Name == other.Name
                        && self.Version == other.Version
                        && self.Revision == other.Revision
                }
            }
            impl ::std::cmp::Eq for KSCOMPONENTID {}
            unsafe impl ::windows::Abi for KSCOMPONENTID {
                type Abi = Self;
            }
            pub const KSCOMPONENTID_USBAUDIO: ::windows::Guid = ::windows::Guid::from_values(
                2400351728,
                9961,
                16996,
                [186, 77, 57, 255, 240, 29, 148, 170],
            );
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSCORRELATED_TIME {
                pub Time: i64,
                pub SystemTime: i64,
            }
            impl KSCORRELATED_TIME {}
            impl ::std::default::Default for KSCORRELATED_TIME {
                fn default() -> Self {
                    Self {
                        Time: 0,
                        SystemTime: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSCORRELATED_TIME {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSCORRELATED_TIME")
                        .field("Time", &format_args!("{:?}", self.Time))
                        .field("SystemTime", &format_args!("{:?}", self.SystemTime))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSCORRELATED_TIME {
                fn eq(&self, other: &Self) -> bool {
                    self.Time == other.Time && self.SystemTime == other.SystemTime
                }
            }
            impl ::std::cmp::Eq for KSCORRELATED_TIME {}
            unsafe impl ::windows::Abi for KSCORRELATED_TIME {
                type Abi = Self;
            }
            pub const KSCREATE_ITEM_FREEONSTOP: u32 = 8u32;
            pub const KSCREATE_ITEM_NOPARAMETERS: u32 = 4u32;
            pub const KSCREATE_ITEM_SECURITYCHANGED: u32 = 1u32;
            pub const KSCREATE_ITEM_WILDCARD: u32 = 2u32;
            pub const KSCameraProfileSensorType_Custom: u32 = 128u32;
            pub const KSCameraProfileSensorType_Depth: u32 = 4u32;
            pub const KSCameraProfileSensorType_ImageSegmentation: u32 = 16u32;
            pub const KSCameraProfileSensorType_Infrared: u32 = 2u32;
            pub const KSCameraProfileSensorType_PoseTracking: u32 = 8u32;
            pub const KSCameraProfileSensorType_RGB: u32 = 1u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union KSDATAFORMAT {
                pub Anonymous: KSDATAFORMAT_0,
                pub Alignment: i64,
            }
            impl KSDATAFORMAT {}
            unsafe impl ::windows::Abi for KSDATAFORMAT {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSDATAFORMAT_0 {
                pub FormatSize: u32,
                pub Flags: u32,
                pub SampleSize: u32,
                pub Reserved: u32,
                pub MajorFormat: ::windows::Guid,
                pub SubFormat: ::windows::Guid,
                pub Specifier: ::windows::Guid,
            }
            impl KSDATAFORMAT_0 {}
            impl ::std::default::Default for KSDATAFORMAT_0 {
                fn default() -> Self {
                    Self {
                        FormatSize: 0,
                        Flags: 0,
                        SampleSize: 0,
                        Reserved: 0,
                        MajorFormat: ::std::default::Default::default(),
                        SubFormat: ::std::default::Default::default(),
                        Specifier: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for KSDATAFORMAT_0 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_Anonymous_e__Struct")
                        .field("FormatSize", &format_args!("{:?}", self.FormatSize))
                        .field("Flags", &format_args!("{:?}", self.Flags))
                        .field("SampleSize", &format_args!("{:?}", self.SampleSize))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .field("MajorFormat", &format_args!("{:?}", self.MajorFormat))
                        .field("SubFormat", &format_args!("{:?}", self.SubFormat))
                        .field("Specifier", &format_args!("{:?}", self.Specifier))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSDATAFORMAT_0 {
                fn eq(&self, other: &Self) -> bool {
                    self.FormatSize == other.FormatSize
                        && self.Flags == other.Flags
                        && self.SampleSize == other.SampleSize
                        && self.Reserved == other.Reserved
                        && self.MajorFormat == other.MajorFormat
                        && self.SubFormat == other.SubFormat
                        && self.Specifier == other.Specifier
                }
            }
            impl ::std::cmp::Eq for KSDATAFORMAT_0 {}
            unsafe impl ::windows::Abi for KSDATAFORMAT_0 {
                type Abi = Self;
            }
            pub const KSDATAFORMAT_BIT_ATTRIBUTES: u32 = 1u32;
            pub const KSDATAFORMAT_BIT_TEMPORAL_COMPRESSION: u32 = 0u32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSDSOUND_BUFFERDESC {
                pub Flags: u32,
                pub Control: u32,
                pub WaveFormatEx: super::Multimedia::WAVEFORMATEX,
            }
            impl KSDSOUND_BUFFERDESC {}
            unsafe impl ::windows::Abi for KSDSOUND_BUFFERDESC {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSDATAFORMAT_DSOUND {
                pub DataFormat: KSDATAFORMAT,
                pub BufferDesc: KSDSOUND_BUFFERDESC,
            }
            impl KSDATAFORMAT_DSOUND {}
            unsafe impl ::windows::Abi for KSDATAFORMAT_DSOUND {
                type Abi = Self;
            }
            pub const KSDATAFORMAT_SPECIFIER_AC3_AUDIO: ::windows::Guid =
                ::windows::Guid::from_values(
                    3765272804,
                    56134,
                    4559,
                    [180, 209, 0, 128, 95, 108, 187, 234],
                );
            pub const KSDATAFORMAT_SPECIFIER_ANALOGVIDEO: ::windows::Guid =
                ::windows::Guid::from_values(
                    75685344,
                    30743,
                    4559,
                    [138, 3, 0, 170, 0, 110, 203, 101],
                );
            pub const KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO: ::windows::Guid =
                ::windows::Guid::from_values(
                    911358773,
                    36581,
                    4561,
                    [140, 163, 0, 96, 176, 87, 102, 74],
                );
            pub const KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO: ::windows::Guid =
                ::windows::Guid::from_values(
                    911358770,
                    36581,
                    4561,
                    [140, 163, 0, 96, 176, 87, 102, 74],
                );
            pub const KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO: ::windows::Guid =
                ::windows::Guid::from_values(
                    911358769,
                    36581,
                    4561,
                    [140, 163, 0, 96, 176, 87, 102, 74],
                );
            pub const KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO: ::windows::Guid =
                ::windows::Guid::from_values(
                    911358772,
                    36581,
                    4561,
                    [140, 163, 0, 96, 176, 87, 102, 74],
                );
            pub const KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO: ::windows::Guid =
                ::windows::Guid::from_values(
                    911358771,
                    36581,
                    4561,
                    [140, 163, 0, 96, 176, 87, 102, 74],
                );
            pub const KSDATAFORMAT_SPECIFIER_DSOUND: ::windows::Guid = ::windows::Guid::from_values(
                1367707810,
                41348,
                4560,
                [133, 34, 0, 192, 79, 217, 186, 243],
            );
            pub const KSDATAFORMAT_SPECIFIER_FILEHANDLE: ::windows::Guid =
                ::windows::Guid::from_values(
                    1709733692,
                    36694,
                    4560,
                    [163, 185, 0, 160, 201, 34, 49, 150],
                );
            pub const KSDATAFORMAT_SPECIFIER_FILENAME: ::windows::Guid =
                ::windows::Guid::from_values(
                    2860088128,
                    59764,
                    4559,
                    [165, 214, 40, 219, 4, 193, 0, 0],
                );
            pub const KSDATAFORMAT_SPECIFIER_H264_VIDEO: ::windows::Guid =
                ::windows::Guid::from_values(
                    538426885,
                    26153,
                    16968,
                    [170, 237, 126, 26, 71, 188, 155, 156],
                );
            pub const KSDATAFORMAT_SPECIFIER_IMAGE: ::windows::Guid = ::windows::Guid::from_values(
                1764729721,
                54248,
                18001,
                [181, 180, 11, 148, 176, 19, 238, 175],
            );
            pub const KSDATAFORMAT_SPECIFIER_JPEG_IMAGE: ::windows::Guid =
                ::windows::Guid::from_values(
                    1764729721,
                    54248,
                    18001,
                    [181, 180, 11, 148, 176, 19, 238, 175],
                );
            pub const KSDATAFORMAT_SPECIFIER_LPCM_AUDIO: ::windows::Guid =
                ::windows::Guid::from_values(
                    3765272806,
                    56134,
                    4559,
                    [180, 209, 0, 128, 95, 108, 187, 234],
                );
            pub const KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO: ::windows::Guid =
                ::windows::Guid::from_values(
                    89694082,
                    50006,
                    4558,
                    [191, 1, 0, 170, 0, 85, 89, 90],
                );
            pub const KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO: ::windows::Guid =
                ::windows::Guid::from_values(
                    3765272805,
                    56134,
                    4559,
                    [180, 209, 0, 128, 95, 108, 187, 234],
                );
            pub const KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO: ::windows::Guid =
                ::windows::Guid::from_values(
                    3765272803,
                    56134,
                    4559,
                    [180, 209, 0, 128, 95, 108, 187, 234],
                );
            pub const KSDATAFORMAT_SPECIFIER_NONE: ::windows::Guid = ::windows::Guid::from_values(
                258217942,
                49944,
                4560,
                [164, 63, 0, 160, 201, 34, 49, 150],
            );
            pub const KSDATAFORMAT_SPECIFIER_VBI: ::windows::Guid = ::windows::Guid::from_values(
                4146755296,
                60170,
                4560,
                [172, 228, 0, 0, 192, 204, 22, 186],
            );
            pub const KSDATAFORMAT_SPECIFIER_VC_ID: ::windows::Guid = ::windows::Guid::from_values(
                2912473476,
                43715,
                4560,
                [164, 28, 0, 160, 201, 34, 49, 150],
            );
            pub const KSDATAFORMAT_SPECIFIER_VIDEOINFO: ::windows::Guid =
                ::windows::Guid::from_values(
                    89694080,
                    50006,
                    4558,
                    [191, 1, 0, 170, 0, 85, 89, 90],
                );
            pub const KSDATAFORMAT_SPECIFIER_VIDEOINFO2: ::windows::Guid =
                ::windows::Guid::from_values(
                    4146755232,
                    60170,
                    4560,
                    [172, 228, 0, 0, 192, 204, 22, 186],
                );
            pub const KSDATAFORMAT_SPECIFIER_WAVEFORMATEX: ::windows::Guid =
                ::windows::Guid::from_values(
                    89694081,
                    50006,
                    4558,
                    [191, 1, 0, 170, 0, 85, 89, 90],
                );
            pub const KSDATAFORMAT_SUBTYPE_AC3_AUDIO: ::windows::Guid =
                ::windows::Guid::from_values(
                    3765272620,
                    56134,
                    4559,
                    [180, 209, 0, 128, 95, 108, 187, 234],
                );
            pub const KSDATAFORMAT_SUBTYPE_ADPCM: ::windows::Guid =
                ::windows::Guid::from_values(2, 0, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_ALAW: ::windows::Guid =
                ::windows::Guid::from_values(6, 0, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_ANALOG: ::windows::Guid = ::windows::Guid::from_values(
                1840918928,
                26557,
                4559,
                [160, 247, 0, 32, 175, 209, 86, 228],
            );
            pub const KSDATAFORMAT_SUBTYPE_CC: ::windows::Guid = ::windows::Guid::from_values(
                857820353,
                287,
                4562,
                [180, 177, 0, 160, 209, 2, 207, 190],
            );
            pub const KSDATAFORMAT_SUBTYPE_D16: ::windows::Guid =
                ::windows::Guid::from_values(80, 4, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_DRM: ::windows::Guid =
                ::windows::Guid::from_values(9, 0, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_DSS_AUDIO: ::windows::Guid =
                ::windows::Guid::from_values(
                    2695843714,
                    57699,
                    4560,
                    [186, 217, 0, 96, 151, 68, 17, 26],
                );
            pub const KSDATAFORMAT_SUBTYPE_DSS_VIDEO: ::windows::Guid =
                ::windows::Guid::from_values(
                    2695843713,
                    57699,
                    4560,
                    [186, 217, 0, 96, 151, 68, 17, 26],
                );
            pub const KSDATAFORMAT_SUBTYPE_DTS_AUDIO: ::windows::Guid =
                ::windows::Guid::from_values(
                    3765272627,
                    56134,
                    4559,
                    [180, 209, 0, 128, 95, 108, 187, 234],
                );
            pub const KSDATAFORMAT_SUBTYPE_IEC61937_AAC: ::windows::Guid =
                ::windows::Guid::from_values(6, 3306, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_IEC61937_ATRAC: ::windows::Guid =
                ::windows::Guid::from_values(8, 3306, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_DIGITAL: ::windows::Guid =
                ::windows::Guid::from_values(146, 0, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_DIGITAL_PLUS: ::windows::Guid =
                ::windows::Guid::from_values(10, 3306, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_DIGITAL_PLUS_ATMOS: ::windows::Guid =
                ::windows::Guid::from_values(266, 3306, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_MAT20: ::windows::Guid =
                ::windows::Guid::from_values(268, 3306, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_MAT21: ::windows::Guid =
                ::windows::Guid::from_values(780, 3306, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_MLP: ::windows::Guid =
                ::windows::Guid::from_values(12, 3306, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_IEC61937_DST: ::windows::Guid =
                ::windows::Guid::from_values(13, 3306, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_IEC61937_DTS: ::windows::Guid =
                ::windows::Guid::from_values(8, 0, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_IEC61937_DTS_HD: ::windows::Guid =
                ::windows::Guid::from_values(11, 3306, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_IEC61937_MPEG1: ::windows::Guid =
                ::windows::Guid::from_values(3, 3306, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_IEC61937_MPEG2: ::windows::Guid =
                ::windows::Guid::from_values(4, 3306, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_IEC61937_MPEG3: ::windows::Guid =
                ::windows::Guid::from_values(5, 3306, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_IEC61937_ONE_BIT_AUDIO: ::windows::Guid =
                ::windows::Guid::from_values(9, 3306, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_IEC61937_WMA_PRO: ::windows::Guid =
                ::windows::Guid::from_values(356, 0, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_IMAGE_RGB32: ::windows::Guid =
                ::windows::Guid::from_values(22, 0, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_JPEG: ::windows::Guid = ::windows::Guid::from_values(
                434415018,
                22114,
                20421,
                [160, 192, 23, 88, 2, 142, 16, 87],
            );
            pub const KSDATAFORMAT_SUBTYPE_L16: ::windows::Guid =
                ::windows::Guid::from_values(81, 0, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_L16_CUSTOM: ::windows::Guid =
                ::windows::Guid::from_values(81, 32768, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_L16_IR: ::windows::Guid =
                ::windows::Guid::from_values(81, 2, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_L8: ::windows::Guid =
                ::windows::Guid::from_values(50, 0, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_L8_CUSTOM: ::windows::Guid =
                ::windows::Guid::from_values(50, 32768, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_L8_IR: ::windows::Guid =
                ::windows::Guid::from_values(50, 2, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_LPCM_AUDIO: ::windows::Guid =
                ::windows::Guid::from_values(
                    3765272626,
                    56134,
                    4559,
                    [180, 209, 0, 128, 95, 108, 187, 234],
                );
            pub const KSDATAFORMAT_SUBTYPE_Line21_BytePair: ::windows::Guid =
                ::windows::Guid::from_values(
                    1854753314,
                    12556,
                    4560,
                    [183, 154, 0, 170, 0, 55, 103, 167],
                );
            pub const KSDATAFORMAT_SUBTYPE_Line21_GOPPacket: ::windows::Guid =
                ::windows::Guid::from_values(
                    1854753315,
                    12556,
                    4560,
                    [183, 154, 0, 170, 0, 55, 103, 167],
                );
            pub const KSDATAFORMAT_SUBTYPE_MIDI: ::windows::Guid = ::windows::Guid::from_values(
                489039712,
                59735,
                4559,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            pub const KSDATAFORMAT_SUBTYPE_MIDI_BUS: ::windows::Guid = ::windows::Guid::from_values(
                748773280,
                27902,
                4559,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            pub const KSDATAFORMAT_SUBTYPE_MJPG_CUSTOM: ::windows::Guid =
                ::windows::Guid::from_values(
                    1196444237,
                    32768,
                    16,
                    [128, 0, 0, 170, 0, 56, 155, 113],
                );
            pub const KSDATAFORMAT_SUBTYPE_MJPG_DEPTH: ::windows::Guid =
                ::windows::Guid::from_values(1196444237, 4, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_MJPG_IR: ::windows::Guid =
                ::windows::Guid::from_values(1196444237, 2, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_MPEG: ::windows::Guid =
                ::windows::Guid::from_values(80, 0, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_MPEG1Packet: ::windows::Guid =
                ::windows::Guid::from_values(
                    3828804480,
                    21071,
                    4558,
                    [159, 83, 0, 32, 175, 11, 167, 112],
                );
            pub const KSDATAFORMAT_SUBTYPE_MPEG1Payload: ::windows::Guid =
                ::windows::Guid::from_values(
                    3828804481,
                    21071,
                    4558,
                    [159, 83, 0, 32, 175, 11, 167, 112],
                );
            pub const KSDATAFORMAT_SUBTYPE_MPEG1Video: ::windows::Guid =
                ::windows::Guid::from_values(
                    3828804486,
                    21071,
                    4558,
                    [159, 83, 0, 32, 175, 11, 167, 112],
                );
            pub const KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO: ::windows::Guid =
                ::windows::Guid::from_values(
                    3765272619,
                    56134,
                    4559,
                    [180, 209, 0, 128, 95, 108, 187, 234],
                );
            pub const KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO: ::windows::Guid =
                ::windows::Guid::from_values(
                    3765272614,
                    56134,
                    4559,
                    [180, 209, 0, 128, 95, 108, 187, 234],
                );
            pub const KSDATAFORMAT_SUBTYPE_MPEGLAYER3: ::windows::Guid =
                ::windows::Guid::from_values(85, 0, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_MPEG_HEAAC: ::windows::Guid =
                ::windows::Guid::from_values(5648, 0, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_MULAW: ::windows::Guid =
                ::windows::Guid::from_values(7, 0, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_NABTS: ::windows::Guid = ::windows::Guid::from_values(
                4146755298,
                60170,
                4560,
                [172, 228, 0, 0, 192, 204, 22, 186],
            );
            pub const KSDATAFORMAT_SUBTYPE_NABTS_FEC: ::windows::Guid =
                ::windows::Guid::from_values(
                    3881286817,
                    14764,
                    4561,
                    [169, 245, 0, 192, 79, 187, 222, 143],
                );
            pub const KSDATAFORMAT_SUBTYPE_NONE: ::windows::Guid = ::windows::Guid::from_values(
                3828804494,
                21071,
                4558,
                [159, 83, 0, 32, 175, 11, 167, 112],
            );
            pub const KSDATAFORMAT_SUBTYPE_OVERLAY: ::windows::Guid = ::windows::Guid::from_values(
                3828804479,
                21071,
                4558,
                [159, 83, 0, 32, 175, 11, 167, 112],
            );
            pub const KSDATAFORMAT_SUBTYPE_RAW8: ::windows::Guid = ::windows::Guid::from_values(
                3391150496,
                15934,
                4561,
                [155, 249, 0, 192, 79, 187, 222, 191],
            );
            pub const KSDATAFORMAT_SUBTYPE_RIFF: ::windows::Guid = ::windows::Guid::from_values(
                1234557678,
                40678,
                4560,
                [164, 14, 0, 160, 201, 34, 49, 150],
            );
            pub const KSDATAFORMAT_SUBTYPE_RIFFMIDI: ::windows::Guid = ::windows::Guid::from_values(
                1234557680,
                40678,
                4560,
                [164, 14, 0, 160, 201, 34, 49, 150],
            );
            pub const KSDATAFORMAT_SUBTYPE_RIFFWAVE: ::windows::Guid = ::windows::Guid::from_values(
                3828804491,
                21071,
                4558,
                [159, 83, 0, 32, 175, 11, 167, 112],
            );
            pub const KSDATAFORMAT_SUBTYPE_SDDS_AUDIO: ::windows::Guid =
                ::windows::Guid::from_values(
                    3765272628,
                    56134,
                    4559,
                    [180, 209, 0, 128, 95, 108, 187, 234],
                );
            pub const KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO: ::windows::Guid =
                ::windows::Guid::from_values(
                    911358757,
                    36581,
                    4561,
                    [140, 163, 0, 96, 176, 87, 102, 74],
                );
            pub const KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO: ::windows::Guid =
                ::windows::Guid::from_values(
                    911358754,
                    36581,
                    4561,
                    [140, 163, 0, 96, 176, 87, 102, 74],
                );
            pub const KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO: ::windows::Guid =
                ::windows::Guid::from_values(
                    911358753,
                    36581,
                    4561,
                    [140, 163, 0, 96, 176, 87, 102, 74],
                );
            pub const KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO: ::windows::Guid =
                ::windows::Guid::from_values(
                    911358756,
                    36581,
                    4561,
                    [140, 163, 0, 96, 176, 87, 102, 74],
                );
            pub const KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO: ::windows::Guid =
                ::windows::Guid::from_values(
                    911358755,
                    36581,
                    4561,
                    [140, 163, 0, 96, 176, 87, 102, 74],
                );
            pub const KSDATAFORMAT_SUBTYPE_SUBPICTURE: ::windows::Guid =
                ::windows::Guid::from_values(
                    3765272621,
                    56134,
                    4559,
                    [180, 209, 0, 128, 95, 108, 187, 234],
                );
            pub const KSDATAFORMAT_SUBTYPE_TELETEXT: ::windows::Guid = ::windows::Guid::from_values(
                4146755299,
                60170,
                4560,
                [172, 228, 0, 0, 192, 204, 22, 186],
            );
            pub const KSDATAFORMAT_SUBTYPE_VPVBI: ::windows::Guid = ::windows::Guid::from_values(
                1520134721,
                6690,
                4561,
                [186, 217, 0, 96, 151, 68, 17, 26],
            );
            pub const KSDATAFORMAT_SUBTYPE_VPVideo: ::windows::Guid = ::windows::Guid::from_values(
                1520134720,
                6690,
                4561,
                [186, 217, 0, 96, 151, 68, 17, 26],
            );
            pub const KSDATAFORMAT_SUBTYPE_WMAUDIO2: ::windows::Guid =
                ::windows::Guid::from_values(353, 0, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_WMAUDIO3: ::windows::Guid =
                ::windows::Guid::from_values(354, 0, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_SUBTYPE_WMAUDIO_LOSSLESS: ::windows::Guid =
                ::windows::Guid::from_values(355, 0, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_TYPE_ANALOGAUDIO: ::windows::Guid = ::windows::Guid::from_values(
                75685601,
                30743,
                4559,
                [138, 3, 0, 170, 0, 110, 203, 101],
            );
            pub const KSDATAFORMAT_TYPE_ANALOGVIDEO: ::windows::Guid = ::windows::Guid::from_values(
                75685345,
                30743,
                4559,
                [138, 3, 0, 170, 0, 110, 203, 101],
            );
            pub const KSDATAFORMAT_TYPE_AUDIO: ::windows::Guid =
                ::windows::Guid::from_values(1935963489, 0, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_TYPE_AUXLine21Data: ::windows::Guid =
                ::windows::Guid::from_values(
                    1728768640,
                    14978,
                    4560,
                    [183, 155, 0, 170, 0, 55, 103, 167],
                );
            pub const KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK: ::windows::Guid =
                ::windows::Guid::from_values(
                    3976958314,
                    1101,
                    4561,
                    [170, 120, 0, 192, 79, 195, 29, 96],
                );
            pub const KSDATAFORMAT_TYPE_IMAGE: ::windows::Guid = ::windows::Guid::from_values(
                1914145827,
                58459,
                4565,
                [188, 42, 0, 176, 208, 243, 244, 171],
            );
            pub const KSDATAFORMAT_TYPE_MIDI: ::windows::Guid =
                ::windows::Guid::from_values(1935960429, 0, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_TYPE_MPEG2_PES: ::windows::Guid = ::windows::Guid::from_values(
                3765272608,
                56134,
                4559,
                [180, 209, 0, 128, 95, 108, 187, 234],
            );
            pub const KSDATAFORMAT_TYPE_MPEG2_PROGRAM: ::windows::Guid =
                ::windows::Guid::from_values(
                    3765272610,
                    56134,
                    4559,
                    [180, 209, 0, 128, 95, 108, 187, 234],
                );
            pub const KSDATAFORMAT_TYPE_MPEG2_TRANSPORT: ::windows::Guid =
                ::windows::Guid::from_values(
                    3765272611,
                    56134,
                    4559,
                    [180, 209, 0, 128, 95, 108, 187, 234],
                );
            pub const KSDATAFORMAT_TYPE_MUSIC: ::windows::Guid = ::windows::Guid::from_values(
                3878015840,
                25292,
                4559,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            pub const KSDATAFORMAT_TYPE_NABTS: ::windows::Guid = ::windows::Guid::from_values(
                3881286816,
                14764,
                4561,
                [169, 245, 0, 192, 79, 187, 222, 143],
            );
            pub const KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM: ::windows::Guid =
                ::windows::Guid::from_values(
                    911358737,
                    36581,
                    4561,
                    [140, 163, 0, 96, 176, 87, 102, 74],
                );
            pub const KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER: ::windows::Guid =
                ::windows::Guid::from_values(
                    911358739,
                    36581,
                    4561,
                    [140, 163, 0, 96, 176, 87, 102, 74],
                );
            pub const KSDATAFORMAT_TYPE_STANDARD_PES_PACKET: ::windows::Guid =
                ::windows::Guid::from_values(
                    911358738,
                    36581,
                    4561,
                    [140, 163, 0, 96, 176, 87, 102, 74],
                );
            pub const KSDATAFORMAT_TYPE_STREAM: ::windows::Guid = ::windows::Guid::from_values(
                3828804483,
                21071,
                4558,
                [159, 83, 0, 32, 175, 11, 167, 112],
            );
            pub const KSDATAFORMAT_TYPE_TEXT: ::windows::Guid =
                ::windows::Guid::from_values(1937012852, 0, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            pub const KSDATAFORMAT_TYPE_VBI: ::windows::Guid = ::windows::Guid::from_values(
                4146755297,
                60170,
                4560,
                [172, 228, 0, 0, 192, 204, 22, 186],
            );
            pub const KSDATAFORMAT_TYPE_VIDEO: ::windows::Guid =
                ::windows::Guid::from_values(1935960438, 0, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSDATAFORMAT_WAVEFORMATEX {
                pub DataFormat: KSDATAFORMAT,
                pub WaveFormatEx: super::Multimedia::WAVEFORMATEX,
            }
            impl KSDATAFORMAT_WAVEFORMATEX {}
            unsafe impl ::windows::Abi for KSDATAFORMAT_WAVEFORMATEX {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSDATAFORMAT_WAVEFORMATEXTENSIBLE {
                pub DataFormat: KSDATAFORMAT,
                pub WaveFormatExt: super::Multimedia::WAVEFORMATEXTENSIBLE,
            }
            impl KSDATAFORMAT_WAVEFORMATEXTENSIBLE {}
            unsafe impl ::windows::Abi for KSDATAFORMAT_WAVEFORMATEXTENSIBLE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSDATARANGE_AUDIO {
                pub DataRange: KSDATAFORMAT,
                pub MaximumChannels: u32,
                pub MinimumBitsPerSample: u32,
                pub MaximumBitsPerSample: u32,
                pub MinimumSampleFrequency: u32,
                pub MaximumSampleFrequency: u32,
            }
            impl KSDATARANGE_AUDIO {}
            unsafe impl ::windows::Abi for KSDATARANGE_AUDIO {
                type Abi = Self;
            }
            pub const KSDATARANGE_BIT_ATTRIBUTES: u32 = 1u32;
            pub const KSDATARANGE_BIT_REQUIRED_ATTRIBUTES: u32 = 2u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSDATARANGE_MUSIC {
                pub DataRange: KSDATAFORMAT,
                pub Technology: ::windows::Guid,
                pub Channels: u32,
                pub Notes: u32,
                pub ChannelMask: u32,
            }
            impl KSDATARANGE_MUSIC {}
            unsafe impl ::windows::Abi for KSDATARANGE_MUSIC {
                type Abi = Self;
            }
            pub const KSDEGRADESETID_Standard: ::windows::Guid = ::windows::Guid::from_values(
                2673230208,
                28748,
                4560,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSDEGRADE_STANDARD(pub i32);
            impl KSDEGRADE_STANDARD {
                pub const KSDEGRADE_STANDARD_SAMPLE: Self = Self(0i32);
                pub const KSDEGRADE_STANDARD_QUALITY: Self = Self(1i32);
                pub const KSDEGRADE_STANDARD_COMPUTATION: Self = Self(2i32);
                pub const KSDEGRADE_STANDARD_SKIP: Self = Self(3i32);
            }
            impl ::std::convert::From<i32> for KSDEGRADE_STANDARD {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSDEGRADE_STANDARD {
                type Abi = Self;
            }
            pub const KSDEVICE_DESCRIPTOR_VERSION: u32 = 256u32;
            pub const KSDEVICE_DESCRIPTOR_VERSION_2: u32 = 272u32;
            pub const KSDEVICE_FLAG_ENABLE_QUERYINTERFACE: u32 = 4u32;
            pub const KSDEVICE_FLAG_ENABLE_REMOTE_WAKEUP: u32 = 1u32;
            pub const KSDEVICE_FLAG_LOWPOWER_PASSTHROUGH: u32 = 2u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSDEVICE_PROFILE_INFO {
                pub Type: u32,
                pub Size: u32,
                pub Anonymous: KSDEVICE_PROFILE_INFO_0,
            }
            impl KSDEVICE_PROFILE_INFO {}
            unsafe impl ::windows::Abi for KSDEVICE_PROFILE_INFO {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union KSDEVICE_PROFILE_INFO_0 {
                pub Camera: KSDEVICE_PROFILE_INFO_0_0,
            }
            impl KSDEVICE_PROFILE_INFO_0 {}
            unsafe impl ::windows::Abi for KSDEVICE_PROFILE_INFO_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSDEVICE_PROFILE_INFO_0_0 {
                pub Info: KSCAMERA_PROFILE_INFO,
                pub Reserved: u32,
                pub ConcurrencyCount: u32,
                pub Concurrency: *mut KSCAMERA_PROFILE_CONCURRENCYINFO,
            }
            impl KSDEVICE_PROFILE_INFO_0_0 {}
            impl ::std::default::Default for KSDEVICE_PROFILE_INFO_0_0 {
                fn default() -> Self {
                    Self {
                        Info: ::std::default::Default::default(),
                        Reserved: 0,
                        ConcurrencyCount: 0,
                        Concurrency: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for KSDEVICE_PROFILE_INFO_0_0 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_Camera_e__Struct")
                        .field("Info", &format_args!("{:?}", self.Info))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .field(
                            "ConcurrencyCount",
                            &format_args!("{:?}", self.ConcurrencyCount),
                        )
                        .field("Concurrency", &format_args!("{:?}", self.Concurrency))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSDEVICE_PROFILE_INFO_0_0 {
                fn eq(&self, other: &Self) -> bool {
                    self.Info == other.Info
                        && self.Reserved == other.Reserved
                        && self.ConcurrencyCount == other.ConcurrencyCount
                        && self.Concurrency == other.Concurrency
                }
            }
            impl ::std::cmp::Eq for KSDEVICE_PROFILE_INFO_0_0 {}
            unsafe impl ::windows::Abi for KSDEVICE_PROFILE_INFO_0_0 {
                type Abi = Self;
            }
            pub const KSDEVICE_PROFILE_TYPE_CAMERA: u32 = 1u32;
            pub const KSDEVICE_PROFILE_TYPE_UNKNOWN: u32 = 0u32;
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSDEVICE_THERMAL_STATE(pub i32);
            impl KSDEVICE_THERMAL_STATE {
                pub const KSDEVICE_THERMAL_STATE_LOW: Self = Self(0i32);
                pub const KSDEVICE_THERMAL_STATE_HIGH: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for KSDEVICE_THERMAL_STATE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSDEVICE_THERMAL_STATE {
                type Abi = Self;
            }
            pub const KSDISPATCH_FASTIO: u32 = 2147483648u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSDISPLAYCHANGE {
                pub PelsWidth: u32,
                pub PelsHeight: u32,
                pub BitsPerPel: u32,
                pub DeviceID: [u16; 1],
            }
            impl KSDISPLAYCHANGE {}
            impl ::std::default::Default for KSDISPLAYCHANGE {
                fn default() -> Self {
                    Self {
                        PelsWidth: 0,
                        PelsHeight: 0,
                        BitsPerPel: 0,
                        DeviceID: [0; 1],
                    }
                }
            }
            impl ::std::fmt::Debug for KSDISPLAYCHANGE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSDISPLAYCHANGE")
                        .field("PelsWidth", &format_args!("{:?}", self.PelsWidth))
                        .field("PelsHeight", &format_args!("{:?}", self.PelsHeight))
                        .field("BitsPerPel", &format_args!("{:?}", self.BitsPerPel))
                        .field("DeviceID", &format_args!("{:?}", self.DeviceID))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSDISPLAYCHANGE {
                fn eq(&self, other: &Self) -> bool {
                    self.PelsWidth == other.PelsWidth
                        && self.PelsHeight == other.PelsHeight
                        && self.BitsPerPel == other.BitsPerPel
                        && self.DeviceID == other.DeviceID
                }
            }
            impl ::std::cmp::Eq for KSDISPLAYCHANGE {}
            unsafe impl ::windows::Abi for KSDISPLAYCHANGE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSDS3D_BUFFER_ALL {
                pub Position: DS3DVECTOR,
                pub Velocity: DS3DVECTOR,
                pub InsideConeAngle: u32,
                pub OutsideConeAngle: u32,
                pub ConeOrientation: DS3DVECTOR,
                pub ConeOutsideVolume: i32,
                pub MinDistance: f32,
                pub MaxDistance: f32,
                pub Mode: u32,
            }
            impl KSDS3D_BUFFER_ALL {}
            unsafe impl ::windows::Abi for KSDS3D_BUFFER_ALL {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSDS3D_BUFFER_CONE_ANGLES {
                pub InsideConeAngle: u32,
                pub OutsideConeAngle: u32,
            }
            impl KSDS3D_BUFFER_CONE_ANGLES {}
            impl ::std::default::Default for KSDS3D_BUFFER_CONE_ANGLES {
                fn default() -> Self {
                    Self {
                        InsideConeAngle: 0,
                        OutsideConeAngle: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSDS3D_BUFFER_CONE_ANGLES {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSDS3D_BUFFER_CONE_ANGLES")
                        .field(
                            "InsideConeAngle",
                            &format_args!("{:?}", self.InsideConeAngle),
                        )
                        .field(
                            "OutsideConeAngle",
                            &format_args!("{:?}", self.OutsideConeAngle),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSDS3D_BUFFER_CONE_ANGLES {
                fn eq(&self, other: &Self) -> bool {
                    self.InsideConeAngle == other.InsideConeAngle
                        && self.OutsideConeAngle == other.OutsideConeAngle
                }
            }
            impl ::std::cmp::Eq for KSDS3D_BUFFER_CONE_ANGLES {}
            unsafe impl ::windows::Abi for KSDS3D_BUFFER_CONE_ANGLES {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSDS3D_HRTF_COEFF_FORMAT(pub i32);
            impl KSDS3D_HRTF_COEFF_FORMAT {
                pub const FLOAT_COEFF: Self = Self(0i32);
                pub const SHORT_COEFF: Self = Self(1i32);
                pub const KSDS3D_COEFF_COUNT: Self = Self(2i32);
            }
            impl ::std::convert::From<i32> for KSDS3D_HRTF_COEFF_FORMAT {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSDS3D_HRTF_COEFF_FORMAT {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSDS3D_HRTF_FILTER_METHOD(pub i32);
            impl KSDS3D_HRTF_FILTER_METHOD {
                pub const DIRECT_FORM: Self = Self(0i32);
                pub const CASCADE_FORM: Self = Self(1i32);
                pub const KSDS3D_FILTER_METHOD_COUNT: Self = Self(2i32);
            }
            impl ::std::convert::From<i32> for KSDS3D_HRTF_FILTER_METHOD {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSDS3D_HRTF_FILTER_METHOD {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSDS3D_HRTF_FILTER_VERSION(pub i32);
            impl KSDS3D_HRTF_FILTER_VERSION {
                pub const DS3D_HRTF_VERSION_1: Self = Self(0i32);
            }
            impl ::std::convert::From<i32> for KSDS3D_HRTF_FILTER_VERSION {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSDS3D_HRTF_FILTER_VERSION {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSDS3D_HRTF_FILTER_FORMAT_MSG {
                pub FilterMethod: KSDS3D_HRTF_FILTER_METHOD,
                pub CoeffFormat: KSDS3D_HRTF_COEFF_FORMAT,
                pub Version: KSDS3D_HRTF_FILTER_VERSION,
                pub Reserved: u32,
            }
            impl KSDS3D_HRTF_FILTER_FORMAT_MSG {}
            impl ::std::default::Default for KSDS3D_HRTF_FILTER_FORMAT_MSG {
                fn default() -> Self {
                    Self {
                        FilterMethod: ::std::default::Default::default(),
                        CoeffFormat: ::std::default::Default::default(),
                        Version: ::std::default::Default::default(),
                        Reserved: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSDS3D_HRTF_FILTER_FORMAT_MSG {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSDS3D_HRTF_FILTER_FORMAT_MSG")
                        .field("FilterMethod", &format_args!("{:?}", self.FilterMethod))
                        .field("CoeffFormat", &format_args!("{:?}", self.CoeffFormat))
                        .field("Version", &format_args!("{:?}", self.Version))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSDS3D_HRTF_FILTER_FORMAT_MSG {
                fn eq(&self, other: &Self) -> bool {
                    self.FilterMethod == other.FilterMethod
                        && self.CoeffFormat == other.CoeffFormat
                        && self.Version == other.Version
                        && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for KSDS3D_HRTF_FILTER_FORMAT_MSG {}
            unsafe impl ::windows::Abi for KSDS3D_HRTF_FILTER_FORMAT_MSG {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSDS3D_HRTF_FILTER_QUALITY(pub i32);
            impl KSDS3D_HRTF_FILTER_QUALITY {
                pub const FULL_FILTER: Self = Self(0i32);
                pub const LIGHT_FILTER: Self = Self(1i32);
                pub const KSDS3D_FILTER_QUALITY_COUNT: Self = Self(2i32);
            }
            impl ::std::convert::From<i32> for KSDS3D_HRTF_FILTER_QUALITY {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSDS3D_HRTF_FILTER_QUALITY {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSDS3D_HRTF_INIT_MSG {
                pub Size: u32,
                pub Quality: KSDS3D_HRTF_FILTER_QUALITY,
                pub SampleRate: f32,
                pub MaxFilterSize: u32,
                pub FilterTransientMuteLength: u32,
                pub FilterOverlapBufferLength: u32,
                pub OutputOverlapBufferLength: u32,
                pub Reserved: u32,
            }
            impl KSDS3D_HRTF_INIT_MSG {}
            impl ::std::default::Default for KSDS3D_HRTF_INIT_MSG {
                fn default() -> Self {
                    Self {
                        Size: 0,
                        Quality: ::std::default::Default::default(),
                        SampleRate: 0.0,
                        MaxFilterSize: 0,
                        FilterTransientMuteLength: 0,
                        FilterOverlapBufferLength: 0,
                        OutputOverlapBufferLength: 0,
                        Reserved: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSDS3D_HRTF_INIT_MSG {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSDS3D_HRTF_INIT_MSG")
                        .field("Size", &format_args!("{:?}", self.Size))
                        .field("Quality", &format_args!("{:?}", self.Quality))
                        .field("SampleRate", &format_args!("{:?}", self.SampleRate))
                        .field("MaxFilterSize", &format_args!("{:?}", self.MaxFilterSize))
                        .field(
                            "FilterTransientMuteLength",
                            &format_args!("{:?}", self.FilterTransientMuteLength),
                        )
                        .field(
                            "FilterOverlapBufferLength",
                            &format_args!("{:?}", self.FilterOverlapBufferLength),
                        )
                        .field(
                            "OutputOverlapBufferLength",
                            &format_args!("{:?}", self.OutputOverlapBufferLength),
                        )
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSDS3D_HRTF_INIT_MSG {
                fn eq(&self, other: &Self) -> bool {
                    self.Size == other.Size
                        && self.Quality == other.Quality
                        && self.SampleRate == other.SampleRate
                        && self.MaxFilterSize == other.MaxFilterSize
                        && self.FilterTransientMuteLength == other.FilterTransientMuteLength
                        && self.FilterOverlapBufferLength == other.FilterOverlapBufferLength
                        && self.OutputOverlapBufferLength == other.OutputOverlapBufferLength
                        && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for KSDS3D_HRTF_INIT_MSG {}
            unsafe impl ::windows::Abi for KSDS3D_HRTF_INIT_MSG {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSDS3D_HRTF_PARAMS_MSG {
                pub Size: u32,
                pub Enabled: u32,
                pub SwapChannels: super::SystemServices::BOOL,
                pub ZeroAzimuth: super::SystemServices::BOOL,
                pub CrossFadeOutput: super::SystemServices::BOOL,
                pub FilterSize: u32,
            }
            impl KSDS3D_HRTF_PARAMS_MSG {}
            impl ::std::default::Default for KSDS3D_HRTF_PARAMS_MSG {
                fn default() -> Self {
                    Self {
                        Size: 0,
                        Enabled: 0,
                        SwapChannels: ::std::default::Default::default(),
                        ZeroAzimuth: ::std::default::Default::default(),
                        CrossFadeOutput: ::std::default::Default::default(),
                        FilterSize: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSDS3D_HRTF_PARAMS_MSG {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSDS3D_HRTF_PARAMS_MSG")
                        .field("Size", &format_args!("{:?}", self.Size))
                        .field("Enabled", &format_args!("{:?}", self.Enabled))
                        .field("SwapChannels", &format_args!("{:?}", self.SwapChannels))
                        .field("ZeroAzimuth", &format_args!("{:?}", self.ZeroAzimuth))
                        .field(
                            "CrossFadeOutput",
                            &format_args!("{:?}", self.CrossFadeOutput),
                        )
                        .field("FilterSize", &format_args!("{:?}", self.FilterSize))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSDS3D_HRTF_PARAMS_MSG {
                fn eq(&self, other: &Self) -> bool {
                    self.Size == other.Size
                        && self.Enabled == other.Enabled
                        && self.SwapChannels == other.SwapChannels
                        && self.ZeroAzimuth == other.ZeroAzimuth
                        && self.CrossFadeOutput == other.CrossFadeOutput
                        && self.FilterSize == other.FilterSize
                }
            }
            impl ::std::cmp::Eq for KSDS3D_HRTF_PARAMS_MSG {}
            unsafe impl ::windows::Abi for KSDS3D_HRTF_PARAMS_MSG {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSDS3D_ITD_PARAMS {
                pub Channel: i32,
                pub VolSmoothScale: f32,
                pub TotalDryAttenuation: f32,
                pub TotalWetAttenuation: f32,
                pub SmoothFrequency: i32,
                pub Delay: i32,
            }
            impl KSDS3D_ITD_PARAMS {}
            impl ::std::default::Default for KSDS3D_ITD_PARAMS {
                fn default() -> Self {
                    Self {
                        Channel: 0,
                        VolSmoothScale: 0.0,
                        TotalDryAttenuation: 0.0,
                        TotalWetAttenuation: 0.0,
                        SmoothFrequency: 0,
                        Delay: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSDS3D_ITD_PARAMS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSDS3D_ITD_PARAMS")
                        .field("Channel", &format_args!("{:?}", self.Channel))
                        .field("VolSmoothScale", &format_args!("{:?}", self.VolSmoothScale))
                        .field(
                            "TotalDryAttenuation",
                            &format_args!("{:?}", self.TotalDryAttenuation),
                        )
                        .field(
                            "TotalWetAttenuation",
                            &format_args!("{:?}", self.TotalWetAttenuation),
                        )
                        .field(
                            "SmoothFrequency",
                            &format_args!("{:?}", self.SmoothFrequency),
                        )
                        .field("Delay", &format_args!("{:?}", self.Delay))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSDS3D_ITD_PARAMS {
                fn eq(&self, other: &Self) -> bool {
                    self.Channel == other.Channel
                        && self.VolSmoothScale == other.VolSmoothScale
                        && self.TotalDryAttenuation == other.TotalDryAttenuation
                        && self.TotalWetAttenuation == other.TotalWetAttenuation
                        && self.SmoothFrequency == other.SmoothFrequency
                        && self.Delay == other.Delay
                }
            }
            impl ::std::cmp::Eq for KSDS3D_ITD_PARAMS {}
            unsafe impl ::windows::Abi for KSDS3D_ITD_PARAMS {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSDS3D_ITD_PARAMS_MSG {
                pub Enabled: u32,
                pub LeftParams: KSDS3D_ITD_PARAMS,
                pub RightParams: KSDS3D_ITD_PARAMS,
                pub Reserved: u32,
            }
            impl KSDS3D_ITD_PARAMS_MSG {}
            impl ::std::default::Default for KSDS3D_ITD_PARAMS_MSG {
                fn default() -> Self {
                    Self {
                        Enabled: 0,
                        LeftParams: ::std::default::Default::default(),
                        RightParams: ::std::default::Default::default(),
                        Reserved: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSDS3D_ITD_PARAMS_MSG {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSDS3D_ITD_PARAMS_MSG")
                        .field("Enabled", &format_args!("{:?}", self.Enabled))
                        .field("LeftParams", &format_args!("{:?}", self.LeftParams))
                        .field("RightParams", &format_args!("{:?}", self.RightParams))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSDS3D_ITD_PARAMS_MSG {
                fn eq(&self, other: &Self) -> bool {
                    self.Enabled == other.Enabled
                        && self.LeftParams == other.LeftParams
                        && self.RightParams == other.RightParams
                        && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for KSDS3D_ITD_PARAMS_MSG {}
            unsafe impl ::windows::Abi for KSDS3D_ITD_PARAMS_MSG {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSDS3D_LISTENER_ALL {
                pub Position: DS3DVECTOR,
                pub Velocity: DS3DVECTOR,
                pub OrientFront: DS3DVECTOR,
                pub OrientTop: DS3DVECTOR,
                pub DistanceFactor: f32,
                pub RolloffFactor: f32,
                pub DopplerFactor: f32,
            }
            impl KSDS3D_LISTENER_ALL {}
            unsafe impl ::windows::Abi for KSDS3D_LISTENER_ALL {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSDS3D_LISTENER_ORIENTATION {
                pub Front: DS3DVECTOR,
                pub Top: DS3DVECTOR,
            }
            impl KSDS3D_LISTENER_ORIENTATION {}
            unsafe impl ::windows::Abi for KSDS3D_LISTENER_ORIENTATION {
                type Abi = Self;
            }
            pub const KSDSOUND_3D_MODE_DISABLE: u32 = 2u32;
            pub const KSDSOUND_3D_MODE_HEADRELATIVE: u32 = 1u32;
            pub const KSDSOUND_3D_MODE_NORMAL: u32 = 0u32;
            pub const KSDSOUND_BUFFER_CTRL_3D: u32 = 1u32;
            pub const KSDSOUND_BUFFER_CTRL_FREQUENCY: u32 = 2u32;
            pub const KSDSOUND_BUFFER_CTRL_HRTF_3D: u32 = 1073741824u32;
            pub const KSDSOUND_BUFFER_CTRL_PAN: u32 = 4u32;
            pub const KSDSOUND_BUFFER_CTRL_POSITIONNOTIFY: u32 = 16u32;
            pub const KSDSOUND_BUFFER_CTRL_VOLUME: u32 = 8u32;
            pub const KSDSOUND_BUFFER_LOCHARDWARE: u32 = 4u32;
            pub const KSDSOUND_BUFFER_LOCSOFTWARE: u32 = 8u32;
            pub const KSDSOUND_BUFFER_PRIMARY: u32 = 1u32;
            pub const KSDSOUND_BUFFER_STATIC: u32 = 2u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSERROR {
                pub Context: *mut ::std::ffi::c_void,
                pub Status: u32,
            }
            impl KSERROR {}
            impl ::std::default::Default for KSERROR {
                fn default() -> Self {
                    Self {
                        Context: ::std::ptr::null_mut(),
                        Status: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSERROR {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSERROR")
                        .field("Context", &format_args!("{:?}", self.Context))
                        .field("Status", &format_args!("{:?}", self.Status))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSERROR {
                fn eq(&self, other: &Self) -> bool {
                    self.Context == other.Context && self.Status == other.Status
                }
            }
            impl ::std::cmp::Eq for KSERROR {}
            unsafe impl ::windows::Abi for KSERROR {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSEVENTDATA {
                pub NotificationType: u32,
                pub Anonymous: KSEVENTDATA_0,
            }
            impl KSEVENTDATA {}
            unsafe impl ::windows::Abi for KSEVENTDATA {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union KSEVENTDATA_0 {
                pub EventHandle: KSEVENTDATA_0_1,
                pub SemaphoreHandle: KSEVENTDATA_0_2,
                pub Alignment: KSEVENTDATA_0_0,
            }
            impl KSEVENTDATA_0 {}
            unsafe impl ::windows::Abi for KSEVENTDATA_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSEVENTDATA_0_0 {
                pub Unused: *mut ::std::ffi::c_void,
                pub Alignment: [isize; 2],
            }
            impl KSEVENTDATA_0_0 {}
            impl ::std::default::Default for KSEVENTDATA_0_0 {
                fn default() -> Self {
                    Self {
                        Unused: ::std::ptr::null_mut(),
                        Alignment: [0; 2],
                    }
                }
            }
            impl ::std::fmt::Debug for KSEVENTDATA_0_0 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_Alignment_e__Struct")
                        .field("Unused", &format_args!("{:?}", self.Unused))
                        .field("Alignment", &format_args!("{:?}", self.Alignment))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSEVENTDATA_0_0 {
                fn eq(&self, other: &Self) -> bool {
                    self.Unused == other.Unused && self.Alignment == other.Alignment
                }
            }
            impl ::std::cmp::Eq for KSEVENTDATA_0_0 {}
            unsafe impl ::windows::Abi for KSEVENTDATA_0_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSEVENTDATA_0_1 {
                pub Event: super::SystemServices::HANDLE,
                pub Reserved: [usize; 2],
            }
            impl KSEVENTDATA_0_1 {}
            impl ::std::default::Default for KSEVENTDATA_0_1 {
                fn default() -> Self {
                    Self {
                        Event: ::std::default::Default::default(),
                        Reserved: [0; 2],
                    }
                }
            }
            impl ::std::fmt::Debug for KSEVENTDATA_0_1 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_EventHandle_e__Struct")
                        .field("Event", &format_args!("{:?}", self.Event))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSEVENTDATA_0_1 {
                fn eq(&self, other: &Self) -> bool {
                    self.Event == other.Event && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for KSEVENTDATA_0_1 {}
            unsafe impl ::windows::Abi for KSEVENTDATA_0_1 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSEVENTDATA_0_2 {
                pub Semaphore: super::SystemServices::HANDLE,
                pub Reserved: u32,
                pub Adjustment: i32,
            }
            impl KSEVENTDATA_0_2 {}
            impl ::std::default::Default for KSEVENTDATA_0_2 {
                fn default() -> Self {
                    Self {
                        Semaphore: ::std::default::Default::default(),
                        Reserved: 0,
                        Adjustment: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSEVENTDATA_0_2 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_SemaphoreHandle_e__Struct")
                        .field("Semaphore", &format_args!("{:?}", self.Semaphore))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .field("Adjustment", &format_args!("{:?}", self.Adjustment))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSEVENTDATA_0_2 {
                fn eq(&self, other: &Self) -> bool {
                    self.Semaphore == other.Semaphore
                        && self.Reserved == other.Reserved
                        && self.Adjustment == other.Adjustment
                }
            }
            impl ::std::cmp::Eq for KSEVENTDATA_0_2 {}
            unsafe impl ::windows::Abi for KSEVENTDATA_0_2 {
                type Abi = Self;
            }
            pub const KSEVENTF_DPC: u32 = 16u32;
            pub const KSEVENTF_EVENT_HANDLE: u32 = 1u32;
            pub const KSEVENTF_EVENT_OBJECT: u32 = 4u32;
            pub const KSEVENTF_KSWORKITEM: u32 = 128u32;
            pub const KSEVENTF_SEMAPHORE_HANDLE: u32 = 2u32;
            pub const KSEVENTF_SEMAPHORE_OBJECT: u32 = 8u32;
            pub const KSEVENTF_WORKITEM: u32 = 32u32;
            pub const KSEVENTSETID_AudioControlChange: ::windows::Guid =
                ::windows::Guid::from_values(
                    3898513048,
                    64047,
                    4561,
                    [149, 189, 0, 192, 79, 185, 37, 211],
                );
            pub const KSEVENTSETID_CameraAsyncControl: ::windows::Guid =
                ::windows::Guid::from_values(
                    580982612,
                    38657,
                    16520,
                    [179, 63, 107, 156, 188, 82, 223, 94],
                );
            pub const KSEVENTSETID_CameraEvent: ::windows::Guid = ::windows::Guid::from_values(
                2023338720,
                27459,
                18788,
                [157, 42, 162, 31, 64, 97, 245, 118],
            );
            pub const KSEVENTSETID_Clock: ::windows::Guid = ::windows::Guid::from_values(
                911052320,
                25287,
                4559,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            pub const KSEVENTSETID_Connection: ::windows::Guid = ::windows::Guid::from_values(
                2135673824,
                40613,
                4559,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            pub const KSEVENTSETID_Device: ::windows::Guid = ::windows::Guid::from_values(
                679646956,
                40852,
                16820,
                [161, 83, 170, 49, 174, 236, 179, 63],
            );
            pub const KSEVENTSETID_DynamicFormatChange: ::windows::Guid =
                ::windows::Guid::from_values(
                    371901526,
                    33751,
                    16953,
                    [150, 223, 199, 95, 250, 19, 139, 198],
                );
            pub const KSEVENTSETID_EXTDEV_Command: ::windows::Guid = ::windows::Guid::from_values(
                278690184,
                46027,
                4562,
                [180, 142, 0, 96, 151, 179, 57, 27],
            );
            pub const KSEVENTSETID_ExtendedCameraControl: ::windows::Guid =
                ::windows::Guid::from_values(
                    1461490377,
                    5026,
                    18403,
                    [166, 73, 210, 167, 120, 22, 99, 132],
                );
            pub const KSEVENTSETID_LoopedStreaming: ::windows::Guid = ::windows::Guid::from_values(
                1182972224,
                50927,
                4560,
                [150, 216, 0, 170, 0, 81, 229, 29],
            );
            pub const KSEVENTSETID_PinCapsChange: ::windows::Guid = ::windows::Guid::from_values(
                3712948526,
                15224,
                18861,
                [165, 52, 44, 49, 91, 130, 32, 0],
            );
            pub const KSEVENTSETID_SoundDetector: ::windows::Guid = ::windows::Guid::from_values(
                1769495707,
                64557,
                18902,
                [172, 50, 71, 153, 248, 125, 233, 246],
            );
            pub const KSEVENTSETID_StreamAllocator: ::windows::Guid = ::windows::Guid::from_values(
                1977177457,
                1852,
                4560,
                [161, 97, 0, 32, 175, 209, 86, 228],
            );
            pub const KSEVENTSETID_Telephony: ::windows::Guid = ::windows::Guid::from_values(
                3078558388,
                52916,
                17540,
                [141, 94, 82, 193, 231, 216, 118, 45],
            );
            pub const KSEVENTSETID_VIDCAPTOSTI: ::windows::Guid = ::windows::Guid::from_values(
                3678920224,
                63016,
                4561,
                [186, 65, 0, 160, 201, 13, 43, 5],
            );
            pub const KSEVENTSETID_VIDCAP_TVAUDIO: ::windows::Guid = ::windows::Guid::from_values(
                1781401169,
                10468,
                4560,
                [161, 140, 0, 160, 201, 17, 137, 86],
            );
            pub const KSEVENTSETID_VPNotify: ::windows::Guid = ::windows::Guid::from_values(
                549804430,
                54216,
                4560,
                [141, 252, 0, 192, 79, 215, 192, 139],
            );
            pub const KSEVENTSETID_VPVBINotify: ::windows::Guid = ::windows::Guid::from_values(
                3964836609,
                6687,
                4561,
                [186, 217, 0, 96, 151, 68, 17, 26],
            );
            pub const KSEVENTSETID_VolumeLimit: ::windows::Guid = ::windows::Guid::from_values(
                3658908773,
                14972,
                18520,
                [157, 74, 62, 142, 36, 112, 26, 239],
            );
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSEVENT_AUDIO_CONTROL_CHANGE(pub i32);
            impl KSEVENT_AUDIO_CONTROL_CHANGE {
                pub const KSEVENT_CONTROL_CHANGE: Self = Self(0i32);
            }
            impl ::std::convert::From<i32> for KSEVENT_AUDIO_CONTROL_CHANGE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSEVENT_AUDIO_CONTROL_CHANGE {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSEVENT_CAMERACONTROL(pub i32);
            impl KSEVENT_CAMERACONTROL {
                pub const KSEVENT_CAMERACONTROL_FOCUS: Self = Self(0i32);
                pub const KSEVENT_CAMERACONTROL_ZOOM: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for KSEVENT_CAMERACONTROL {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSEVENT_CAMERACONTROL {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSEVENT_CAMERAEVENT(pub i32);
            impl KSEVENT_CAMERAEVENT {
                pub const KSEVENT_PHOTO_SAMPLE_SCANNED: Self = Self(0i32);
            }
            impl ::std::convert::From<i32> for KSEVENT_CAMERAEVENT {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSEVENT_CAMERAEVENT {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSEVENT_CLOCK_POSITION(pub i32);
            impl KSEVENT_CLOCK_POSITION {
                pub const KSEVENT_CLOCK_INTERVAL_MARK: Self = Self(0i32);
                pub const KSEVENT_CLOCK_POSITION_MARK: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for KSEVENT_CLOCK_POSITION {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSEVENT_CLOCK_POSITION {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSEVENT_CONNECTION(pub i32);
            impl KSEVENT_CONNECTION {
                pub const KSEVENT_CONNECTION_POSITIONUPDATE: Self = Self(0i32);
                pub const KSEVENT_CONNECTION_DATADISCONTINUITY: Self = Self(1i32);
                pub const KSEVENT_CONNECTION_TIMEDISCONTINUITY: Self = Self(2i32);
                pub const KSEVENT_CONNECTION_PRIORITY: Self = Self(3i32);
                pub const KSEVENT_CONNECTION_ENDOFSTREAM: Self = Self(4i32);
            }
            impl ::std::convert::From<i32> for KSEVENT_CONNECTION {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSEVENT_CONNECTION {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSEVENT_CROSSBAR(pub i32);
            impl KSEVENT_CROSSBAR {
                pub const KSEVENT_CROSSBAR_CHANGED: Self = Self(0i32);
            }
            impl ::std::convert::From<i32> for KSEVENT_CROSSBAR {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSEVENT_CROSSBAR {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSEVENT_DEVCMD(pub i32);
            impl KSEVENT_DEVCMD {
                pub const KSEVENT_EXTDEV_COMMAND_NOTIFY_INTERIM_READY: Self = Self(0i32);
                pub const KSEVENT_EXTDEV_COMMAND_CONTROL_INTERIM_READY: Self = Self(1i32);
                pub const KSEVENT_EXTDEV_COMMAND_BUSRESET: Self = Self(2i32);
                pub const KSEVENT_EXTDEV_TIMECODE_UPDATE: Self = Self(3i32);
                pub const KSEVENT_EXTDEV_OPERATION_MODE_UPDATE: Self = Self(4i32);
                pub const KSEVENT_EXTDEV_TRANSPORT_STATE_UPDATE: Self = Self(5i32);
                pub const KSEVENT_EXTDEV_NOTIFY_REMOVAL: Self = Self(6i32);
                pub const KSEVENT_EXTDEV_NOTIFY_MEDIUM_CHANGE: Self = Self(7i32);
            }
            impl ::std::convert::From<i32> for KSEVENT_DEVCMD {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSEVENT_DEVCMD {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSEVENT_DEVICE(pub i32);
            impl KSEVENT_DEVICE {
                pub const KSEVENT_DEVICE_LOST: Self = Self(0i32);
                pub const KSEVENT_DEVICE_PREEMPTED: Self = Self(1i32);
                pub const KSEVENT_DEVICE_THERMAL_HIGH: Self = Self(2i32);
                pub const KSEVENT_DEVICE_THERMAL_LOW: Self = Self(3i32);
            }
            impl ::std::convert::From<i32> for KSEVENT_DEVICE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSEVENT_DEVICE {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSEVENT_DYNAMICFORMATCHANGE(pub i32);
            impl KSEVENT_DYNAMICFORMATCHANGE {
                pub const KSEVENT_DYNAMIC_FORMAT_CHANGE: Self = Self(0i32);
            }
            impl ::std::convert::From<i32> for KSEVENT_DYNAMICFORMATCHANGE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSEVENT_DYNAMICFORMATCHANGE {
                type Abi = Self;
            }
            pub const KSEVENT_ENTRY_BUFFERED: u32 = 4u32;
            pub const KSEVENT_ENTRY_DELETED: u32 = 1u32;
            pub const KSEVENT_ENTRY_ONESHOT: u32 = 2u32;
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSEVENT_LOOPEDSTREAMING(pub i32);
            impl KSEVENT_LOOPEDSTREAMING {
                pub const KSEVENT_LOOPEDSTREAMING_POSITION: Self = Self(0i32);
            }
            impl ::std::convert::From<i32> for KSEVENT_LOOPEDSTREAMING {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSEVENT_LOOPEDSTREAMING {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSEVENT_PINCAPS_CHANGENOTIFICATIONS(pub i32);
            impl KSEVENT_PINCAPS_CHANGENOTIFICATIONS {
                pub const KSEVENT_PINCAPS_FORMATCHANGE: Self = Self(0i32);
                pub const KSEVENT_PINCAPS_JACKINFOCHANGE: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for KSEVENT_PINCAPS_CHANGENOTIFICATIONS {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSEVENT_PINCAPS_CHANGENOTIFICATIONS {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSEVENT_SOUNDDETECTOR(pub i32);
            impl KSEVENT_SOUNDDETECTOR {
                pub const KSEVENT_SOUNDDETECTOR_MATCHDETECTED: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for KSEVENT_SOUNDDETECTOR {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSEVENT_SOUNDDETECTOR {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSEVENT_STREAMALLOCATOR(pub i32);
            impl KSEVENT_STREAMALLOCATOR {
                pub const KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME: Self = Self(0i32);
                pub const KSEVENT_STREAMALLOCATOR_FREEFRAME: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for KSEVENT_STREAMALLOCATOR {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSEVENT_STREAMALLOCATOR {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSEVENT_TELEPHONY(pub i32);
            impl KSEVENT_TELEPHONY {
                pub const KSEVENT_TELEPHONY_ENDPOINTPAIRS_CHANGED: Self = Self(0i32);
            }
            impl ::std::convert::From<i32> for KSEVENT_TELEPHONY {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSEVENT_TELEPHONY {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSEVENT_TIME_INTERVAL {
                pub EventData: KSEVENTDATA,
                pub TimeBase: i64,
                pub Interval: i64,
            }
            impl KSEVENT_TIME_INTERVAL {}
            unsafe impl ::windows::Abi for KSEVENT_TIME_INTERVAL {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSEVENT_TIME_MARK {
                pub EventData: KSEVENTDATA,
                pub MarkTime: i64,
            }
            impl KSEVENT_TIME_MARK {}
            unsafe impl ::windows::Abi for KSEVENT_TIME_MARK {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSEVENT_TUNER(pub i32);
            impl KSEVENT_TUNER {
                pub const KSEVENT_TUNER_CHANGED: Self = Self(0i32);
                pub const KSEVENT_TUNER_INITIATE_SCAN: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for KSEVENT_TUNER {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSEVENT_TUNER {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSEVENT_TUNER_INITIATE_SCAN_S {
                pub EventData: KSEVENTDATA,
                pub StartFrequency: u32,
                pub EndFrequency: u32,
            }
            impl KSEVENT_TUNER_INITIATE_SCAN_S {}
            unsafe impl ::windows::Abi for KSEVENT_TUNER_INITIATE_SCAN_S {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSEVENT_TVAUDIO(pub i32);
            impl KSEVENT_TVAUDIO {
                pub const KSEVENT_TVAUDIO_CHANGED: Self = Self(0i32);
            }
            impl ::std::convert::From<i32> for KSEVENT_TVAUDIO {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSEVENT_TVAUDIO {
                type Abi = Self;
            }
            pub const KSEVENT_TYPE_BASICSUPPORT: u32 = 512u32;
            pub const KSEVENT_TYPE_ENABLE: u32 = 1u32;
            pub const KSEVENT_TYPE_ENABLEBUFFERED: u32 = 4u32;
            pub const KSEVENT_TYPE_ONESHOT: u32 = 2u32;
            pub const KSEVENT_TYPE_QUERYBUFFER: u32 = 1024u32;
            pub const KSEVENT_TYPE_SETSUPPORT: u32 = 256u32;
            pub const KSEVENT_TYPE_TOPOLOGY: u32 = 268435456u32;
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSEVENT_VIDCAPTOSTI(pub i32);
            impl KSEVENT_VIDCAPTOSTI {
                pub const KSEVENT_VIDCAPTOSTI_EXT_TRIGGER: Self = Self(0i32);
                pub const KSEVENT_VIDCAP_AUTO_UPDATE: Self = Self(1i32);
                pub const KSEVENT_VIDCAP_SEARCH: Self = Self(2i32);
            }
            impl ::std::convert::From<i32> for KSEVENT_VIDCAPTOSTI {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSEVENT_VIDCAPTOSTI {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSEVENT_VIDEODECODER(pub i32);
            impl KSEVENT_VIDEODECODER {
                pub const KSEVENT_VIDEODECODER_CHANGED: Self = Self(0i32);
            }
            impl ::std::convert::From<i32> for KSEVENT_VIDEODECODER {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSEVENT_VIDEODECODER {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSEVENT_VOLUMELIMIT(pub i32);
            impl KSEVENT_VOLUMELIMIT {
                pub const KSEVENT_VOLUMELIMIT_CHANGED: Self = Self(0i32);
            }
            impl ::std::convert::From<i32> for KSEVENT_VOLUMELIMIT {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSEVENT_VOLUMELIMIT {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSEVENT_VPNOTIFY(pub i32);
            impl KSEVENT_VPNOTIFY {
                pub const KSEVENT_VPNOTIFY_FORMATCHANGE: Self = Self(0i32);
            }
            impl ::std::convert::From<i32> for KSEVENT_VPNOTIFY {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSEVENT_VPNOTIFY {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSEVENT_VPVBINOTIFY(pub i32);
            impl KSEVENT_VPVBINOTIFY {
                pub const KSEVENT_VPVBINOTIFY_FORMATCHANGE: Self = Self(0i32);
            }
            impl ::std::convert::From<i32> for KSEVENT_VPVBINOTIFY {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSEVENT_VPVBINOTIFY {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSE_NODE {
                pub Event: KSIDENTIFIER,
                pub NodeId: u32,
                pub Reserved: u32,
            }
            impl KSE_NODE {}
            unsafe impl ::windows::Abi for KSE_NODE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSE_PIN {
                pub Event: KSIDENTIFIER,
                pub PinId: u32,
                pub Reserved: u32,
            }
            impl KSE_PIN {}
            unsafe impl ::windows::Abi for KSE_PIN {
                type Abi = Self;
            }
            pub const KSFILTER_FLAG_CRITICAL_PROCESSING: u32 = 2u32;
            pub const KSFILTER_FLAG_DENY_USERMODE_ACCESS: u32 = 2147483648u32;
            pub const KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING: u32 = 1u32;
            pub const KSFILTER_FLAG_HYPERCRITICAL_PROCESSING: u32 = 4u32;
            pub const KSFILTER_FLAG_PRIORITIZE_REFERENCEGUID: u32 = 16u32;
            pub const KSFILTER_FLAG_RECEIVE_ZERO_LENGTH_SAMPLES: u32 = 8u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSFRAMETIME {
                pub Duration: i64,
                pub FrameFlags: u32,
                pub Reserved: u32,
            }
            impl KSFRAMETIME {}
            impl ::std::default::Default for KSFRAMETIME {
                fn default() -> Self {
                    Self {
                        Duration: 0,
                        FrameFlags: 0,
                        Reserved: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSFRAMETIME {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSFRAMETIME")
                        .field("Duration", &format_args!("{:?}", self.Duration))
                        .field("FrameFlags", &format_args!("{:?}", self.FrameFlags))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSFRAMETIME {
                fn eq(&self, other: &Self) -> bool {
                    self.Duration == other.Duration
                        && self.FrameFlags == other.FrameFlags
                        && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for KSFRAMETIME {}
            unsafe impl ::windows::Abi for KSFRAMETIME {
                type Abi = Self;
            }
            pub const KSFRAMETIME_VARIABLESIZE: u32 = 1u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSGOP_USERDATA {
                pub sc: u32,
                pub reserved1: u32,
                pub cFields: u8,
                pub l21Data: [i8; 3],
            }
            impl KSGOP_USERDATA {}
            impl ::std::default::Default for KSGOP_USERDATA {
                fn default() -> Self {
                    Self {
                        sc: 0,
                        reserved1: 0,
                        cFields: 0,
                        l21Data: [0; 3],
                    }
                }
            }
            impl ::std::fmt::Debug for KSGOP_USERDATA {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSGOP_USERDATA")
                        .field("sc", &format_args!("{:?}", self.sc))
                        .field("reserved1", &format_args!("{:?}", self.reserved1))
                        .field("cFields", &format_args!("{:?}", self.cFields))
                        .field("l21Data", &format_args!("{:?}", self.l21Data))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSGOP_USERDATA {
                fn eq(&self, other: &Self) -> bool {
                    self.sc == other.sc
                        && self.reserved1 == other.reserved1
                        && self.cFields == other.cFields
                        && self.l21Data == other.l21Data
                }
            }
            impl ::std::cmp::Eq for KSGOP_USERDATA {}
            unsafe impl ::windows::Abi for KSGOP_USERDATA {
                type Abi = Self;
            }
            pub const KSINTERFACESETID_FileIo: ::windows::Guid = ::windows::Guid::from_values(
                2356122412,
                59249,
                4560,
                [184, 255, 0, 160, 201, 34, 49, 150],
            );
            pub const KSINTERFACESETID_Media: ::windows::Guid = ::windows::Guid::from_values(
                974383936,
                12455,
                4560,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            pub const KSINTERFACESETID_Standard: ::windows::Guid = ::windows::Guid::from_values(
                445081248,
                25294,
                4559,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSINTERFACE_FILEIO(pub i32);
            impl KSINTERFACE_FILEIO {
                pub const KSINTERFACE_FILEIO_STREAMING: Self = Self(0i32);
            }
            impl ::std::convert::From<i32> for KSINTERFACE_FILEIO {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSINTERFACE_FILEIO {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSINTERFACE_MEDIA(pub i32);
            impl KSINTERFACE_MEDIA {
                pub const KSINTERFACE_MEDIA_MUSIC: Self = Self(0i32);
                pub const KSINTERFACE_MEDIA_WAVE_BUFFERED: Self = Self(1i32);
                pub const KSINTERFACE_MEDIA_WAVE_QUEUED: Self = Self(2i32);
            }
            impl ::std::convert::From<i32> for KSINTERFACE_MEDIA {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSINTERFACE_MEDIA {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSINTERFACE_STANDARD(pub i32);
            impl KSINTERFACE_STANDARD {
                pub const KSINTERFACE_STANDARD_STREAMING: Self = Self(0i32);
                pub const KSINTERFACE_STANDARD_LOOPED_STREAMING: Self = Self(1i32);
                pub const KSINTERFACE_STANDARD_CONTROL: Self = Self(2i32);
            }
            impl ::std::convert::From<i32> for KSINTERFACE_STANDARD {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSINTERFACE_STANDARD {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSINTERVAL {
                pub TimeBase: i64,
                pub Interval: i64,
            }
            impl KSINTERVAL {}
            impl ::std::default::Default for KSINTERVAL {
                fn default() -> Self {
                    Self {
                        TimeBase: 0,
                        Interval: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSINTERVAL {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSINTERVAL")
                        .field("TimeBase", &format_args!("{:?}", self.TimeBase))
                        .field("Interval", &format_args!("{:?}", self.Interval))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSINTERVAL {
                fn eq(&self, other: &Self) -> bool {
                    self.TimeBase == other.TimeBase && self.Interval == other.Interval
                }
            }
            impl ::std::cmp::Eq for KSINTERVAL {}
            unsafe impl ::windows::Abi for KSINTERVAL {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSJACK_DESCRIPTION {
                pub ChannelMapping: u32,
                pub Color: u32,
                pub ConnectionType: EPcxConnectionType,
                pub GeoLocation: EPcxGeoLocation,
                pub GenLocation: EPcxGenLocation,
                pub PortConnection: EPxcPortConnection,
                pub IsConnected: super::SystemServices::BOOL,
            }
            impl KSJACK_DESCRIPTION {}
            impl ::std::default::Default for KSJACK_DESCRIPTION {
                fn default() -> Self {
                    Self {
                        ChannelMapping: 0,
                        Color: 0,
                        ConnectionType: ::std::default::Default::default(),
                        GeoLocation: ::std::default::Default::default(),
                        GenLocation: ::std::default::Default::default(),
                        PortConnection: ::std::default::Default::default(),
                        IsConnected: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for KSJACK_DESCRIPTION {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSJACK_DESCRIPTION")
                        .field("ChannelMapping", &format_args!("{:?}", self.ChannelMapping))
                        .field("Color", &format_args!("{:?}", self.Color))
                        .field("ConnectionType", &format_args!("{:?}", self.ConnectionType))
                        .field("GeoLocation", &format_args!("{:?}", self.GeoLocation))
                        .field("GenLocation", &format_args!("{:?}", self.GenLocation))
                        .field("PortConnection", &format_args!("{:?}", self.PortConnection))
                        .field("IsConnected", &format_args!("{:?}", self.IsConnected))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSJACK_DESCRIPTION {
                fn eq(&self, other: &Self) -> bool {
                    self.ChannelMapping == other.ChannelMapping
                        && self.Color == other.Color
                        && self.ConnectionType == other.ConnectionType
                        && self.GeoLocation == other.GeoLocation
                        && self.GenLocation == other.GenLocation
                        && self.PortConnection == other.PortConnection
                        && self.IsConnected == other.IsConnected
                }
            }
            impl ::std::cmp::Eq for KSJACK_DESCRIPTION {}
            unsafe impl ::windows::Abi for KSJACK_DESCRIPTION {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSJACK_DESCRIPTION2 {
                pub DeviceStateInfo: u32,
                pub JackCapabilities: u32,
            }
            impl KSJACK_DESCRIPTION2 {}
            impl ::std::default::Default for KSJACK_DESCRIPTION2 {
                fn default() -> Self {
                    Self {
                        DeviceStateInfo: 0,
                        JackCapabilities: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSJACK_DESCRIPTION2 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSJACK_DESCRIPTION2")
                        .field(
                            "DeviceStateInfo",
                            &format_args!("{:?}", self.DeviceStateInfo),
                        )
                        .field(
                            "JackCapabilities",
                            &format_args!("{:?}", self.JackCapabilities),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSJACK_DESCRIPTION2 {
                fn eq(&self, other: &Self) -> bool {
                    self.DeviceStateInfo == other.DeviceStateInfo
                        && self.JackCapabilities == other.JackCapabilities
                }
            }
            impl ::std::cmp::Eq for KSJACK_DESCRIPTION2 {}
            unsafe impl ::windows::Abi for KSJACK_DESCRIPTION2 {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSJACK_SINK_CONNECTIONTYPE(pub i32);
            impl KSJACK_SINK_CONNECTIONTYPE {
                pub const KSJACK_SINK_CONNECTIONTYPE_HDMI: Self = Self(0i32);
                pub const KSJACK_SINK_CONNECTIONTYPE_DISPLAYPORT: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for KSJACK_SINK_CONNECTIONTYPE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSJACK_SINK_CONNECTIONTYPE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSJACK_SINK_INFORMATION {
                pub ConnType: KSJACK_SINK_CONNECTIONTYPE,
                pub ManufacturerId: u16,
                pub ProductId: u16,
                pub AudioLatency: u16,
                pub HDCPCapable: super::SystemServices::BOOL,
                pub AICapable: super::SystemServices::BOOL,
                pub SinkDescriptionLength: u8,
                pub SinkDescription: [u16; 32],
                pub PortId: super::Kernel::LUID,
            }
            impl KSJACK_SINK_INFORMATION {}
            impl ::std::default::Default for KSJACK_SINK_INFORMATION {
                fn default() -> Self {
                    Self {
                        ConnType: ::std::default::Default::default(),
                        ManufacturerId: 0,
                        ProductId: 0,
                        AudioLatency: 0,
                        HDCPCapable: ::std::default::Default::default(),
                        AICapable: ::std::default::Default::default(),
                        SinkDescriptionLength: 0,
                        SinkDescription: [0; 32],
                        PortId: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for KSJACK_SINK_INFORMATION {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSJACK_SINK_INFORMATION")
                        .field("ConnType", &format_args!("{:?}", self.ConnType))
                        .field("ManufacturerId", &format_args!("{:?}", self.ManufacturerId))
                        .field("ProductId", &format_args!("{:?}", self.ProductId))
                        .field("AudioLatency", &format_args!("{:?}", self.AudioLatency))
                        .field("HDCPCapable", &format_args!("{:?}", self.HDCPCapable))
                        .field("AICapable", &format_args!("{:?}", self.AICapable))
                        .field(
                            "SinkDescriptionLength",
                            &format_args!("{:?}", self.SinkDescriptionLength),
                        )
                        .field(
                            "SinkDescription",
                            &format_args!("{:?}", self.SinkDescription),
                        )
                        .field("PortId", &format_args!("{:?}", self.PortId))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSJACK_SINK_INFORMATION {
                fn eq(&self, other: &Self) -> bool {
                    self.ConnType == other.ConnType
                        && self.ManufacturerId == other.ManufacturerId
                        && self.ProductId == other.ProductId
                        && self.AudioLatency == other.AudioLatency
                        && self.HDCPCapable == other.HDCPCapable
                        && self.AICapable == other.AICapable
                        && self.SinkDescriptionLength == other.SinkDescriptionLength
                        && self.SinkDescription == other.SinkDescription
                        && self.PortId == other.PortId
                }
            }
            impl ::std::cmp::Eq for KSJACK_SINK_INFORMATION {}
            unsafe impl ::windows::Abi for KSJACK_SINK_INFORMATION {
                type Abi = Self;
            }
            pub const KSMEDIUMSETID_MidiBus: ::windows::Guid = ::windows::Guid::from_values(
                93356096,
                12870,
                4560,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            pub const KSMEDIUMSETID_Standard: ::windows::Guid = ::windows::Guid::from_values(
                1195881248,
                25294,
                4559,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            pub const KSMEDIUMSETID_VPBus: ::windows::Guid = ::windows::Guid::from_values(
                2710312428,
                52803,
                4560,
                [171, 231, 0, 160, 201, 34, 49, 150],
            );
            pub const KSMEDIUM_TYPE_ANYINSTANCE: u32 = 0u32;
            pub const KSMEMORY_TYPE_DEVICE_UNKNOWN: ::windows::Guid = ::windows::Guid::from_values(
                152811065,
                24639,
                4561,
                [176, 103, 0, 160, 201, 6, 40, 2],
            );
            pub const KSMEMORY_TYPE_KERNEL_NONPAGED: ::windows::Guid = ::windows::Guid::from_values(
                1248681924,
                30869,
                4561,
                [176, 105, 0, 160, 201, 6, 40, 2],
            );
            pub const KSMEMORY_TYPE_KERNEL_PAGED: ::windows::Guid = ::windows::Guid::from_values(
                3627284728,
                30868,
                4561,
                [176, 105, 0, 160, 201, 6, 40, 2],
            );
            pub const KSMEMORY_TYPE_SYSTEM: ::windows::Guid = ::windows::Guid::from_values(
                152811064,
                24639,
                4561,
                [176, 103, 0, 160, 201, 6, 40, 2],
            );
            pub const KSMEMORY_TYPE_USER: ::windows::Guid = ::windows::Guid::from_values(
                2360409128,
                30867,
                4561,
                [176, 105, 0, 160, 201, 6, 40, 2],
            );
            pub const KSMETHODSETID_StreamAllocator: ::windows::Guid = ::windows::Guid::from_values(
                3480109889,
                60551,
                4559,
                [161, 48, 0, 32, 175, 209, 86, 228],
            );
            pub const KSMETHODSETID_StreamIo: ::windows::Guid = ::windows::Guid::from_values(
                1708131274,
                5411,
                4562,
                [178, 122, 0, 160, 201, 34, 49, 150],
            );
            pub const KSMETHODSETID_Wavetable: ::windows::Guid = ::windows::Guid::from_values(
                3706663403,
                55559,
                4560,
                [149, 131, 0, 192, 79, 185, 37, 211],
            );
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSMETHOD_STREAMALLOCATOR(pub i32);
            impl KSMETHOD_STREAMALLOCATOR {
                pub const KSMETHOD_STREAMALLOCATOR_ALLOC: Self = Self(0i32);
                pub const KSMETHOD_STREAMALLOCATOR_FREE: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for KSMETHOD_STREAMALLOCATOR {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSMETHOD_STREAMALLOCATOR {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSMETHOD_STREAMIO(pub i32);
            impl KSMETHOD_STREAMIO {
                pub const KSMETHOD_STREAMIO_READ: Self = Self(0i32);
                pub const KSMETHOD_STREAMIO_WRITE: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for KSMETHOD_STREAMIO {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSMETHOD_STREAMIO {
                type Abi = Self;
            }
            pub const KSMETHOD_TYPE_BASICSUPPORT: u32 = 512u32;
            pub const KSMETHOD_TYPE_MODIFY: u32 = 3u32;
            pub const KSMETHOD_TYPE_NONE: u32 = 0u32;
            pub const KSMETHOD_TYPE_READ: u32 = 1u32;
            pub const KSMETHOD_TYPE_SEND: u32 = 1u32;
            pub const KSMETHOD_TYPE_SETSUPPORT: u32 = 256u32;
            pub const KSMETHOD_TYPE_SOURCE: u32 = 4u32;
            pub const KSMETHOD_TYPE_TOPOLOGY: u32 = 268435456u32;
            pub const KSMETHOD_TYPE_WRITE: u32 = 2u32;
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSMETHOD_WAVETABLE(pub i32);
            impl KSMETHOD_WAVETABLE {
                pub const KSMETHOD_WAVETABLE_WAVE_ALLOC: Self = Self(0i32);
                pub const KSMETHOD_WAVETABLE_WAVE_FREE: Self = Self(1i32);
                pub const KSMETHOD_WAVETABLE_WAVE_FIND: Self = Self(2i32);
                pub const KSMETHOD_WAVETABLE_WAVE_WRITE: Self = Self(3i32);
            }
            impl ::std::convert::From<i32> for KSMETHOD_WAVETABLE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSMETHOD_WAVETABLE {
                type Abi = Self;
            }
            pub const KSMETHOD_WAVE_QUEUED_BREAKLOOP: u32 = 1u32;
            pub const KSMFT_CATEGORY_AUDIO_DECODER: ::windows::Guid = ::windows::Guid::from_values(
                2661760948,
                61306,
                17753,
                [141, 93, 113, 157, 143, 4, 38, 199],
            );
            pub const KSMFT_CATEGORY_AUDIO_EFFECT: ::windows::Guid = ::windows::Guid::from_values(
                285625416,
                13896,
                20176,
                [147, 46, 5, 206, 138, 200, 17, 183],
            );
            pub const KSMFT_CATEGORY_AUDIO_ENCODER: ::windows::Guid = ::windows::Guid::from_values(
                2445691856,
                63774,
                19852,
                [146, 118, 219, 36, 130, 121, 217, 117],
            );
            pub const KSMFT_CATEGORY_DEMULTIPLEXER: ::windows::Guid = ::windows::Guid::from_values(
                2825915002,
                37787,
                17605,
                [153, 215, 118, 34, 107, 35, 179, 241],
            );
            pub const KSMFT_CATEGORY_MULTIPLEXER: ::windows::Guid = ::windows::Guid::from_values(
                94131742,
                1454,
                19297,
                [182, 157, 85, 182, 30, 229, 74, 123],
            );
            pub const KSMFT_CATEGORY_OTHER: ::windows::Guid = ::windows::Guid::from_values(
                2417450327,
                47082,
                18689,
                [174, 179, 147, 58, 135, 71, 117, 111],
            );
            pub const KSMFT_CATEGORY_VIDEO_DECODER: ::windows::Guid = ::windows::Guid::from_values(
                3602918731,
                26675,
                17844,
                [151, 26, 5, 164, 176, 75, 171, 145],
            );
            pub const KSMFT_CATEGORY_VIDEO_EFFECT: ::windows::Guid = ::windows::Guid::from_values(
                316767265,
                21292,
                19054,
                [138, 28, 64, 130, 90, 115, 99, 151],
            );
            pub const KSMFT_CATEGORY_VIDEO_ENCODER: ::windows::Guid = ::windows::Guid::from_values(
                4154371197,
                58693,
                17287,
                [189, 238, 214, 71, 215, 189, 228, 42],
            );
            pub const KSMFT_CATEGORY_VIDEO_PROCESSOR: ::windows::Guid =
                ::windows::Guid::from_values(
                    808363004,
                    43615,
                    18425,
                    [159, 122, 194, 24, 139, 177, 99, 2],
                );
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSMICARRAY_MICARRAYTYPE(pub i32);
            impl KSMICARRAY_MICARRAYTYPE {
                pub const KSMICARRAY_MICARRAYTYPE_LINEAR: Self = Self(0i32);
                pub const KSMICARRAY_MICARRAYTYPE_PLANAR: Self = Self(1i32);
                pub const KSMICARRAY_MICARRAYTYPE_3D: Self = Self(2i32);
            }
            impl ::std::convert::From<i32> for KSMICARRAY_MICARRAYTYPE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSMICARRAY_MICARRAYTYPE {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSMICARRAY_MICTYPE(pub i32);
            impl KSMICARRAY_MICTYPE {
                pub const KSMICARRAY_MICTYPE_OMNIDIRECTIONAL: Self = Self(0i32);
                pub const KSMICARRAY_MICTYPE_SUBCARDIOID: Self = Self(1i32);
                pub const KSMICARRAY_MICTYPE_CARDIOID: Self = Self(2i32);
                pub const KSMICARRAY_MICTYPE_SUPERCARDIOID: Self = Self(3i32);
                pub const KSMICARRAY_MICTYPE_HYPERCARDIOID: Self = Self(4i32);
                pub const KSMICARRAY_MICTYPE_8SHAPED: Self = Self(5i32);
                pub const KSMICARRAY_MICTYPE_VENDORDEFINED: Self = Self(15i32);
            }
            impl ::std::convert::From<i32> for KSMICARRAY_MICTYPE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSMICARRAY_MICTYPE {
                type Abi = Self;
            }
            pub const KSMPEGVIDMODE_LTRBOX: u32 = 2u32;
            pub const KSMPEGVIDMODE_PANSCAN: u32 = 1u32;
            pub const KSMPEGVIDMODE_SCALE: u32 = 4u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSMPEGVID_RECT {
                pub StartX: u32,
                pub StartY: u32,
                pub EndX: u32,
                pub EndY: u32,
            }
            impl KSMPEGVID_RECT {}
            impl ::std::default::Default for KSMPEGVID_RECT {
                fn default() -> Self {
                    Self {
                        StartX: 0,
                        StartY: 0,
                        EndX: 0,
                        EndY: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSMPEGVID_RECT {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSMPEGVID_RECT")
                        .field("StartX", &format_args!("{:?}", self.StartX))
                        .field("StartY", &format_args!("{:?}", self.StartY))
                        .field("EndX", &format_args!("{:?}", self.EndX))
                        .field("EndY", &format_args!("{:?}", self.EndY))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSMPEGVID_RECT {
                fn eq(&self, other: &Self) -> bool {
                    self.StartX == other.StartX
                        && self.StartY == other.StartY
                        && self.EndX == other.EndX
                        && self.EndY == other.EndY
                }
            }
            impl ::std::cmp::Eq for KSMPEGVID_RECT {}
            unsafe impl ::windows::Abi for KSMPEGVID_RECT {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSMULTIPLE_ITEM {
                pub Size: u32,
                pub Count: u32,
            }
            impl KSMULTIPLE_ITEM {}
            impl ::std::default::Default for KSMULTIPLE_ITEM {
                fn default() -> Self {
                    Self { Size: 0, Count: 0 }
                }
            }
            impl ::std::fmt::Debug for KSMULTIPLE_ITEM {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSMULTIPLE_ITEM")
                        .field("Size", &format_args!("{:?}", self.Size))
                        .field("Count", &format_args!("{:?}", self.Count))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSMULTIPLE_ITEM {
                fn eq(&self, other: &Self) -> bool {
                    self.Size == other.Size && self.Count == other.Count
                }
            }
            impl ::std::cmp::Eq for KSMULTIPLE_ITEM {}
            unsafe impl ::windows::Abi for KSMULTIPLE_ITEM {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSMULTIPLE_DATA_PROP {
                pub Property: KSIDENTIFIER,
                pub MultipleItem: KSMULTIPLE_ITEM,
            }
            impl KSMULTIPLE_DATA_PROP {}
            unsafe impl ::windows::Abi for KSMULTIPLE_DATA_PROP {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSMUSICFORMAT {
                pub TimeDeltaMs: u32,
                pub ByteCount: u32,
            }
            impl KSMUSICFORMAT {}
            impl ::std::default::Default for KSMUSICFORMAT {
                fn default() -> Self {
                    Self {
                        TimeDeltaMs: 0,
                        ByteCount: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSMUSICFORMAT {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSMUSICFORMAT")
                        .field("TimeDeltaMs", &format_args!("{:?}", self.TimeDeltaMs))
                        .field("ByteCount", &format_args!("{:?}", self.ByteCount))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSMUSICFORMAT {
                fn eq(&self, other: &Self) -> bool {
                    self.TimeDeltaMs == other.TimeDeltaMs && self.ByteCount == other.ByteCount
                }
            }
            impl ::std::cmp::Eq for KSMUSICFORMAT {}
            unsafe impl ::windows::Abi for KSMUSICFORMAT {
                type Abi = Self;
            }
            pub const KSMUSIC_TECHNOLOGY_FMSYNTH: ::windows::Guid = ::windows::Guid::from_values(
                623664256,
                25321,
                4559,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            pub const KSMUSIC_TECHNOLOGY_PORT: ::windows::Guid = ::windows::Guid::from_values(
                2261331552,
                25320,
                4559,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            pub const KSMUSIC_TECHNOLOGY_SQSYNTH: ::windows::Guid = ::windows::Guid::from_values(
                248464256,
                25321,
                4559,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            pub const KSMUSIC_TECHNOLOGY_SWSYNTH: ::windows::Guid = ::windows::Guid::from_values(
                926971702,
                13856,
                4561,
                [133, 211, 0, 0, 248, 117, 67, 128],
            );
            pub const KSMUSIC_TECHNOLOGY_WAVETABLE: ::windows::Guid = ::windows::Guid::from_values(
                961464256,
                25321,
                4559,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSM_NODE {
                pub Method: KSIDENTIFIER,
                pub NodeId: u32,
                pub Reserved: u32,
            }
            impl KSM_NODE {}
            unsafe impl ::windows::Abi for KSM_NODE {
                type Abi = Self;
            }
            pub const KSNAME_Allocator: ::windows::Guid = ::windows::Guid::from_values(
                1680825600,
                18321,
                4560,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            pub const KSNAME_Clock: ::windows::Guid = ::windows::Guid::from_values(
                1394025600,
                18321,
                4560,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            pub const KSNAME_Filter: ::windows::Guid = ::windows::Guid::from_values(
                2604030096,
                5727,
                4560,
                [161, 149, 0, 32, 175, 209, 86, 228],
            );
            pub const KSNAME_Pin: ::windows::Guid = ::windows::Guid::from_values(
                342825600,
                18321,
                4560,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            pub const KSNAME_TopologyNode: ::windows::Guid = ::windows::Guid::from_values(
                102827546,
                61045,
                4560,
                [185, 21, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODEPIN_AEC_CAPTURE_IN: u32 = 2u32;
            pub const KSNODEPIN_AEC_CAPTURE_OUT: u32 = 3u32;
            pub const KSNODEPIN_AEC_RENDER_IN: u32 = 1u32;
            pub const KSNODEPIN_AEC_RENDER_OUT: u32 = 0u32;
            pub const KSNODEPIN_DEMUX_IN: u32 = 0u32;
            pub const KSNODEPIN_DEMUX_OUT: u32 = 1u32;
            pub const KSNODEPIN_STANDARD_IN: u32 = 1u32;
            pub const KSNODEPIN_STANDARD_OUT: u32 = 0u32;
            pub const KSNODEPIN_SUM_MUX_IN: u32 = 1u32;
            pub const KSNODEPIN_SUM_MUX_OUT: u32 = 0u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSNODEPROPERTY {
                pub Property: KSIDENTIFIER,
                pub NodeId: u32,
                pub Reserved: u32,
            }
            impl KSNODEPROPERTY {}
            unsafe impl ::windows::Abi for KSNODEPROPERTY {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSNODEPROPERTY_AUDIO_3D_LISTENER {
                pub NodeProperty: KSNODEPROPERTY,
                pub ListenerId: *mut ::std::ffi::c_void,
            }
            impl KSNODEPROPERTY_AUDIO_3D_LISTENER {}
            unsafe impl ::windows::Abi for KSNODEPROPERTY_AUDIO_3D_LISTENER {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSNODEPROPERTY_AUDIO_CHANNEL {
                pub NodeProperty: KSNODEPROPERTY,
                pub Channel: i32,
                pub Reserved: u32,
            }
            impl KSNODEPROPERTY_AUDIO_CHANNEL {}
            unsafe impl ::windows::Abi for KSNODEPROPERTY_AUDIO_CHANNEL {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSNODEPROPERTY_AUDIO_DEV_SPECIFIC {
                pub NodeProperty: KSNODEPROPERTY,
                pub DevSpecificId: u32,
                pub DeviceInfo: u32,
                pub Length: u32,
            }
            impl KSNODEPROPERTY_AUDIO_DEV_SPECIFIC {}
            unsafe impl ::windows::Abi for KSNODEPROPERTY_AUDIO_DEV_SPECIFIC {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSNODEPROPERTY_AUDIO_PROPERTY {
                pub NodeProperty: KSNODEPROPERTY,
                pub AppContext: *mut ::std::ffi::c_void,
                pub Length: u32,
            }
            impl KSNODEPROPERTY_AUDIO_PROPERTY {}
            unsafe impl ::windows::Abi for KSNODEPROPERTY_AUDIO_PROPERTY {
                type Abi = Self;
            }
            pub const KSNODETYPE_1394_DA_STREAM: ::windows::Guid = ::windows::Guid::from_values(
                3757187046,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_1394_DV_STREAM_SOUNDTRACK: ::windows::Guid =
                ::windows::Guid::from_values(
                    3757187047,
                    63247,
                    4560,
                    [185, 23, 0, 160, 201, 34, 49, 150],
                );
            pub const KSNODETYPE_3D_EFFECTS: ::windows::Guid = ::windows::Guid::from_values(
                1431394400,
                50521,
                4560,
                [138, 43, 0, 160, 201, 37, 90, 193],
            );
            pub const KSNODETYPE_ADC: ::windows::Guid = ::windows::Guid::from_values(
                1300463584,
                50517,
                4560,
                [138, 43, 0, 160, 201, 37, 90, 193],
            );
            pub const KSNODETYPE_AGC: ::windows::Guid = ::windows::Guid::from_values(
                3901528992,
                50519,
                4560,
                [138, 43, 0, 160, 201, 37, 90, 193],
            );
            pub const KSNODETYPE_ANALOG_CONNECTOR: ::windows::Guid = ::windows::Guid::from_values(
                3757187041,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_ANALOG_TAPE: ::windows::Guid = ::windows::Guid::from_values(
                3757187303,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_AUDIO_ENGINE: ::windows::Guid = ::windows::Guid::from_values(
                902493924,
                62387,
                16744,
                [187, 75, 85, 231, 122, 70, 28, 126],
            );
            pub const KSNODETYPE_AUDIO_KEYWORDDETECTOR: ::windows::Guid =
                ::windows::Guid::from_values(
                    941088952,
                    57176,
                    17269,
                    [182, 105, 196, 150, 52, 51, 31, 157],
                );
            pub const KSNODETYPE_AUDIO_LOOPBACK: ::windows::Guid = ::windows::Guid::from_values(
                2403516594,
                37326,
                19407,
                [156, 205, 14, 89, 144, 55, 171, 53],
            );
            pub const KSNODETYPE_BIDIRECTIONAL_UNDEFINED: ::windows::Guid =
                ::windows::Guid::from_values(
                    3757186528,
                    63247,
                    4560,
                    [185, 23, 0, 160, 201, 34, 49, 150],
                );
            pub const KSNODETYPE_CABLE_TUNER_AUDIO: ::windows::Guid = ::windows::Guid::from_values(
                3757187310,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_CD_PLAYER: ::windows::Guid = ::windows::Guid::from_values(
                3757187299,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_CHORUS: ::windows::Guid = ::windows::Guid::from_values(
                538394400,
                50521,
                4560,
                [138, 43, 0, 160, 201, 37, 90, 193],
            );
            pub const KSNODETYPE_COMMUNICATION_SPEAKER: ::windows::Guid =
                ::windows::Guid::from_values(
                    3757186278,
                    63247,
                    4560,
                    [185, 23, 0, 160, 201, 34, 49, 150],
                );
            pub const KSNODETYPE_DAC: ::windows::Guid = ::windows::Guid::from_values(
                1350230880,
                50516,
                4560,
                [138, 43, 0, 160, 201, 37, 90, 193],
            );
            pub const KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE: ::windows::Guid =
                ::windows::Guid::from_values(
                    3757187300,
                    63247,
                    4560,
                    [185, 23, 0, 160, 201, 34, 49, 150],
                );
            pub const KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE: ::windows::Guid =
                ::windows::Guid::from_values(
                    3757187301,
                    63247,
                    4560,
                    [185, 23, 0, 160, 201, 34, 49, 150],
                );
            pub const KSNODETYPE_DELAY: ::windows::Guid = ::windows::Guid::from_values(
                340361696,
                50520,
                4560,
                [138, 43, 0, 160, 201, 37, 90, 193],
            );
            pub const KSNODETYPE_DEMUX: ::windows::Guid = ::windows::Guid::from_values(
                3236653012,
                59399,
                4560,
                [149, 138, 0, 192, 79, 185, 37, 211],
            );
            pub const KSNODETYPE_DESKTOP_MICROPHONE: ::windows::Guid = ::windows::Guid::from_values(
                3757186018,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_DESKTOP_SPEAKER: ::windows::Guid = ::windows::Guid::from_values(
                3757186276,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_DEV_SPECIFIC: ::windows::Guid = ::windows::Guid::from_values(
                2484894400,
                50521,
                4560,
                [138, 43, 0, 160, 201, 37, 90, 193],
            );
            pub const KSNODETYPE_DIGITAL_AUDIO_INTERFACE: ::windows::Guid =
                ::windows::Guid::from_values(
                    3757187042,
                    63247,
                    4560,
                    [185, 23, 0, 160, 201, 34, 49, 150],
                );
            pub const KSNODETYPE_DISPLAYPORT_INTERFACE: ::windows::Guid =
                ::windows::Guid::from_values(
                    3833479217,
                    16038,
                    16781,
                    [143, 155, 183, 56, 67, 204, 186, 151],
                );
            pub const KSNODETYPE_DOWN_LINE_PHONE: ::windows::Guid = ::windows::Guid::from_values(
                3757186787,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_DRM_DESCRAMBLE: ::windows::Guid = ::windows::Guid::from_values(
                4290473535,
                52478,
                19844,
                [144, 217, 66, 20, 24, 176, 58, 142],
            );
            pub const KSNODETYPE_DSS_AUDIO: ::windows::Guid = ::windows::Guid::from_values(
                3757187311,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_DVD_AUDIO: ::windows::Guid = ::windows::Guid::from_values(
                3757187307,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_DYN_RANGE_COMPRESSOR: ::windows::Guid =
                ::windows::Guid::from_values(
                    147367592,
                    24607,
                    19192,
                    [135, 147, 217, 5, 255, 76, 169, 125],
                );
            pub const KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE: ::windows::Guid =
                ::windows::Guid::from_values(
                    3757186533,
                    63247,
                    4560,
                    [185, 23, 0, 160, 201, 34, 49, 150],
                );
            pub const KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE: ::windows::Guid =
                ::windows::Guid::from_values(
                    3757186532,
                    63247,
                    4560,
                    [185, 23, 0, 160, 201, 34, 49, 150],
                );
            pub const KSNODETYPE_EMBEDDED_UNDEFINED: ::windows::Guid = ::windows::Guid::from_values(
                3757187296,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_EQUALIZATION_NOISE: ::windows::Guid = ::windows::Guid::from_values(
                3757187298,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_EQUALIZER: ::windows::Guid = ::windows::Guid::from_values(
                2638328992,
                50519,
                4560,
                [138, 43, 0, 160, 201, 37, 90, 193],
            );
            pub const KSNODETYPE_EXTERNAL_UNDEFINED: ::windows::Guid = ::windows::Guid::from_values(
                3757187040,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_FM_RX: ::windows::Guid = ::windows::Guid::from_values(
                2202694460,
                62597,
                16832,
                [166, 43, 81, 48, 37, 1, 78, 64],
            );
            pub const KSNODETYPE_HANDSET: ::windows::Guid = ::windows::Guid::from_values(
                3757186529,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_HDMI_INTERFACE: ::windows::Guid = ::windows::Guid::from_values(
                3518614570,
                62745,
                16767,
                [145, 201, 85, 250, 101, 72, 16, 1],
            );
            pub const KSNODETYPE_HEADPHONES: ::windows::Guid = ::windows::Guid::from_values(
                3757186274,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_HEADSET: ::windows::Guid = ::windows::Guid::from_values(
                3757186530,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO: ::windows::Guid =
                ::windows::Guid::from_values(
                    3757186275,
                    63247,
                    4560,
                    [185, 23, 0, 160, 201, 34, 49, 150],
                );
            pub const KSNODETYPE_INPUT_UNDEFINED: ::windows::Guid = ::windows::Guid::from_values(
                3757186016,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_LEGACY_AUDIO_CONNECTOR: ::windows::Guid =
                ::windows::Guid::from_values(
                    3757187044,
                    63247,
                    4560,
                    [185, 23, 0, 160, 201, 34, 49, 150],
                );
            pub const KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE: ::windows::Guid =
                ::windows::Guid::from_values(
                    3757187297,
                    63247,
                    4560,
                    [185, 23, 0, 160, 201, 34, 49, 150],
                );
            pub const KSNODETYPE_LINE_CONNECTOR: ::windows::Guid = ::windows::Guid::from_values(
                3757187043,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_LOUDNESS: ::windows::Guid = ::windows::Guid::from_values(
                1099461696,
                50520,
                4560,
                [138, 43, 0, 160, 201, 37, 90, 193],
            );
            pub const KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER: ::windows::Guid =
                ::windows::Guid::from_values(
                    3757186279,
                    63247,
                    4560,
                    [185, 23, 0, 160, 201, 34, 49, 150],
                );
            pub const KSNODETYPE_MICROPHONE: ::windows::Guid = ::windows::Guid::from_values(
                3757186017,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_MICROPHONE_ARRAY: ::windows::Guid = ::windows::Guid::from_values(
                3757186021,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_MIDI_ELEMENT: ::windows::Guid = ::windows::Guid::from_values(
                29818470,
                28232,
                19557,
                [172, 155, 82, 219, 93, 101, 108, 126],
            );
            pub const KSNODETYPE_MIDI_JACK: ::windows::Guid = ::windows::Guid::from_values(
                643697727,
                64057,
                19955,
                [171, 4, 190, 1, 185, 30, 41, 154],
            );
            pub const KSNODETYPE_MINIDISK: ::windows::Guid = ::windows::Guid::from_values(
                3757187302,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_MULTITRACK_RECORDER: ::windows::Guid =
                ::windows::Guid::from_values(
                    3757187314,
                    63247,
                    4560,
                    [185, 23, 0, 160, 201, 34, 49, 150],
                );
            pub const KSNODETYPE_MUTE: ::windows::Guid = ::windows::Guid::from_values(
                45228992,
                50519,
                4560,
                [138, 43, 0, 160, 201, 37, 90, 193],
            );
            pub const KSNODETYPE_MUX: ::windows::Guid = ::windows::Guid::from_values(
                753596288,
                50518,
                4560,
                [138, 43, 0, 160, 201, 37, 90, 193],
            );
            pub const KSNODETYPE_NOISE_SUPPRESS: ::windows::Guid = ::windows::Guid::from_values(
                3766456383,
                25341,
                20064,
                [140, 221, 222, 167, 35, 102, 101, 181],
            );
            pub const KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE: ::windows::Guid =
                ::windows::Guid::from_values(
                    3757186020,
                    63247,
                    4560,
                    [185, 23, 0, 160, 201, 34, 49, 150],
                );
            pub const KSNODETYPE_OUTPUT_UNDEFINED: ::windows::Guid = ::windows::Guid::from_values(
                3757186272,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_PARAMETRIC_EQUALIZER: ::windows::Guid =
                ::windows::Guid::from_values(
                    431700586,
                    52779,
                    17474,
                    [135, 236, 103, 39, 195, 202, 180, 119],
                );
            pub const KSNODETYPE_PEAKMETER: ::windows::Guid = ::windows::Guid::from_values(
                2693096734,
                24333,
                19254,
                [168, 105, 209, 149, 214, 171, 75, 158],
            );
            pub const KSNODETYPE_PERSONAL_MICROPHONE: ::windows::Guid =
                ::windows::Guid::from_values(
                    3757186019,
                    63247,
                    4560,
                    [185, 23, 0, 160, 201, 34, 49, 150],
                );
            pub const KSNODETYPE_PHONE_LINE: ::windows::Guid = ::windows::Guid::from_values(
                3757186785,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_PHONOGRAPH: ::windows::Guid = ::windows::Guid::from_values(
                3757187304,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_PROCESSING_MICROPHONE_ARRAY: ::windows::Guid =
                ::windows::Guid::from_values(
                    3757186022,
                    63247,
                    4560,
                    [185, 23, 0, 160, 201, 34, 49, 150],
                );
            pub const KSNODETYPE_PROLOGIC_DECODER: ::windows::Guid = ::windows::Guid::from_values(
                2199661696,
                50520,
                4560,
                [138, 43, 0, 160, 201, 37, 90, 193],
            );
            pub const KSNODETYPE_PROLOGIC_ENCODER: ::windows::Guid = ::windows::Guid::from_values(
                2155136434,
                15462,
                4562,
                [180, 90, 48, 120, 48, 44, 32, 48],
            );
            pub const KSNODETYPE_RADIO_RECEIVER: ::windows::Guid = ::windows::Guid::from_values(
                3757187312,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_RADIO_TRANSMITTER: ::windows::Guid = ::windows::Guid::from_values(
                3757187313,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_REVERB: ::windows::Guid = ::windows::Guid::from_values(
                4009961696,
                50520,
                4560,
                [138, 43, 0, 160, 201, 37, 90, 193],
            );
            pub const KSNODETYPE_ROOM_SPEAKER: ::windows::Guid = ::windows::Guid::from_values(
                3757186277,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_SATELLITE_RECEIVER_AUDIO: ::windows::Guid =
                ::windows::Guid::from_values(
                    3757187309,
                    63247,
                    4560,
                    [185, 23, 0, 160, 201, 34, 49, 150],
                );
            pub const KSNODETYPE_SPDIF_INTERFACE: ::windows::Guid = ::windows::Guid::from_values(
                3757187045,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_SPEAKER: ::windows::Guid = ::windows::Guid::from_values(
                3757186273,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION: ::windows::Guid =
                ::windows::Guid::from_values(
                    3757186531,
                    63247,
                    4560,
                    [185, 23, 0, 160, 201, 34, 49, 150],
                );
            pub const KSNODETYPE_SPEAKERS_STATIC_JACK: ::windows::Guid =
                ::windows::Guid::from_values(
                    685789063,
                    19902,
                    20365,
                    [133, 137, 2, 93, 32, 157, 251, 74],
                );
            pub const KSNODETYPE_SRC: ::windows::Guid = ::windows::Guid::from_values(
                2646063584,
                50517,
                4560,
                [138, 43, 0, 160, 201, 37, 90, 193],
            );
            pub const KSNODETYPE_STEREO_WIDE: ::windows::Guid = ::windows::Guid::from_values(
                2850461696,
                50520,
                4560,
                [138, 43, 0, 160, 201, 37, 90, 193],
            );
            pub const KSNODETYPE_SUM: ::windows::Guid = ::windows::Guid::from_values(
                3661896288,
                50518,
                4560,
                [138, 43, 0, 160, 201, 37, 90, 193],
            );
            pub const KSNODETYPE_SUPERMIX: ::windows::Guid = ::windows::Guid::from_values(
                3849563584,
                50517,
                4560,
                [138, 43, 0, 160, 201, 37, 90, 193],
            );
            pub const KSNODETYPE_SYNTHESIZER: ::windows::Guid = ::windows::Guid::from_values(
                3757187315,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_TELEPHONE: ::windows::Guid = ::windows::Guid::from_values(
                3757186786,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_TELEPHONY_BIDI: ::windows::Guid = ::windows::Guid::from_values(
                1752005824,
                55555,
                16984,
                [180, 67, 58, 61, 53, 128, 116, 28],
            );
            pub const KSNODETYPE_TELEPHONY_UNDEFINED: ::windows::Guid =
                ::windows::Guid::from_values(
                    3757186784,
                    63247,
                    4560,
                    [185, 23, 0, 160, 201, 34, 49, 150],
                );
            pub const KSNODETYPE_TONE: ::windows::Guid = ::windows::Guid::from_values(
                1980228992,
                50519,
                4560,
                [138, 43, 0, 160, 201, 37, 90, 193],
            );
            pub const KSNODETYPE_TV_TUNER_AUDIO: ::windows::Guid = ::windows::Guid::from_values(
                3757187308,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_UPDOWN_MIX: ::windows::Guid = ::windows::Guid::from_values(
                3085813199,
                31587,
                20194,
                [161, 0, 41, 238, 44, 182, 178, 222],
            );
            pub const KSNODETYPE_VCR_AUDIO: ::windows::Guid = ::windows::Guid::from_values(
                3757187305,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_VIDEO_CAMERA_TERMINAL: ::windows::Guid =
                ::windows::Guid::from_values(
                    3757189606,
                    63247,
                    4560,
                    [185, 23, 0, 160, 201, 34, 49, 150],
                );
            pub const KSNODETYPE_VIDEO_DISC_AUDIO: ::windows::Guid = ::windows::Guid::from_values(
                3757187306,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_VIDEO_INPUT_MTT: ::windows::Guid = ::windows::Guid::from_values(
                3757189607,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_VIDEO_INPUT_TERMINAL: ::windows::Guid =
                ::windows::Guid::from_values(
                    3757189602,
                    63247,
                    4560,
                    [185, 23, 0, 160, 201, 34, 49, 150],
                );
            pub const KSNODETYPE_VIDEO_OUTPUT_MTT: ::windows::Guid = ::windows::Guid::from_values(
                3757189608,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_VIDEO_OUTPUT_TERMINAL: ::windows::Guid =
                ::windows::Guid::from_values(
                    3757189603,
                    63247,
                    4560,
                    [185, 23, 0, 160, 201, 34, 49, 150],
                );
            pub const KSNODETYPE_VIDEO_PROCESSING: ::windows::Guid = ::windows::Guid::from_values(
                3757189605,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_VIDEO_SELECTOR: ::windows::Guid = ::windows::Guid::from_values(
                3757189604,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_VIDEO_STREAMING: ::windows::Guid = ::windows::Guid::from_values(
                3757189601,
                63247,
                4560,
                [185, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSNODETYPE_VOLUME: ::windows::Guid = ::windows::Guid::from_values(
                979028992,
                50519,
                4560,
                [138, 43, 0, 160, 201, 37, 90, 193],
            );
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSNODE_CREATE {
                pub CreateFlags: u32,
                pub Node: u32,
            }
            impl KSNODE_CREATE {}
            impl ::std::default::Default for KSNODE_CREATE {
                fn default() -> Self {
                    Self {
                        CreateFlags: 0,
                        Node: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSNODE_CREATE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSNODE_CREATE")
                        .field("CreateFlags", &format_args!("{:?}", self.CreateFlags))
                        .field("Node", &format_args!("{:?}", self.Node))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSNODE_CREATE {
                fn eq(&self, other: &Self) -> bool {
                    self.CreateFlags == other.CreateFlags && self.Node == other.Node
                }
            }
            impl ::std::cmp::Eq for KSNODE_CREATE {}
            unsafe impl ::windows::Abi for KSNODE_CREATE {
                type Abi = Self;
            }
            pub const KSNOTIFICATIONID_AudioModule: ::windows::Guid = ::windows::Guid::from_values(
                2619482352,
                55718,
                19804,
                [160, 54, 87, 56, 87, 253, 80, 210],
            );
            pub const KSNOTIFICATIONID_SoundDetector: ::windows::Guid =
                ::windows::Guid::from_values(
                    1669978180,
                    47922,
                    19532,
                    [168, 2, 244, 180, 183, 122, 254, 173],
                );
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPIN_CINSTANCES {
                pub PossibleCount: u32,
                pub CurrentCount: u32,
            }
            impl KSPIN_CINSTANCES {}
            impl ::std::default::Default for KSPIN_CINSTANCES {
                fn default() -> Self {
                    Self {
                        PossibleCount: 0,
                        CurrentCount: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSPIN_CINSTANCES {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSPIN_CINSTANCES")
                        .field("PossibleCount", &format_args!("{:?}", self.PossibleCount))
                        .field("CurrentCount", &format_args!("{:?}", self.CurrentCount))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSPIN_CINSTANCES {
                fn eq(&self, other: &Self) -> bool {
                    self.PossibleCount == other.PossibleCount
                        && self.CurrentCount == other.CurrentCount
                }
            }
            impl ::std::cmp::Eq for KSPIN_CINSTANCES {}
            unsafe impl ::windows::Abi for KSPIN_CINSTANCES {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPIN_COMMUNICATION(pub i32);
            impl KSPIN_COMMUNICATION {
                pub const KSPIN_COMMUNICATION_NONE: Self = Self(0i32);
                pub const KSPIN_COMMUNICATION_SINK: Self = Self(1i32);
                pub const KSPIN_COMMUNICATION_SOURCE: Self = Self(2i32);
                pub const KSPIN_COMMUNICATION_BOTH: Self = Self(3i32);
                pub const KSPIN_COMMUNICATION_BRIDGE: Self = Self(4i32);
            }
            impl ::std::convert::From<i32> for KSPIN_COMMUNICATION {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPIN_COMMUNICATION {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPRIORITY {
                pub PriorityClass: u32,
                pub PrioritySubClass: u32,
            }
            impl KSPRIORITY {}
            impl ::std::default::Default for KSPRIORITY {
                fn default() -> Self {
                    Self {
                        PriorityClass: 0,
                        PrioritySubClass: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSPRIORITY {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSPRIORITY")
                        .field("PriorityClass", &format_args!("{:?}", self.PriorityClass))
                        .field(
                            "PrioritySubClass",
                            &format_args!("{:?}", self.PrioritySubClass),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSPRIORITY {
                fn eq(&self, other: &Self) -> bool {
                    self.PriorityClass == other.PriorityClass
                        && self.PrioritySubClass == other.PrioritySubClass
                }
            }
            impl ::std::cmp::Eq for KSPRIORITY {}
            unsafe impl ::windows::Abi for KSPRIORITY {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPIN_CONNECT {
                pub Interface: KSIDENTIFIER,
                pub Medium: KSIDENTIFIER,
                pub PinId: u32,
                pub PinToHandle: super::SystemServices::HANDLE,
                pub Priority: KSPRIORITY,
            }
            impl KSPIN_CONNECT {}
            unsafe impl ::windows::Abi for KSPIN_CONNECT {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPIN_DATAFLOW(pub i32);
            impl KSPIN_DATAFLOW {
                pub const KSPIN_DATAFLOW_IN: Self = Self(1i32);
                pub const KSPIN_DATAFLOW_OUT: Self = Self(2i32);
            }
            impl ::std::convert::From<i32> for KSPIN_DATAFLOW {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPIN_DATAFLOW {
                type Abi = Self;
            }
            pub const KSPIN_FLAG_ASYNCHRONOUS_PROCESSING: u32 = 8u32;
            pub const KSPIN_FLAG_DENY_USERMODE_ACCESS: u32 = 2147483648u32;
            pub const KSPIN_FLAG_DISTINCT_TRAILING_EDGE: u32 = 512u32;
            pub const KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING: u32 = 16u32;
            pub const KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT: u32 = 524288u32;
            pub const KSPIN_FLAG_ENFORCE_FIFO: u32 = 128u32;
            pub const KSPIN_FLAG_FIXED_FORMAT: u32 = 1048576u32;
            pub const KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING: u32 = 64u32;
            pub const KSPIN_FLAG_GENERATE_EOS_EVENTS: u32 = 2097152u32;
            pub const KSPIN_FLAG_GENERATE_MAPPINGS: u32 = 256u32;
            pub const KSPIN_FLAG_IMPLEMENT_CLOCK: u32 = 4194304u32;
            pub const KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL: u32 = 32u32;
            pub const KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE: u32 = 16777216u32;
            pub const KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY: u32 = 65536u32;
            pub const KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING: u32 = 8388608u32;
            pub const KSPIN_FLAG_SPLITTER: u32 = 131072u32;
            pub const KSPIN_FLAG_USE_STANDARD_TRANSPORT: u32 = 262144u32;
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPIN_MDL_CACHING_EVENT(pub i32);
            impl KSPIN_MDL_CACHING_EVENT {
                pub const KSPIN_MDL_CACHING_NOTIFY_CLEANUP: Self = Self(0i32);
                pub const KSPIN_MDL_CACHING_NOTIFY_CLEANALL_WAIT: Self = Self(1i32);
                pub const KSPIN_MDL_CACHING_NOTIFY_CLEANALL_NOWAIT: Self = Self(2i32);
                pub const KSPIN_MDL_CACHING_NOTIFY_ADDSAMPLE: Self = Self(3i32);
            }
            impl ::std::convert::From<i32> for KSPIN_MDL_CACHING_EVENT {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPIN_MDL_CACHING_EVENT {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPIN_MDL_CACHING_NOTIFICATION {
                pub Event: KSPIN_MDL_CACHING_EVENT,
                pub Buffer: *mut ::std::ffi::c_void,
            }
            impl KSPIN_MDL_CACHING_NOTIFICATION {}
            impl ::std::default::Default for KSPIN_MDL_CACHING_NOTIFICATION {
                fn default() -> Self {
                    Self {
                        Event: ::std::default::Default::default(),
                        Buffer: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for KSPIN_MDL_CACHING_NOTIFICATION {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSPIN_MDL_CACHING_NOTIFICATION")
                        .field("Event", &format_args!("{:?}", self.Event))
                        .field("Buffer", &format_args!("{:?}", self.Buffer))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSPIN_MDL_CACHING_NOTIFICATION {
                fn eq(&self, other: &Self) -> bool {
                    self.Event == other.Event && self.Buffer == other.Buffer
                }
            }
            impl ::std::cmp::Eq for KSPIN_MDL_CACHING_NOTIFICATION {}
            unsafe impl ::windows::Abi for KSPIN_MDL_CACHING_NOTIFICATION {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPIN_MDL_CACHING_NOTIFICATION32 {
                pub Event: KSPIN_MDL_CACHING_EVENT,
                pub Buffer: u32,
            }
            impl KSPIN_MDL_CACHING_NOTIFICATION32 {}
            impl ::std::default::Default for KSPIN_MDL_CACHING_NOTIFICATION32 {
                fn default() -> Self {
                    Self {
                        Event: ::std::default::Default::default(),
                        Buffer: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSPIN_MDL_CACHING_NOTIFICATION32 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSPIN_MDL_CACHING_NOTIFICATION32")
                        .field("Event", &format_args!("{:?}", self.Event))
                        .field("Buffer", &format_args!("{:?}", self.Buffer))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSPIN_MDL_CACHING_NOTIFICATION32 {
                fn eq(&self, other: &Self) -> bool {
                    self.Event == other.Event && self.Buffer == other.Buffer
                }
            }
            impl ::std::cmp::Eq for KSPIN_MDL_CACHING_NOTIFICATION32 {}
            unsafe impl ::windows::Abi for KSPIN_MDL_CACHING_NOTIFICATION32 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPIN_PHYSICALCONNECTION {
                pub Size: u32,
                pub Pin: u32,
                pub SymbolicLinkName: [u16; 1],
            }
            impl KSPIN_PHYSICALCONNECTION {}
            impl ::std::default::Default for KSPIN_PHYSICALCONNECTION {
                fn default() -> Self {
                    Self {
                        Size: 0,
                        Pin: 0,
                        SymbolicLinkName: [0; 1],
                    }
                }
            }
            impl ::std::fmt::Debug for KSPIN_PHYSICALCONNECTION {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSPIN_PHYSICALCONNECTION")
                        .field("Size", &format_args!("{:?}", self.Size))
                        .field("Pin", &format_args!("{:?}", self.Pin))
                        .field(
                            "SymbolicLinkName",
                            &format_args!("{:?}", self.SymbolicLinkName),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSPIN_PHYSICALCONNECTION {
                fn eq(&self, other: &Self) -> bool {
                    self.Size == other.Size
                        && self.Pin == other.Pin
                        && self.SymbolicLinkName == other.SymbolicLinkName
                }
            }
            impl ::std::cmp::Eq for KSPIN_PHYSICALCONNECTION {}
            unsafe impl ::windows::Abi for KSPIN_PHYSICALCONNECTION {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPPROPERTY_ALLOCATOR_MDLCACHING(pub i32);
            impl KSPPROPERTY_ALLOCATOR_MDLCACHING {
                pub const KSPROPERTY_ALLOCATOR_CLEANUP_CACHEDMDLPAGES: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for KSPPROPERTY_ALLOCATOR_MDLCACHING {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPPROPERTY_ALLOCATOR_MDLCACHING {
                type Abi = Self;
            }
            pub const KSPRIORITY_EXCLUSIVE: u32 = 4294967295u32;
            pub const KSPRIORITY_HIGH: u32 = 2147483648u32;
            pub const KSPRIORITY_LOW: u32 = 1u32;
            pub const KSPRIORITY_NORMAL: u32 = 1073741824u32;
            pub const KSPROBE_ALLOCATEMDL: u32 = 16u32;
            pub const KSPROBE_ALLOWFORMATCHANGE: u32 = 128u32;
            pub const KSPROBE_MODIFY: u32 = 512u32;
            pub const KSPROBE_PROBEANDLOCK: u32 = 32u32;
            pub const KSPROBE_STREAMREAD: u32 = 0u32;
            pub const KSPROBE_STREAMWRITE: u32 = 1u32;
            pub const KSPROBE_SYSTEMADDRESS: u32 = 64u32;
            pub const KSPROPERTYSETID_ExtendedCameraControl: ::windows::Guid =
                ::windows::Guid::from_values(
                    481792274,
                    49362,
                    16915,
                    [156, 166, 205, 79, 219, 146, 121, 114],
                );
            pub const KSPROPERTYSETID_NetworkCameraControl: ::windows::Guid =
                ::windows::Guid::from_values(
                    242749193,
                    22341,
                    20026,
                    [188, 159, 242, 38, 234, 67, 166, 236],
                );
            pub const KSPROPERTYSETID_PerFrameSettingControl: ::windows::Guid =
                ::windows::Guid::from_values(
                    4059292257,
                    57062,
                    17719,
                    [191, 245, 238, 32, 109, 181, 74, 172],
                );
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_AC3(pub i32);
            impl KSPROPERTY_AC3 {
                pub const KSPROPERTY_AC3_ERROR_CONCEALMENT: Self = Self(1i32);
                pub const KSPROPERTY_AC3_ALTERNATE_AUDIO: Self = Self(2i32);
                pub const KSPROPERTY_AC3_DOWNMIX: Self = Self(3i32);
                pub const KSPROPERTY_AC3_BIT_STREAM_MODE: Self = Self(4i32);
                pub const KSPROPERTY_AC3_DIALOGUE_LEVEL: Self = Self(5i32);
                pub const KSPROPERTY_AC3_LANGUAGE_CODE: Self = Self(6i32);
                pub const KSPROPERTY_AC3_ROOM_TYPE: Self = Self(7i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_AC3 {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_AC3 {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_ALLOCATOR_CONTROL(pub i32);
            impl KSPROPERTY_ALLOCATOR_CONTROL {
                pub const KSPROPERTY_ALLOCATOR_CONTROL_HONOR_COUNT: Self = Self(0i32);
                pub const KSPROPERTY_ALLOCATOR_CONTROL_SURFACE_SIZE: Self = Self(1i32);
                pub const KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_CAPS: Self = Self(2i32);
                pub const KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_INTERLEAVE: Self = Self(3i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_ALLOCATOR_CONTROL {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_ALLOCATOR_CONTROL {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_CAPS_S {
                pub InterleavedCapSupported: u32,
            }
            impl KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_CAPS_S {}
            impl ::std::default::Default for KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_CAPS_S {
                fn default() -> Self {
                    Self {
                        InterleavedCapSupported: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_CAPS_S {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_CAPS_S")
                        .field(
                            "InterleavedCapSupported",
                            &format_args!("{:?}", self.InterleavedCapSupported),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_CAPS_S {
                fn eq(&self, other: &Self) -> bool {
                    self.InterleavedCapSupported == other.InterleavedCapSupported
                }
            }
            impl ::std::cmp::Eq for KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_CAPS_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_CAPS_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_INTERLEAVE_S {
                pub InterleavedCapPossible: u32,
            }
            impl KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_INTERLEAVE_S {}
            impl ::std::default::Default for KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_INTERLEAVE_S {
                fn default() -> Self {
                    Self {
                        InterleavedCapPossible: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_INTERLEAVE_S {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_INTERLEAVE_S")
                        .field(
                            "InterleavedCapPossible",
                            &format_args!("{:?}", self.InterleavedCapPossible),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_INTERLEAVE_S {
                fn eq(&self, other: &Self) -> bool {
                    self.InterleavedCapPossible == other.InterleavedCapPossible
                }
            }
            impl ::std::cmp::Eq for KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_INTERLEAVE_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_INTERLEAVE_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_ALLOCATOR_CONTROL_SURFACE_SIZE_S {
                pub CX: u32,
                pub CY: u32,
            }
            impl KSPROPERTY_ALLOCATOR_CONTROL_SURFACE_SIZE_S {}
            impl ::std::default::Default for KSPROPERTY_ALLOCATOR_CONTROL_SURFACE_SIZE_S {
                fn default() -> Self {
                    Self { CX: 0, CY: 0 }
                }
            }
            impl ::std::fmt::Debug for KSPROPERTY_ALLOCATOR_CONTROL_SURFACE_SIZE_S {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSPROPERTY_ALLOCATOR_CONTROL_SURFACE_SIZE_S")
                        .field("CX", &format_args!("{:?}", self.CX))
                        .field("CY", &format_args!("{:?}", self.CY))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSPROPERTY_ALLOCATOR_CONTROL_SURFACE_SIZE_S {
                fn eq(&self, other: &Self) -> bool {
                    self.CX == other.CX && self.CY == other.CY
                }
            }
            impl ::std::cmp::Eq for KSPROPERTY_ALLOCATOR_CONTROL_SURFACE_SIZE_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_ALLOCATOR_CONTROL_SURFACE_SIZE_S {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_AUDDECOUT(pub i32);
            impl KSPROPERTY_AUDDECOUT {
                pub const KSPROPERTY_AUDDECOUT_MODES: Self = Self(0i32);
                pub const KSPROPERTY_AUDDECOUT_CUR_MODE: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_AUDDECOUT {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_AUDDECOUT {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_AUDIO(pub i32);
            impl KSPROPERTY_AUDIO {
                pub const KSPROPERTY_AUDIO_LATENCY: Self = Self(1i32);
                pub const KSPROPERTY_AUDIO_COPY_PROTECTION: Self = Self(2i32);
                pub const KSPROPERTY_AUDIO_CHANNEL_CONFIG: Self = Self(3i32);
                pub const KSPROPERTY_AUDIO_VOLUMELEVEL: Self = Self(4i32);
                pub const KSPROPERTY_AUDIO_POSITION: Self = Self(5i32);
                pub const KSPROPERTY_AUDIO_DYNAMIC_RANGE: Self = Self(6i32);
                pub const KSPROPERTY_AUDIO_QUALITY: Self = Self(7i32);
                pub const KSPROPERTY_AUDIO_SAMPLING_RATE: Self = Self(8i32);
                pub const KSPROPERTY_AUDIO_DYNAMIC_SAMPLING_RATE: Self = Self(9i32);
                pub const KSPROPERTY_AUDIO_MIX_LEVEL_TABLE: Self = Self(10i32);
                pub const KSPROPERTY_AUDIO_MIX_LEVEL_CAPS: Self = Self(11i32);
                pub const KSPROPERTY_AUDIO_MUX_SOURCE: Self = Self(12i32);
                pub const KSPROPERTY_AUDIO_MUTE: Self = Self(13i32);
                pub const KSPROPERTY_AUDIO_BASS: Self = Self(14i32);
                pub const KSPROPERTY_AUDIO_MID: Self = Self(15i32);
                pub const KSPROPERTY_AUDIO_TREBLE: Self = Self(16i32);
                pub const KSPROPERTY_AUDIO_BASS_BOOST: Self = Self(17i32);
                pub const KSPROPERTY_AUDIO_EQ_LEVEL: Self = Self(18i32);
                pub const KSPROPERTY_AUDIO_NUM_EQ_BANDS: Self = Self(19i32);
                pub const KSPROPERTY_AUDIO_EQ_BANDS: Self = Self(20i32);
                pub const KSPROPERTY_AUDIO_AGC: Self = Self(21i32);
                pub const KSPROPERTY_AUDIO_DELAY: Self = Self(22i32);
                pub const KSPROPERTY_AUDIO_LOUDNESS: Self = Self(23i32);
                pub const KSPROPERTY_AUDIO_WIDE_MODE: Self = Self(24i32);
                pub const KSPROPERTY_AUDIO_WIDENESS: Self = Self(25i32);
                pub const KSPROPERTY_AUDIO_REVERB_LEVEL: Self = Self(26i32);
                pub const KSPROPERTY_AUDIO_CHORUS_LEVEL: Self = Self(27i32);
                pub const KSPROPERTY_AUDIO_DEV_SPECIFIC: Self = Self(28i32);
                pub const KSPROPERTY_AUDIO_DEMUX_DEST: Self = Self(29i32);
                pub const KSPROPERTY_AUDIO_STEREO_ENHANCE: Self = Self(30i32);
                pub const KSPROPERTY_AUDIO_MANUFACTURE_GUID: Self = Self(31i32);
                pub const KSPROPERTY_AUDIO_PRODUCT_GUID: Self = Self(32i32);
                pub const KSPROPERTY_AUDIO_CPU_RESOURCES: Self = Self(33i32);
                pub const KSPROPERTY_AUDIO_STEREO_SPEAKER_GEOMETRY: Self = Self(34i32);
                pub const KSPROPERTY_AUDIO_SURROUND_ENCODE: Self = Self(35i32);
                pub const KSPROPERTY_AUDIO_3D_INTERFACE: Self = Self(36i32);
                pub const KSPROPERTY_AUDIO_PEAKMETER: Self = Self(37i32);
                pub const KSPROPERTY_AUDIO_ALGORITHM_INSTANCE: Self = Self(38i32);
                pub const KSPROPERTY_AUDIO_FILTER_STATE: Self = Self(39i32);
                pub const KSPROPERTY_AUDIO_PREFERRED_STATUS: Self = Self(40i32);
                pub const KSPROPERTY_AUDIO_PEQ_MAX_BANDS: Self = Self(41i32);
                pub const KSPROPERTY_AUDIO_PEQ_NUM_BANDS: Self = Self(42i32);
                pub const KSPROPERTY_AUDIO_PEQ_BAND_CENTER_FREQ: Self = Self(43i32);
                pub const KSPROPERTY_AUDIO_PEQ_BAND_Q_FACTOR: Self = Self(44i32);
                pub const KSPROPERTY_AUDIO_PEQ_BAND_LEVEL: Self = Self(45i32);
                pub const KSPROPERTY_AUDIO_CHORUS_MODULATION_RATE: Self = Self(46i32);
                pub const KSPROPERTY_AUDIO_CHORUS_MODULATION_DEPTH: Self = Self(47i32);
                pub const KSPROPERTY_AUDIO_REVERB_TIME: Self = Self(48i32);
                pub const KSPROPERTY_AUDIO_REVERB_DELAY_FEEDBACK: Self = Self(49i32);
                pub const KSPROPERTY_AUDIO_POSITIONEX: Self = Self(50i32);
                pub const KSPROPERTY_AUDIO_MIC_ARRAY_GEOMETRY: Self = Self(51i32);
                pub const KSPROPERTY_AUDIO_PRESENTATION_POSITION: Self = Self(52i32);
                pub const KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_POSITION: Self = Self(53i32);
                pub const KSPROPERTY_AUDIO_LINEAR_BUFFER_POSITION: Self = Self(54i32);
                pub const KSPROPERTY_AUDIO_PEAKMETER2: Self = Self(55i32);
                pub const KSPROPERTY_AUDIO_WAVERT_CURRENT_WRITE_LASTBUFFER_POSITION: Self =
                    Self(56i32);
                pub const KSPROPERTY_AUDIO_VOLUMELIMIT_ENGAGED: Self = Self(57i32);
                pub const KSPROPERTY_AUDIO_MIC_SENSITIVITY: Self = Self(58i32);
                pub const KSPROPERTY_AUDIO_MIC_SNR: Self = Self(59i32);
                pub const KSPROPERTY_AUDIO_MIC_SENSITIVITY2: Self = Self(60i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_AUDIO {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_AUDIO {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_AUDIOENGINE(pub i32);
            impl KSPROPERTY_AUDIOENGINE {
                pub const KSPROPERTY_AUDIOENGINE_LFXENABLE: Self = Self(0i32);
                pub const KSPROPERTY_AUDIOENGINE_GFXENABLE: Self = Self(1i32);
                pub const KSPROPERTY_AUDIOENGINE_MIXFORMAT: Self = Self(2i32);
                pub const KSPROPERTY_AUDIOENGINE_DEVICEFORMAT: Self = Self(4i32);
                pub const KSPROPERTY_AUDIOENGINE_SUPPORTEDDEVICEFORMATS: Self = Self(5i32);
                pub const KSPROPERTY_AUDIOENGINE_DESCRIPTOR: Self = Self(6i32);
                pub const KSPROPERTY_AUDIOENGINE_BUFFER_SIZE_RANGE: Self = Self(7i32);
                pub const KSPROPERTY_AUDIOENGINE_LOOPBACK_PROTECTION: Self = Self(8i32);
                pub const KSPROPERTY_AUDIOENGINE_VOLUMELEVEL: Self = Self(9i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_AUDIOENGINE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_AUDIOENGINE {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_AUDIOMODULE(pub i32);
            impl KSPROPERTY_AUDIOMODULE {
                pub const KSPROPERTY_AUDIOMODULE_DESCRIPTORS: Self = Self(1i32);
                pub const KSPROPERTY_AUDIOMODULE_COMMAND: Self = Self(2i32);
                pub const KSPROPERTY_AUDIOMODULE_NOTIFICATION_DEVICE_ID: Self = Self(3i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_AUDIOMODULE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_AUDIOMODULE {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_AUDIOPOSTURE(pub i32);
            impl KSPROPERTY_AUDIOPOSTURE {
                pub const KSPROPERTY_AUDIOPOSTURE_DESCRIPTION: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_AUDIOPOSTURE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_AUDIOPOSTURE {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_AUDIOSIGNALPROCESSING(pub i32);
            impl KSPROPERTY_AUDIOSIGNALPROCESSING {
                pub const KSPROPERTY_AUDIOSIGNALPROCESSING_MODES: Self = Self(0i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_AUDIOSIGNALPROCESSING {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_AUDIOSIGNALPROCESSING {
                type Abi = Self;
            }
            pub const KSPROPERTY_AUDIO_BUFFER_DURATION: u32 = 1u32;
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_BIBLIOGRAPHIC(pub i32);
            impl KSPROPERTY_BIBLIOGRAPHIC {
                pub const KSPROPERTY_BIBLIOGRAPHIC_LEADER: Self = Self(1380207648i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_LCCN: Self = Self(808529952i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_ISBN: Self = Self(808595488i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_ISSN: Self = Self(842149920i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_CATALOGINGSOURCE: Self = Self(808726560i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_MAINPERSONALNAME: Self = Self(808464672i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_MAINCORPORATEBODY: Self = Self(808530208i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_MAINMEETINGNAME: Self = Self(825307424i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_MAINUNIFORMTITLE: Self = Self(808661280i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_UNIFORMTITLE: Self = Self(808727072i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_TITLESTATEMENT: Self = Self(892613152i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_VARYINGFORMTITLE: Self = Self(909390368i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_PUBLICATION: Self = Self(808858144i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_PHYSICALDESCRIPTION: Self = Self(808465184i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYTITLE: Self = Self(808727584i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_SERIESSTATEMENT: Self = Self(809055264i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_GENERALNOTE: Self = Self(808465696i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_BIBLIOGRAPHYNOTE: Self = Self(875574560i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_CONTENTSNOTE: Self = Self(892351776i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_CREATIONCREDIT: Self = Self(942683424i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_CITATION: Self = Self(808531232i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_PARTICIPANT: Self = Self(825308448i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_SUMMARY: Self = Self(808596768i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_TARGETAUDIENCE: Self = Self(825373984i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_ADDEDFORMAVAILABLE: Self = Self(808662304i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_SYSTEMDETAILS: Self = Self(942880032i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_AWARDS: Self = Self(909653280i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYPERSONALNAME: Self =
                    Self(808465952i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYTOPICALTERM: Self = Self(808793632i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYGEOGRAPHIC: Self = Self(825570848i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_INDEXTERMGENRE: Self = Self(892679712i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_INDEXTERMCURRICULUM: Self = Self(943011360i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYUNIFORMTITLE: Self =
                    Self(808662816i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYRELATED: Self = Self(808728352i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_SERIESSTATEMENTPERSONALNAME: Self =
                    Self(808466464i32);
                pub const KSPROPERTY_BIBLIOGRAPHIC_SERIESSTATEMENTUNIFORMTITLE: Self =
                    Self(808663072i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_BIBLIOGRAPHIC {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_BIBLIOGRAPHIC {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union KSPROPERTY_BOUNDS_LONG {
                pub Anonymous1: KSPROPERTY_BOUNDS_LONG_0,
                pub Anonymous2: KSPROPERTY_BOUNDS_LONG_1,
            }
            impl KSPROPERTY_BOUNDS_LONG {}
            unsafe impl ::windows::Abi for KSPROPERTY_BOUNDS_LONG {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_BOUNDS_LONG_0 {
                pub SignedMinimum: i32,
                pub SignedMaximum: i32,
            }
            impl KSPROPERTY_BOUNDS_LONG_0 {}
            impl ::std::default::Default for KSPROPERTY_BOUNDS_LONG_0 {
                fn default() -> Self {
                    Self {
                        SignedMinimum: 0,
                        SignedMaximum: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSPROPERTY_BOUNDS_LONG_0 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_Anonymous1_e__Struct")
                        .field("SignedMinimum", &format_args!("{:?}", self.SignedMinimum))
                        .field("SignedMaximum", &format_args!("{:?}", self.SignedMaximum))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSPROPERTY_BOUNDS_LONG_0 {
                fn eq(&self, other: &Self) -> bool {
                    self.SignedMinimum == other.SignedMinimum
                        && self.SignedMaximum == other.SignedMaximum
                }
            }
            impl ::std::cmp::Eq for KSPROPERTY_BOUNDS_LONG_0 {}
            unsafe impl ::windows::Abi for KSPROPERTY_BOUNDS_LONG_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_BOUNDS_LONG_1 {
                pub UnsignedMinimum: u32,
                pub UnsignedMaximum: u32,
            }
            impl KSPROPERTY_BOUNDS_LONG_1 {}
            impl ::std::default::Default for KSPROPERTY_BOUNDS_LONG_1 {
                fn default() -> Self {
                    Self {
                        UnsignedMinimum: 0,
                        UnsignedMaximum: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSPROPERTY_BOUNDS_LONG_1 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_Anonymous2_e__Struct")
                        .field(
                            "UnsignedMinimum",
                            &format_args!("{:?}", self.UnsignedMinimum),
                        )
                        .field(
                            "UnsignedMaximum",
                            &format_args!("{:?}", self.UnsignedMaximum),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSPROPERTY_BOUNDS_LONG_1 {
                fn eq(&self, other: &Self) -> bool {
                    self.UnsignedMinimum == other.UnsignedMinimum
                        && self.UnsignedMaximum == other.UnsignedMaximum
                }
            }
            impl ::std::cmp::Eq for KSPROPERTY_BOUNDS_LONG_1 {}
            unsafe impl ::windows::Abi for KSPROPERTY_BOUNDS_LONG_1 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union KSPROPERTY_BOUNDS_LONGLONG {
                pub Anonymous1: KSPROPERTY_BOUNDS_LONGLONG_0,
                pub Anonymous2: KSPROPERTY_BOUNDS_LONGLONG_1,
            }
            impl KSPROPERTY_BOUNDS_LONGLONG {}
            unsafe impl ::windows::Abi for KSPROPERTY_BOUNDS_LONGLONG {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_BOUNDS_LONGLONG_0 {
                pub SignedMinimum: i64,
                pub SignedMaximum: i64,
            }
            impl KSPROPERTY_BOUNDS_LONGLONG_0 {}
            impl ::std::default::Default for KSPROPERTY_BOUNDS_LONGLONG_0 {
                fn default() -> Self {
                    Self {
                        SignedMinimum: 0,
                        SignedMaximum: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSPROPERTY_BOUNDS_LONGLONG_0 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_Anonymous1_e__Struct")
                        .field("SignedMinimum", &format_args!("{:?}", self.SignedMinimum))
                        .field("SignedMaximum", &format_args!("{:?}", self.SignedMaximum))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSPROPERTY_BOUNDS_LONGLONG_0 {
                fn eq(&self, other: &Self) -> bool {
                    self.SignedMinimum == other.SignedMinimum
                        && self.SignedMaximum == other.SignedMaximum
                }
            }
            impl ::std::cmp::Eq for KSPROPERTY_BOUNDS_LONGLONG_0 {}
            unsafe impl ::windows::Abi for KSPROPERTY_BOUNDS_LONGLONG_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_BOUNDS_LONGLONG_1 {
                pub UnsignedMinimum: u64,
                pub UnsignedMaximum: u64,
            }
            impl KSPROPERTY_BOUNDS_LONGLONG_1 {}
            impl ::std::default::Default for KSPROPERTY_BOUNDS_LONGLONG_1 {
                fn default() -> Self {
                    Self {
                        UnsignedMinimum: 0,
                        UnsignedMaximum: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSPROPERTY_BOUNDS_LONGLONG_1 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_Anonymous2_e__Struct")
                        .field(
                            "UnsignedMinimum",
                            &format_args!("{:?}", self.UnsignedMinimum),
                        )
                        .field(
                            "UnsignedMaximum",
                            &format_args!("{:?}", self.UnsignedMaximum),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSPROPERTY_BOUNDS_LONGLONG_1 {
                fn eq(&self, other: &Self) -> bool {
                    self.UnsignedMinimum == other.UnsignedMinimum
                        && self.UnsignedMaximum == other.UnsignedMaximum
                }
            }
            impl ::std::cmp::Eq for KSPROPERTY_BOUNDS_LONGLONG_1 {}
            unsafe impl ::windows::Abi for KSPROPERTY_BOUNDS_LONGLONG_1 {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_BTAUDIO(pub i32);
            impl KSPROPERTY_BTAUDIO {
                pub const KSPROPERTY_ONESHOT_RECONNECT: Self = Self(0i32);
                pub const KSPROPERTY_ONESHOT_DISCONNECT: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_BTAUDIO {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_BTAUDIO {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_CAMERACONTROL_EXTENDED_PROPERTY(pub i32);
            impl KSPROPERTY_CAMERACONTROL_EXTENDED_PROPERTY {
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_PHOTOMODE: Self = Self(0i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_PHOTOFRAMERATE: Self = Self(1i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_PHOTOMAXFRAMERATE: Self = Self(2i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_PHOTOTRIGGERTIME: Self = Self(3i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_WARMSTART: Self = Self(4i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_MAXVIDFPS_PHOTORES: Self = Self(5i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_PHOTOTHUMBNAIL: Self = Self(6i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_SCENEMODE: Self = Self(7i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_TORCHMODE: Self = Self(8i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_FLASHMODE: Self = Self(9i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_OPTIMIZATIONHINT: Self = Self(10i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_WHITEBALANCEMODE: Self = Self(11i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_EXPOSUREMODE: Self = Self(12i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_FOCUSMODE: Self = Self(13i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_ISO: Self = Self(14i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_FIELDOFVIEW: Self = Self(15i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_EVCOMPENSATION: Self = Self(16i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_CAMERAANGLEOFFSET: Self = Self(17i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA: Self = Self(18i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_FOCUSPRIORITY: Self = Self(19i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_FOCUSSTATE: Self = Self(20i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_ROI_CONFIGCAPS: Self = Self(21i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_ROI_ISPCONTROL: Self = Self(22i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_PHOTOCONFIRMATION: Self = Self(23i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_ZOOM: Self = Self(24i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_MCC: Self = Self(25i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_ISO_ADVANCED: Self = Self(26i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_VIDEOSTABILIZATION: Self = Self(27i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_VFR: Self = Self(28i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_FACEDETECTION: Self = Self(29i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_VIDEOHDR: Self = Self(30i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_HISTOGRAM: Self = Self(31i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_OIS: Self = Self(32i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_ADVANCEDPHOTO: Self = Self(33i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_PROFILE: Self = Self(34i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_FACEAUTH_MODE: Self = Self(35i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_SECURE_MODE: Self = Self(36i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_VIDEOTEMPORALDENOISING: Self =
                    Self(37i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_IRTORCHMODE: Self = Self(38i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_RELATIVEPANELOPTIMIZATION: Self =
                    Self(39i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_END: Self = Self(40i32);
                pub const KSPROPERTY_CAMERACONTROL_EXTENDED_END2: Self = Self(40i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_CAMERACONTROL_EXTENDED_PROPERTY {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_CAMERACONTROL_EXTENDED_PROPERTY {
                type Abi = Self;
            }
            pub const KSPROPERTY_CAMERACONTROL_FLAGS_ABSOLUTE: i32 = 0i32;
            pub const KSPROPERTY_CAMERACONTROL_FLAGS_ASYNCHRONOUS: i32 = 4i32;
            pub const KSPROPERTY_CAMERACONTROL_FLAGS_AUTO: i32 = 1i32;
            pub const KSPROPERTY_CAMERACONTROL_FLAGS_MANUAL: i32 = 2i32;
            pub const KSPROPERTY_CAMERACONTROL_FLAGS_RELATIVE: i32 = 16i32;
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_CAMERACONTROL_FLASH(pub i32);
            impl KSPROPERTY_CAMERACONTROL_FLASH {
                pub const KSPROPERTY_CAMERACONTROL_FLASH_PROPERTY_ID: Self = Self(0i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_CAMERACONTROL_FLASH {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_CAMERACONTROL_FLASH {
                type Abi = Self;
            }
            pub const KSPROPERTY_CAMERACONTROL_FLASH_AUTO: i32 = 2i32;
            pub const KSPROPERTY_CAMERACONTROL_FLASH_FLAGS_AUTO: i32 = 1i32;
            pub const KSPROPERTY_CAMERACONTROL_FLASH_FLAGS_MANUAL: i32 = 2i32;
            pub const KSPROPERTY_CAMERACONTROL_FLASH_OFF: i32 = 0i32;
            pub const KSPROPERTY_CAMERACONTROL_FLASH_ON: i32 = 1i32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_CAMERACONTROL_FLASH_S {
                pub Flash: u32,
                pub Capabilities: u32,
            }
            impl KSPROPERTY_CAMERACONTROL_FLASH_S {}
            impl ::std::default::Default for KSPROPERTY_CAMERACONTROL_FLASH_S {
                fn default() -> Self {
                    Self {
                        Flash: 0,
                        Capabilities: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSPROPERTY_CAMERACONTROL_FLASH_S {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSPROPERTY_CAMERACONTROL_FLASH_S")
                        .field("Flash", &format_args!("{:?}", self.Flash))
                        .field("Capabilities", &format_args!("{:?}", self.Capabilities))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSPROPERTY_CAMERACONTROL_FLASH_S {
                fn eq(&self, other: &Self) -> bool {
                    self.Flash == other.Flash && self.Capabilities == other.Capabilities
                }
            }
            impl ::std::cmp::Eq for KSPROPERTY_CAMERACONTROL_FLASH_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_CAMERACONTROL_FLASH_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_CAMERACONTROL_FOCAL_LENGTH_S {
                pub Property: KSIDENTIFIER,
                pub lOcularFocalLength: i32,
                pub lObjectiveFocalLengthMin: i32,
                pub lObjectiveFocalLengthMax: i32,
            }
            impl KSPROPERTY_CAMERACONTROL_FOCAL_LENGTH_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_CAMERACONTROL_FOCAL_LENGTH_S {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_CAMERACONTROL_IMAGE_PIN_CAPABILITY(pub i32);
            impl KSPROPERTY_CAMERACONTROL_IMAGE_PIN_CAPABILITY {
                pub const KSPROPERTY_CAMERACONTROL_IMAGE_PIN_CAPABILITY_PROPERTY_ID: Self =
                    Self(0i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_CAMERACONTROL_IMAGE_PIN_CAPABILITY {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_CAMERACONTROL_IMAGE_PIN_CAPABILITY {
                type Abi = Self;
            }
            pub const KSPROPERTY_CAMERACONTROL_IMAGE_PIN_CAPABILITY_EXCLUSIVE_WITH_RECORD: i32 =
                1i32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_CAMERACONTROL_IMAGE_PIN_CAPABILITY_S {
                pub Capabilities: u32,
                pub Reserved0: u32,
            }
            impl KSPROPERTY_CAMERACONTROL_IMAGE_PIN_CAPABILITY_S {}
            impl ::std::default::Default for KSPROPERTY_CAMERACONTROL_IMAGE_PIN_CAPABILITY_S {
                fn default() -> Self {
                    Self {
                        Capabilities: 0,
                        Reserved0: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSPROPERTY_CAMERACONTROL_IMAGE_PIN_CAPABILITY_S {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSPROPERTY_CAMERACONTROL_IMAGE_PIN_CAPABILITY_S")
                        .field("Capabilities", &format_args!("{:?}", self.Capabilities))
                        .field("Reserved0", &format_args!("{:?}", self.Reserved0))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSPROPERTY_CAMERACONTROL_IMAGE_PIN_CAPABILITY_S {
                fn eq(&self, other: &Self) -> bool {
                    self.Capabilities == other.Capabilities && self.Reserved0 == other.Reserved0
                }
            }
            impl ::std::cmp::Eq for KSPROPERTY_CAMERACONTROL_IMAGE_PIN_CAPABILITY_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_CAMERACONTROL_IMAGE_PIN_CAPABILITY_S {
                type Abi = Self;
            }
            pub const KSPROPERTY_CAMERACONTROL_IMAGE_PIN_CAPABILITY_SEQUENCE_EXCLUSIVE_WITH_RECORD : i32 = 2i32 ;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_CAMERACONTROL_NODE_FOCAL_LENGTH_S {
                pub NodeProperty: KSNODEPROPERTY,
                pub lOcularFocalLength: i32,
                pub lObjectiveFocalLengthMin: i32,
                pub lObjectiveFocalLengthMax: i32,
            }
            impl KSPROPERTY_CAMERACONTROL_NODE_FOCAL_LENGTH_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_CAMERACONTROL_NODE_FOCAL_LENGTH_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSP_NODE {
                pub Property: KSIDENTIFIER,
                pub NodeId: u32,
                pub Reserved: u32,
            }
            impl KSP_NODE {}
            unsafe impl ::windows::Abi for KSP_NODE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_CAMERACONTROL_NODE_S {
                pub NodeProperty: KSP_NODE,
                pub Value: i32,
                pub Flags: u32,
                pub Capabilities: u32,
            }
            impl KSPROPERTY_CAMERACONTROL_NODE_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_CAMERACONTROL_NODE_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_CAMERACONTROL_NODE_S2 {
                pub NodeProperty: KSP_NODE,
                pub Value1: i32,
                pub Flags: u32,
                pub Capabilities: u32,
                pub Value2: i32,
            }
            impl KSPROPERTY_CAMERACONTROL_NODE_S2 {}
            unsafe impl ::windows::Abi for KSPROPERTY_CAMERACONTROL_NODE_S2 {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_PROPERTY(pub i32);
            impl KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_PROPERTY {
                pub const KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_CAPABILITY: Self = Self(0i32);
                pub const KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_SET: Self = Self(1i32);
                pub const KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_CLEAR: Self = Self(2i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_PROPERTY {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_PROPERTY {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_CAMERACONTROL_REGION_OF_INTEREST(pub i32);
            impl KSPROPERTY_CAMERACONTROL_REGION_OF_INTEREST {
                pub const KSPROPERTY_CAMERACONTROL_REGION_OF_INTEREST_PROPERTY_ID: Self =
                    Self(0i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_CAMERACONTROL_REGION_OF_INTEREST {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_CAMERACONTROL_REGION_OF_INTEREST {
                type Abi = Self;
            }
            pub const KSPROPERTY_CAMERACONTROL_REGION_OF_INTEREST_CONFIG_EXPOSURE: i32 = 512i32;
            pub const KSPROPERTY_CAMERACONTROL_REGION_OF_INTEREST_CONFIG_FOCUS: i32 = 256i32;
            pub const KSPROPERTY_CAMERACONTROL_REGION_OF_INTEREST_CONFIG_WB: i32 = 1024i32;
            pub const KSPROPERTY_CAMERACONTROL_REGION_OF_INTEREST_CONVERGEMODE: i32 = 1073741824i32;
            pub const KSPROPERTY_CAMERACONTROL_REGION_OF_INTEREST_FLAGS_ASYNC: i32 = -2147483648i32;
            pub const KSPROPERTY_CAMERACONTROL_REGION_OF_INTEREST_FLAGS_AUTO: i32 = 1i32;
            pub const KSPROPERTY_CAMERACONTROL_REGION_OF_INTEREST_FLAGS_MANUAL: i32 = 2i32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_CAMERACONTROL_REGION_OF_INTEREST_S {
                pub FocusRect: super::DisplayDevices::RECT,
                pub AutoFocusLock: super::SystemServices::BOOL,
                pub AutoExposureLock: super::SystemServices::BOOL,
                pub AutoWhitebalanceLock: super::SystemServices::BOOL,
                pub Anonymous: KSPROPERTY_CAMERACONTROL_REGION_OF_INTEREST_S_0,
            }
            impl KSPROPERTY_CAMERACONTROL_REGION_OF_INTEREST_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_CAMERACONTROL_REGION_OF_INTEREST_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union KSPROPERTY_CAMERACONTROL_REGION_OF_INTEREST_S_0 {
                pub Capabilities: u32,
                pub Configuration: u32,
            }
            impl KSPROPERTY_CAMERACONTROL_REGION_OF_INTEREST_S_0 {}
            unsafe impl ::windows::Abi for KSPROPERTY_CAMERACONTROL_REGION_OF_INTEREST_S_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_CAMERACONTROL_S {
                pub Property: KSIDENTIFIER,
                pub Value: i32,
                pub Flags: u32,
                pub Capabilities: u32,
            }
            impl KSPROPERTY_CAMERACONTROL_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_CAMERACONTROL_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_CAMERACONTROL_S2 {
                pub Property: KSIDENTIFIER,
                pub Value1: i32,
                pub Flags: u32,
                pub Capabilities: u32,
                pub Value2: i32,
            }
            impl KSPROPERTY_CAMERACONTROL_S2 {}
            unsafe impl ::windows::Abi for KSPROPERTY_CAMERACONTROL_S2 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_CAMERACONTROL_S_EX {
                pub Property: KSIDENTIFIER,
                pub Value: i32,
                pub Flags: u32,
                pub Capabilities: u32,
                pub FocusRect: super::DisplayDevices::RECT,
            }
            impl KSPROPERTY_CAMERACONTROL_S_EX {}
            unsafe impl ::windows::Abi for KSPROPERTY_CAMERACONTROL_S_EX {
                type Abi = Self;
            }
            pub const KSPROPERTY_CAMERACONTROL_VIDEOSTABILIZATION_MODE_AUTO: i32 = 4i32;
            pub const KSPROPERTY_CAMERACONTROL_VIDEOSTABILIZATION_MODE_FLAGS_AUTO: i32 = 1i32;
            pub const KSPROPERTY_CAMERACONTROL_VIDEOSTABILIZATION_MODE_FLAGS_MANUAL: i32 = 2i32;
            pub const KSPROPERTY_CAMERACONTROL_VIDEOSTABILIZATION_MODE_HIGH: i32 = 1i32;
            pub const KSPROPERTY_CAMERACONTROL_VIDEOSTABILIZATION_MODE_LOW: i32 = 3i32;
            pub const KSPROPERTY_CAMERACONTROL_VIDEOSTABILIZATION_MODE_MEDIUM: i32 = 2i32;
            pub const KSPROPERTY_CAMERACONTROL_VIDEOSTABILIZATION_MODE_OFF: i32 = 0i32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_CAMERACONTROL_VIDEOSTABILIZATION_MODE_S {
                pub VideoStabilizationMode: u32,
                pub Capabilities: u32,
            }
            impl KSPROPERTY_CAMERACONTROL_VIDEOSTABILIZATION_MODE_S {}
            impl ::std::default::Default for KSPROPERTY_CAMERACONTROL_VIDEOSTABILIZATION_MODE_S {
                fn default() -> Self {
                    Self {
                        VideoStabilizationMode: 0,
                        Capabilities: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSPROPERTY_CAMERACONTROL_VIDEOSTABILIZATION_MODE_S {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSPROPERTY_CAMERACONTROL_VIDEOSTABILIZATION_MODE_S")
                        .field(
                            "VideoStabilizationMode",
                            &format_args!("{:?}", self.VideoStabilizationMode),
                        )
                        .field("Capabilities", &format_args!("{:?}", self.Capabilities))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSPROPERTY_CAMERACONTROL_VIDEOSTABILIZATION_MODE_S {
                fn eq(&self, other: &Self) -> bool {
                    self.VideoStabilizationMode == other.VideoStabilizationMode
                        && self.Capabilities == other.Capabilities
                }
            }
            impl ::std::cmp::Eq for KSPROPERTY_CAMERACONTROL_VIDEOSTABILIZATION_MODE_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_CAMERACONTROL_VIDEOSTABILIZATION_MODE_S {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_CAMERACONTROL_VIDEO_STABILIZATION_MODE(pub i32);
            impl KSPROPERTY_CAMERACONTROL_VIDEO_STABILIZATION_MODE {
                pub const KSPROPERTY_CAMERACONTROL_VIDEO_STABILIZATION_MODE_PROPERTY_ID: Self =
                    Self(0i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_CAMERACONTROL_VIDEO_STABILIZATION_MODE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_CAMERACONTROL_VIDEO_STABILIZATION_MODE {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_CAMERA_PHOTOTRIGGERTIME_FLAGS(pub i32);
            impl KSPROPERTY_CAMERA_PHOTOTRIGGERTIME_FLAGS {
                pub const KSPROPERTY_CAMERA_PHOTOTRIGGERTIME_CLEAR: Self = Self(0i32);
                pub const KSPROPERTY_CAMERA_PHOTOTRIGGERTIME_SET: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_CAMERA_PHOTOTRIGGERTIME_FLAGS {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_CAMERA_PHOTOTRIGGERTIME_FLAGS {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_CLOCK(pub i32);
            impl KSPROPERTY_CLOCK {
                pub const KSPROPERTY_CLOCK_TIME: Self = Self(0i32);
                pub const KSPROPERTY_CLOCK_PHYSICALTIME: Self = Self(1i32);
                pub const KSPROPERTY_CLOCK_CORRELATEDTIME: Self = Self(2i32);
                pub const KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME: Self = Self(3i32);
                pub const KSPROPERTY_CLOCK_RESOLUTION: Self = Self(4i32);
                pub const KSPROPERTY_CLOCK_STATE: Self = Self(5i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_CLOCK {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_CLOCK {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_CONNECTION(pub i32);
            impl KSPROPERTY_CONNECTION {
                pub const KSPROPERTY_CONNECTION_STATE: Self = Self(0i32);
                pub const KSPROPERTY_CONNECTION_PRIORITY: Self = Self(1i32);
                pub const KSPROPERTY_CONNECTION_DATAFORMAT: Self = Self(2i32);
                pub const KSPROPERTY_CONNECTION_ALLOCATORFRAMING: Self = Self(3i32);
                pub const KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT: Self = Self(4i32);
                pub const KSPROPERTY_CONNECTION_ACQUIREORDERING: Self = Self(5i32);
                pub const KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX: Self = Self(6i32);
                pub const KSPROPERTY_CONNECTION_STARTAT: Self = Self(7i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_CONNECTION {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_CONNECTION {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_COPYPROT(pub i32);
            impl KSPROPERTY_COPYPROT {
                pub const KSPROPERTY_DVDCOPY_CHLG_KEY: Self = Self(1i32);
                pub const KSPROPERTY_DVDCOPY_DVD_KEY1: Self = Self(2i32);
                pub const KSPROPERTY_DVDCOPY_DEC_KEY2: Self = Self(3i32);
                pub const KSPROPERTY_DVDCOPY_TITLE_KEY: Self = Self(4i32);
                pub const KSPROPERTY_COPY_MACROVISION: Self = Self(5i32);
                pub const KSPROPERTY_DVDCOPY_REGION: Self = Self(6i32);
                pub const KSPROPERTY_DVDCOPY_SET_COPY_STATE: Self = Self(7i32);
                pub const KSPROPERTY_DVDCOPY_DISC_KEY: Self = Self(128i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_COPYPROT {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_COPYPROT {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_CROSSBAR_ACTIVE_S {
                pub Property: KSIDENTIFIER,
                pub IndexInputPin: u32,
                pub Active: u32,
            }
            impl KSPROPERTY_CROSSBAR_ACTIVE_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_CROSSBAR_ACTIVE_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_CROSSBAR_CAPS_S {
                pub Property: KSIDENTIFIER,
                pub NumberOfInputs: u32,
                pub NumberOfOutputs: u32,
            }
            impl KSPROPERTY_CROSSBAR_CAPS_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_CROSSBAR_CAPS_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_CROSSBAR_PININFO_S {
                pub Property: KSIDENTIFIER,
                pub Direction: KSPIN_DATAFLOW,
                pub Index: u32,
                pub PinType: u32,
                pub RelatedPinIndex: u32,
                pub Medium: KSIDENTIFIER,
            }
            impl KSPROPERTY_CROSSBAR_PININFO_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_CROSSBAR_PININFO_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_CROSSBAR_ROUTE_S {
                pub Property: KSIDENTIFIER,
                pub IndexInputPin: u32,
                pub IndexOutputPin: u32,
                pub CanRoute: u32,
            }
            impl KSPROPERTY_CROSSBAR_ROUTE_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_CROSSBAR_ROUTE_S {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_CYCLIC(pub i32);
            impl KSPROPERTY_CYCLIC {
                pub const KSPROPERTY_CYCLIC_POSITION: Self = Self(0i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_CYCLIC {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_CYCLIC {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_DESCRIPTION {
                pub AccessFlags: u32,
                pub DescriptionSize: u32,
                pub PropTypeSet: KSIDENTIFIER,
                pub MembersListCount: u32,
                pub Reserved: u32,
            }
            impl KSPROPERTY_DESCRIPTION {}
            unsafe impl ::windows::Abi for KSPROPERTY_DESCRIPTION {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_DIRECTSOUND3DBUFFER(pub i32);
            impl KSPROPERTY_DIRECTSOUND3DBUFFER {
                pub const KSPROPERTY_DIRECTSOUND3DBUFFER_ALL: Self = Self(0i32);
                pub const KSPROPERTY_DIRECTSOUND3DBUFFER_POSITION: Self = Self(1i32);
                pub const KSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY: Self = Self(2i32);
                pub const KSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES: Self = Self(3i32);
                pub const KSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION: Self = Self(4i32);
                pub const KSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME: Self = Self(5i32);
                pub const KSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE: Self = Self(6i32);
                pub const KSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE: Self = Self(7i32);
                pub const KSPROPERTY_DIRECTSOUND3DBUFFER_MODE: Self = Self(8i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_DIRECTSOUND3DBUFFER {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_DIRECTSOUND3DBUFFER {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_DIRECTSOUND3DLISTENER(pub i32);
            impl KSPROPERTY_DIRECTSOUND3DLISTENER {
                pub const KSPROPERTY_DIRECTSOUND3DLISTENER_ALL: Self = Self(0i32);
                pub const KSPROPERTY_DIRECTSOUND3DLISTENER_POSITION: Self = Self(1i32);
                pub const KSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY: Self = Self(2i32);
                pub const KSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION: Self = Self(3i32);
                pub const KSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR: Self = Self(4i32);
                pub const KSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR: Self = Self(5i32);
                pub const KSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR: Self = Self(6i32);
                pub const KSPROPERTY_DIRECTSOUND3DLISTENER_BATCH: Self = Self(7i32);
                pub const KSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION: Self = Self(8i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_DIRECTSOUND3DLISTENER {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_DIRECTSOUND3DLISTENER {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_DRMAUDIOSTREAM(pub i32);
            impl KSPROPERTY_DRMAUDIOSTREAM {
                pub const KSPROPERTY_DRMAUDIOSTREAM_CONTENTID: Self = Self(0i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_DRMAUDIOSTREAM {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_DRMAUDIOSTREAM {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_DROPPEDFRAMES_CURRENT_S {
                pub Property: KSIDENTIFIER,
                pub PictureNumber: i64,
                pub DropCount: i64,
                pub AverageFrameSize: u32,
            }
            impl KSPROPERTY_DROPPEDFRAMES_CURRENT_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_DROPPEDFRAMES_CURRENT_S {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_DVDSUBPIC(pub i32);
            impl KSPROPERTY_DVDSUBPIC {
                pub const KSPROPERTY_DVDSUBPIC_PALETTE: Self = Self(0i32);
                pub const KSPROPERTY_DVDSUBPIC_HLI: Self = Self(1i32);
                pub const KSPROPERTY_DVDSUBPIC_COMPOSIT_ON: Self = Self(2i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_DVDSUBPIC {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_DVDSUBPIC {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_EXTDEVICE(pub i32);
            impl KSPROPERTY_EXTDEVICE {
                pub const KSPROPERTY_EXTDEVICE_ID: Self = Self(0i32);
                pub const KSPROPERTY_EXTDEVICE_VERSION: Self = Self(1i32);
                pub const KSPROPERTY_EXTDEVICE_POWER_STATE: Self = Self(2i32);
                pub const KSPROPERTY_EXTDEVICE_PORT: Self = Self(3i32);
                pub const KSPROPERTY_EXTDEVICE_CAPABILITIES: Self = Self(4i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_EXTDEVICE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_EXTDEVICE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_EXTDEVICE_S {
                pub Property: KSIDENTIFIER,
                pub u: KSPROPERTY_EXTDEVICE_S_0,
            }
            impl KSPROPERTY_EXTDEVICE_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_EXTDEVICE_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union KSPROPERTY_EXTDEVICE_S_0 {
                pub Capabilities: DEVCAPS,
                pub DevPort: u32,
                pub PowerState: u32,
                pub pawchString: [u16; 260],
                pub NodeUniqueID: [u32; 2],
            }
            impl KSPROPERTY_EXTDEVICE_S_0 {}
            unsafe impl ::windows::Abi for KSPROPERTY_EXTDEVICE_S_0 {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_EXTENSION_UNIT(pub i32);
            impl KSPROPERTY_EXTENSION_UNIT {
                pub const KSPROPERTY_EXTENSION_UNIT_INFO: Self = Self(0i32);
                pub const KSPROPERTY_EXTENSION_UNIT_CONTROL: Self = Self(1i32);
                pub const KSPROPERTY_EXTENSION_UNIT_PASS_THROUGH: Self = Self(65535i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_EXTENSION_UNIT {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_EXTENSION_UNIT {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_EXTXPORT(pub i32);
            impl KSPROPERTY_EXTXPORT {
                pub const KSPROPERTY_EXTXPORT_CAPABILITIES: Self = Self(0i32);
                pub const KSPROPERTY_EXTXPORT_INPUT_SIGNAL_MODE: Self = Self(1i32);
                pub const KSPROPERTY_EXTXPORT_OUTPUT_SIGNAL_MODE: Self = Self(2i32);
                pub const KSPROPERTY_EXTXPORT_LOAD_MEDIUM: Self = Self(3i32);
                pub const KSPROPERTY_EXTXPORT_MEDIUM_INFO: Self = Self(4i32);
                pub const KSPROPERTY_EXTXPORT_STATE: Self = Self(5i32);
                pub const KSPROPERTY_EXTXPORT_STATE_NOTIFY: Self = Self(6i32);
                pub const KSPROPERTY_EXTXPORT_TIMECODE_SEARCH: Self = Self(7i32);
                pub const KSPROPERTY_EXTXPORT_ATN_SEARCH: Self = Self(8i32);
                pub const KSPROPERTY_EXTXPORT_RTC_SEARCH: Self = Self(9i32);
                pub const KSPROPERTY_RAW_AVC_CMD: Self = Self(10i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_EXTXPORT {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_EXTXPORT {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MEDIUM_INFO {
                pub MediaPresent: super::SystemServices::BOOL,
                pub MediaType: u32,
                pub RecordInhibit: super::SystemServices::BOOL,
            }
            impl MEDIUM_INFO {}
            impl ::std::default::Default for MEDIUM_INFO {
                fn default() -> Self {
                    Self {
                        MediaPresent: ::std::default::Default::default(),
                        MediaType: 0,
                        RecordInhibit: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for MEDIUM_INFO {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("MEDIUM_INFO")
                        .field("MediaPresent", &format_args!("{:?}", self.MediaPresent))
                        .field("MediaType", &format_args!("{:?}", self.MediaType))
                        .field("RecordInhibit", &format_args!("{:?}", self.RecordInhibit))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for MEDIUM_INFO {
                fn eq(&self, other: &Self) -> bool {
                    self.MediaPresent == other.MediaPresent
                        && self.MediaType == other.MediaType
                        && self.RecordInhibit == other.RecordInhibit
                }
            }
            impl ::std::cmp::Eq for MEDIUM_INFO {}
            unsafe impl ::windows::Abi for MEDIUM_INFO {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct TRANSPORT_STATE {
                pub Mode: u32,
                pub State: u32,
            }
            impl TRANSPORT_STATE {}
            impl ::std::default::Default for TRANSPORT_STATE {
                fn default() -> Self {
                    Self { Mode: 0, State: 0 }
                }
            }
            impl ::std::fmt::Debug for TRANSPORT_STATE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("TRANSPORT_STATE")
                        .field("Mode", &format_args!("{:?}", self.Mode))
                        .field("State", &format_args!("{:?}", self.State))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for TRANSPORT_STATE {
                fn eq(&self, other: &Self) -> bool {
                    self.Mode == other.Mode && self.State == other.State
                }
            }
            impl ::std::cmp::Eq for TRANSPORT_STATE {}
            unsafe impl ::windows::Abi for TRANSPORT_STATE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_EXTXPORT_NODE_S {
                pub NodeProperty: KSP_NODE,
                pub u: KSPROPERTY_EXTXPORT_NODE_S_0,
            }
            impl KSPROPERTY_EXTXPORT_NODE_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_EXTXPORT_NODE_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union KSPROPERTY_EXTXPORT_NODE_S_0 {
                pub Capabilities: u32,
                pub SignalMode: u32,
                pub LoadMedium: u32,
                pub MediumInfo: MEDIUM_INFO,
                pub XPrtState: TRANSPORT_STATE,
                pub Timecode: KSPROPERTY_EXTXPORT_NODE_S_0_1,
                pub dwTimecode: u32,
                pub dwAbsTrackNumber: u32,
                pub RawAVC: KSPROPERTY_EXTXPORT_NODE_S_0_0,
            }
            impl KSPROPERTY_EXTXPORT_NODE_S_0 {}
            unsafe impl ::windows::Abi for KSPROPERTY_EXTXPORT_NODE_S_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_EXTXPORT_NODE_S_0_0 {
                pub PayloadSize: u32,
                pub Payload: [u8; 512],
            }
            impl KSPROPERTY_EXTXPORT_NODE_S_0_0 {}
            impl ::std::default::Default for KSPROPERTY_EXTXPORT_NODE_S_0_0 {
                fn default() -> Self {
                    Self {
                        PayloadSize: 0,
                        Payload: [0; 512],
                    }
                }
            }
            impl ::std::fmt::Debug for KSPROPERTY_EXTXPORT_NODE_S_0_0 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_RawAVC_e__Struct")
                        .field("PayloadSize", &format_args!("{:?}", self.PayloadSize))
                        .field("Payload", &format_args!("{:?}", self.Payload))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSPROPERTY_EXTXPORT_NODE_S_0_0 {
                fn eq(&self, other: &Self) -> bool {
                    self.PayloadSize == other.PayloadSize && self.Payload == other.Payload
                }
            }
            impl ::std::cmp::Eq for KSPROPERTY_EXTXPORT_NODE_S_0_0 {}
            unsafe impl ::windows::Abi for KSPROPERTY_EXTXPORT_NODE_S_0_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_EXTXPORT_NODE_S_0_1 {
                pub frame: u8,
                pub second: u8,
                pub minute: u8,
                pub hour: u8,
            }
            impl KSPROPERTY_EXTXPORT_NODE_S_0_1 {}
            impl ::std::default::Default for KSPROPERTY_EXTXPORT_NODE_S_0_1 {
                fn default() -> Self {
                    Self {
                        frame: 0,
                        second: 0,
                        minute: 0,
                        hour: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSPROPERTY_EXTXPORT_NODE_S_0_1 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_Timecode_e__Struct")
                        .field("frame", &format_args!("{:?}", self.frame))
                        .field("second", &format_args!("{:?}", self.second))
                        .field("minute", &format_args!("{:?}", self.minute))
                        .field("hour", &format_args!("{:?}", self.hour))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSPROPERTY_EXTXPORT_NODE_S_0_1 {
                fn eq(&self, other: &Self) -> bool {
                    self.frame == other.frame
                        && self.second == other.second
                        && self.minute == other.minute
                        && self.hour == other.hour
                }
            }
            impl ::std::cmp::Eq for KSPROPERTY_EXTXPORT_NODE_S_0_1 {}
            unsafe impl ::windows::Abi for KSPROPERTY_EXTXPORT_NODE_S_0_1 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_EXTXPORT_S {
                pub Property: KSIDENTIFIER,
                pub u: KSPROPERTY_EXTXPORT_S_0,
            }
            impl KSPROPERTY_EXTXPORT_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_EXTXPORT_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union KSPROPERTY_EXTXPORT_S_0 {
                pub Capabilities: u32,
                pub SignalMode: u32,
                pub LoadMedium: u32,
                pub MediumInfo: MEDIUM_INFO,
                pub XPrtState: TRANSPORT_STATE,
                pub Timecode: KSPROPERTY_EXTXPORT_S_0_1,
                pub dwTimecode: u32,
                pub dwAbsTrackNumber: u32,
                pub RawAVC: KSPROPERTY_EXTXPORT_S_0_0,
            }
            impl KSPROPERTY_EXTXPORT_S_0 {}
            unsafe impl ::windows::Abi for KSPROPERTY_EXTXPORT_S_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_EXTXPORT_S_0_0 {
                pub PayloadSize: u32,
                pub Payload: [u8; 512],
            }
            impl KSPROPERTY_EXTXPORT_S_0_0 {}
            impl ::std::default::Default for KSPROPERTY_EXTXPORT_S_0_0 {
                fn default() -> Self {
                    Self {
                        PayloadSize: 0,
                        Payload: [0; 512],
                    }
                }
            }
            impl ::std::fmt::Debug for KSPROPERTY_EXTXPORT_S_0_0 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_RawAVC_e__Struct")
                        .field("PayloadSize", &format_args!("{:?}", self.PayloadSize))
                        .field("Payload", &format_args!("{:?}", self.Payload))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSPROPERTY_EXTXPORT_S_0_0 {
                fn eq(&self, other: &Self) -> bool {
                    self.PayloadSize == other.PayloadSize && self.Payload == other.Payload
                }
            }
            impl ::std::cmp::Eq for KSPROPERTY_EXTXPORT_S_0_0 {}
            unsafe impl ::windows::Abi for KSPROPERTY_EXTXPORT_S_0_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_EXTXPORT_S_0_1 {
                pub frame: u8,
                pub second: u8,
                pub minute: u8,
                pub hour: u8,
            }
            impl KSPROPERTY_EXTXPORT_S_0_1 {}
            impl ::std::default::Default for KSPROPERTY_EXTXPORT_S_0_1 {
                fn default() -> Self {
                    Self {
                        frame: 0,
                        second: 0,
                        minute: 0,
                        hour: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSPROPERTY_EXTXPORT_S_0_1 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_Timecode_e__Struct")
                        .field("frame", &format_args!("{:?}", self.frame))
                        .field("second", &format_args!("{:?}", self.second))
                        .field("minute", &format_args!("{:?}", self.minute))
                        .field("hour", &format_args!("{:?}", self.hour))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSPROPERTY_EXTXPORT_S_0_1 {
                fn eq(&self, other: &Self) -> bool {
                    self.frame == other.frame
                        && self.second == other.second
                        && self.minute == other.minute
                        && self.hour == other.hour
                }
            }
            impl ::std::cmp::Eq for KSPROPERTY_EXTXPORT_S_0_1 {}
            unsafe impl ::windows::Abi for KSPROPERTY_EXTXPORT_S_0_1 {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_FMRX_CONTROL(pub i32);
            impl KSPROPERTY_FMRX_CONTROL {
                pub const KSPROPERTY_FMRX_STATE: Self = Self(0i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_FMRX_CONTROL {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_FMRX_CONTROL {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_FMRX_TOPOLOGY(pub i32);
            impl KSPROPERTY_FMRX_TOPOLOGY {
                pub const KSPROPERTY_FMRX_ENDPOINTID: Self = Self(0i32);
                pub const KSPROPERTY_FMRX_VOLUME: Self = Self(1i32);
                pub const KSPROPERTY_FMRX_ANTENNAENDPOINTID: Self = Self(2i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_FMRX_TOPOLOGY {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_FMRX_TOPOLOGY {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_GENERAL(pub i32);
            impl KSPROPERTY_GENERAL {
                pub const KSPROPERTY_GENERAL_COMPONENTID: Self = Self(0i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_GENERAL {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_GENERAL {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_HRTF3D(pub i32);
            impl KSPROPERTY_HRTF3D {
                pub const KSPROPERTY_HRTF3D_PARAMS: Self = Self(0i32);
                pub const KSPROPERTY_HRTF3D_INITIALIZE: Self = Self(1i32);
                pub const KSPROPERTY_HRTF3D_FILTER_FORMAT: Self = Self(2i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_HRTF3D {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_HRTF3D {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_INTERLEAVEDAUDIO(pub i32);
            impl KSPROPERTY_INTERLEAVEDAUDIO {
                pub const KSPROPERTY_INTERLEAVEDAUDIO_FORMATINFORMATION: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_INTERLEAVEDAUDIO {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_INTERLEAVEDAUDIO {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_ITD3D(pub i32);
            impl KSPROPERTY_ITD3D {
                pub const KSPROPERTY_ITD3D_PARAMS: Self = Self(0i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_ITD3D {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_ITD3D {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_JACK(pub i32);
            impl KSPROPERTY_JACK {
                pub const KSPROPERTY_JACK_DESCRIPTION: Self = Self(1i32);
                pub const KSPROPERTY_JACK_DESCRIPTION2: Self = Self(2i32);
                pub const KSPROPERTY_JACK_SINK_INFO: Self = Self(3i32);
                pub const KSPROPERTY_JACK_CONTAINERID: Self = Self(4i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_JACK {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_JACK {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_MEDIAAVAILABLE {
                pub Earliest: i64,
                pub Latest: i64,
            }
            impl KSPROPERTY_MEDIAAVAILABLE {}
            impl ::std::default::Default for KSPROPERTY_MEDIAAVAILABLE {
                fn default() -> Self {
                    Self {
                        Earliest: 0,
                        Latest: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSPROPERTY_MEDIAAVAILABLE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSPROPERTY_MEDIAAVAILABLE")
                        .field("Earliest", &format_args!("{:?}", self.Earliest))
                        .field("Latest", &format_args!("{:?}", self.Latest))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSPROPERTY_MEDIAAVAILABLE {
                fn eq(&self, other: &Self) -> bool {
                    self.Earliest == other.Earliest && self.Latest == other.Latest
                }
            }
            impl ::std::cmp::Eq for KSPROPERTY_MEDIAAVAILABLE {}
            unsafe impl ::windows::Abi for KSPROPERTY_MEDIAAVAILABLE {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_MEDIASEEKING(pub i32);
            impl KSPROPERTY_MEDIASEEKING {
                pub const KSPROPERTY_MEDIASEEKING_CAPABILITIES: Self = Self(0i32);
                pub const KSPROPERTY_MEDIASEEKING_FORMATS: Self = Self(1i32);
                pub const KSPROPERTY_MEDIASEEKING_TIMEFORMAT: Self = Self(2i32);
                pub const KSPROPERTY_MEDIASEEKING_POSITION: Self = Self(3i32);
                pub const KSPROPERTY_MEDIASEEKING_STOPPOSITION: Self = Self(4i32);
                pub const KSPROPERTY_MEDIASEEKING_POSITIONS: Self = Self(5i32);
                pub const KSPROPERTY_MEDIASEEKING_DURATION: Self = Self(6i32);
                pub const KSPROPERTY_MEDIASEEKING_AVAILABLE: Self = Self(7i32);
                pub const KSPROPERTY_MEDIASEEKING_PREROLL: Self = Self(8i32);
                pub const KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT: Self = Self(9i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_MEDIASEEKING {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_MEDIASEEKING {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_MEMBERSHEADER {
                pub MembersFlags: u32,
                pub MembersSize: u32,
                pub MembersCount: u32,
                pub Flags: u32,
            }
            impl KSPROPERTY_MEMBERSHEADER {}
            impl ::std::default::Default for KSPROPERTY_MEMBERSHEADER {
                fn default() -> Self {
                    Self {
                        MembersFlags: 0,
                        MembersSize: 0,
                        MembersCount: 0,
                        Flags: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSPROPERTY_MEMBERSHEADER {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSPROPERTY_MEMBERSHEADER")
                        .field("MembersFlags", &format_args!("{:?}", self.MembersFlags))
                        .field("MembersSize", &format_args!("{:?}", self.MembersSize))
                        .field("MembersCount", &format_args!("{:?}", self.MembersCount))
                        .field("Flags", &format_args!("{:?}", self.Flags))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSPROPERTY_MEMBERSHEADER {
                fn eq(&self, other: &Self) -> bool {
                    self.MembersFlags == other.MembersFlags
                        && self.MembersSize == other.MembersSize
                        && self.MembersCount == other.MembersCount
                        && self.Flags == other.Flags
                }
            }
            impl ::std::cmp::Eq for KSPROPERTY_MEMBERSHEADER {}
            unsafe impl ::windows::Abi for KSPROPERTY_MEMBERSHEADER {
                type Abi = Self;
            }
            pub const KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_MULTICHANNEL: u32 = 2u32;
            pub const KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_UNIFORM: u32 = 4u32;
            pub const KSPROPERTY_MEMBER_FLAG_DEFAULT: u32 = 1u32;
            pub const KSPROPERTY_MEMBER_RANGES: u32 = 1u32;
            pub const KSPROPERTY_MEMBER_STEPPEDRANGES: u32 = 2u32;
            pub const KSPROPERTY_MEMBER_VALUES: u32 = 3u32;
            pub const KSPROPERTY_MEMORY_TRANSPORT: i32 = 1i32;
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_MPEG2VID(pub i32);
            impl KSPROPERTY_MPEG2VID {
                pub const KSPROPERTY_MPEG2VID_MODES: Self = Self(0i32);
                pub const KSPROPERTY_MPEG2VID_CUR_MODE: Self = Self(1i32);
                pub const KSPROPERTY_MPEG2VID_4_3_RECT: Self = Self(2i32);
                pub const KSPROPERTY_MPEG2VID_16_9_RECT: Self = Self(3i32);
                pub const KSPROPERTY_MPEG2VID_16_9_PANSCAN: Self = Self(4i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_MPEG2VID {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_MPEG2VID {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_MPEG4_MEDIATYPE_ATTRIBUTES(pub i32);
            impl KSPROPERTY_MPEG4_MEDIATYPE_ATTRIBUTES {
                pub const KSPROPERTY_MPEG4_MEDIATYPE_SD_BOX: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_MPEG4_MEDIATYPE_ATTRIBUTES {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_MPEG4_MEDIATYPE_ATTRIBUTES {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_NETWORKCAMERACONTROL_NTPINFO_TYPE(pub i32);
            impl KSPROPERTY_NETWORKCAMERACONTROL_NTPINFO_TYPE {
                pub const KSPROPERTY_NETWORKCAMERACONTROL_NTPINFO_TYPE_DISABLE: Self = Self(0i32);
                pub const KSPROPERTY_NETWORKCAMERACONTROL_NTPINFO_TYPE_HOSTNTP: Self = Self(1i32);
                pub const KSPROPERYT_NETWORKCAMERACONTROL_NTPINFO_TYPE_CUSTOM: Self = Self(2i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_NETWORKCAMERACONTROL_NTPINFO_TYPE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_NETWORKCAMERACONTROL_NTPINFO_TYPE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_NETWORKCAMERACONTROL_NTPINFO_HEADER {
                pub Size: u32,
                pub Type: KSPROPERTY_NETWORKCAMERACONTROL_NTPINFO_TYPE,
            }
            impl KSPROPERTY_NETWORKCAMERACONTROL_NTPINFO_HEADER {}
            impl ::std::default::Default for KSPROPERTY_NETWORKCAMERACONTROL_NTPINFO_HEADER {
                fn default() -> Self {
                    Self {
                        Size: 0,
                        Type: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for KSPROPERTY_NETWORKCAMERACONTROL_NTPINFO_HEADER {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSPROPERTY_NETWORKCAMERACONTROL_NTPINFO_HEADER")
                        .field("Size", &format_args!("{:?}", self.Size))
                        .field("Type", &format_args!("{:?}", self.Type))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSPROPERTY_NETWORKCAMERACONTROL_NTPINFO_HEADER {
                fn eq(&self, other: &Self) -> bool {
                    self.Size == other.Size && self.Type == other.Type
                }
            }
            impl ::std::cmp::Eq for KSPROPERTY_NETWORKCAMERACONTROL_NTPINFO_HEADER {}
            unsafe impl ::windows::Abi for KSPROPERTY_NETWORKCAMERACONTROL_NTPINFO_HEADER {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_NETWORKCAMERACONTROL_PROPERTY(pub i32);
            impl KSPROPERTY_NETWORKCAMERACONTROL_PROPERTY {
                pub const KSPROPERTY_NETWORKCAMERACONTROL_NTP: Self = Self(0i32);
                pub const KSPROPERTY_NETWORKCAMERACONTROL_URI: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_NETWORKCAMERACONTROL_PROPERTY {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_NETWORKCAMERACONTROL_PROPERTY {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_OVERLAYUPDATE(pub i32);
            impl KSPROPERTY_OVERLAYUPDATE {
                pub const KSPROPERTY_OVERLAYUPDATE_INTERESTS: Self = Self(0i32);
                pub const KSPROPERTY_OVERLAYUPDATE_CLIPLIST: Self = Self(1i32);
                pub const KSPROPERTY_OVERLAYUPDATE_PALETTE: Self = Self(2i32);
                pub const KSPROPERTY_OVERLAYUPDATE_COLORKEY: Self = Self(4i32);
                pub const KSPROPERTY_OVERLAYUPDATE_VIDEOPOSITION: Self = Self(8i32);
                pub const KSPROPERTY_OVERLAYUPDATE_DISPLAYCHANGE: Self = Self(16i32);
                pub const KSPROPERTY_OVERLAYUPDATE_COLORREF: Self = Self(268435456i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_OVERLAYUPDATE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_OVERLAYUPDATE {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_PIN(pub i32);
            impl KSPROPERTY_PIN {
                pub const KSPROPERTY_PIN_CINSTANCES: Self = Self(0i32);
                pub const KSPROPERTY_PIN_CTYPES: Self = Self(1i32);
                pub const KSPROPERTY_PIN_DATAFLOW: Self = Self(2i32);
                pub const KSPROPERTY_PIN_DATARANGES: Self = Self(3i32);
                pub const KSPROPERTY_PIN_DATAINTERSECTION: Self = Self(4i32);
                pub const KSPROPERTY_PIN_INTERFACES: Self = Self(5i32);
                pub const KSPROPERTY_PIN_MEDIUMS: Self = Self(6i32);
                pub const KSPROPERTY_PIN_COMMUNICATION: Self = Self(7i32);
                pub const KSPROPERTY_PIN_GLOBALCINSTANCES: Self = Self(8i32);
                pub const KSPROPERTY_PIN_NECESSARYINSTANCES: Self = Self(9i32);
                pub const KSPROPERTY_PIN_PHYSICALCONNECTION: Self = Self(10i32);
                pub const KSPROPERTY_PIN_CATEGORY: Self = Self(11i32);
                pub const KSPROPERTY_PIN_NAME: Self = Self(12i32);
                pub const KSPROPERTY_PIN_CONSTRAINEDDATARANGES: Self = Self(13i32);
                pub const KSPROPERTY_PIN_PROPOSEDATAFORMAT: Self = Self(14i32);
                pub const KSPROPERTY_PIN_PROPOSEDATAFORMAT2: Self = Self(15i32);
                pub const KSPROPERTY_PIN_MODEDATAFORMATS: Self = Self(16i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_PIN {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_PIN {
                type Abi = Self;
            }
            pub const KSPROPERTY_PIN_FLAGS_ATTRIBUTE_RANGE_AWARE: u32 = 1u32;
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KS_SEEKING_FLAGS(pub i32);
            impl KS_SEEKING_FLAGS {
                pub const KS_SEEKING_NoPositioning: Self = Self(0i32);
                pub const KS_SEEKING_AbsolutePositioning: Self = Self(1i32);
                pub const KS_SEEKING_RelativePositioning: Self = Self(2i32);
                pub const KS_SEEKING_IncrementalPositioning: Self = Self(3i32);
                pub const KS_SEEKING_PositioningBitsMask: Self = Self(3i32);
                pub const KS_SEEKING_SeekToKeyFrame: Self = Self(4i32);
                pub const KS_SEEKING_ReturnTime: Self = Self(8i32);
            }
            impl ::std::convert::From<i32> for KS_SEEKING_FLAGS {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KS_SEEKING_FLAGS {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_POSITIONS {
                pub Current: i64,
                pub Stop: i64,
                pub CurrentFlags: KS_SEEKING_FLAGS,
                pub StopFlags: KS_SEEKING_FLAGS,
            }
            impl KSPROPERTY_POSITIONS {}
            impl ::std::default::Default for KSPROPERTY_POSITIONS {
                fn default() -> Self {
                    Self {
                        Current: 0,
                        Stop: 0,
                        CurrentFlags: ::std::default::Default::default(),
                        StopFlags: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for KSPROPERTY_POSITIONS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSPROPERTY_POSITIONS")
                        .field("Current", &format_args!("{:?}", self.Current))
                        .field("Stop", &format_args!("{:?}", self.Stop))
                        .field("CurrentFlags", &format_args!("{:?}", self.CurrentFlags))
                        .field("StopFlags", &format_args!("{:?}", self.StopFlags))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSPROPERTY_POSITIONS {
                fn eq(&self, other: &Self) -> bool {
                    self.Current == other.Current
                        && self.Stop == other.Stop
                        && self.CurrentFlags == other.CurrentFlags
                        && self.StopFlags == other.StopFlags
                }
            }
            impl ::std::cmp::Eq for KSPROPERTY_POSITIONS {}
            unsafe impl ::windows::Abi for KSPROPERTY_POSITIONS {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_QUALITY(pub i32);
            impl KSPROPERTY_QUALITY {
                pub const KSPROPERTY_QUALITY_REPORT: Self = Self(0i32);
                pub const KSPROPERTY_QUALITY_ERROR: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_QUALITY {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_QUALITY {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_RTAUDIO(pub i32);
            impl KSPROPERTY_RTAUDIO {
                pub const KSPROPERTY_RTAUDIO_GETPOSITIONFUNCTION: Self = Self(0i32);
                pub const KSPROPERTY_RTAUDIO_BUFFER: Self = Self(1i32);
                pub const KSPROPERTY_RTAUDIO_HWLATENCY: Self = Self(2i32);
                pub const KSPROPERTY_RTAUDIO_POSITIONREGISTER: Self = Self(3i32);
                pub const KSPROPERTY_RTAUDIO_CLOCKREGISTER: Self = Self(4i32);
                pub const KSPROPERTY_RTAUDIO_BUFFER_WITH_NOTIFICATION: Self = Self(5i32);
                pub const KSPROPERTY_RTAUDIO_REGISTER_NOTIFICATION_EVENT: Self = Self(6i32);
                pub const KSPROPERTY_RTAUDIO_UNREGISTER_NOTIFICATION_EVENT: Self = Self(7i32);
                pub const KSPROPERTY_RTAUDIO_QUERY_NOTIFICATION_SUPPORT: Self = Self(8i32);
                pub const KSPROPERTY_RTAUDIO_PACKETCOUNT: Self = Self(9i32);
                pub const KSPROPERTY_RTAUDIO_PRESENTATION_POSITION: Self = Self(10i32);
                pub const KSPROPERTY_RTAUDIO_GETREADPACKET: Self = Self(11i32);
                pub const KSPROPERTY_RTAUDIO_SETWRITEPACKET: Self = Self(12i32);
                pub const KSPROPERTY_RTAUDIO_PACKETVREGISTER: Self = Self(13i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_RTAUDIO {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_RTAUDIO {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_SELECTOR_NODE_S {
                pub NodeProperty: KSP_NODE,
                pub Value: i32,
                pub Flags: u32,
                pub Capabilities: u32,
            }
            impl KSPROPERTY_SELECTOR_NODE_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_SELECTOR_NODE_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_SELECTOR_S {
                pub Property: KSIDENTIFIER,
                pub Value: i32,
                pub Flags: u32,
                pub Capabilities: u32,
            }
            impl KSPROPERTY_SELECTOR_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_SELECTOR_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_SERIAL {
                pub PropTypeSet: KSIDENTIFIER,
                pub Id: u32,
                pub PropertyLength: u32,
            }
            impl KSPROPERTY_SERIAL {}
            unsafe impl ::windows::Abi for KSPROPERTY_SERIAL {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_SERIALHDR {
                pub PropertySet: ::windows::Guid,
                pub Count: u32,
            }
            impl KSPROPERTY_SERIALHDR {}
            unsafe impl ::windows::Abi for KSPROPERTY_SERIALHDR {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_SOUNDDETECTOR(pub i32);
            impl KSPROPERTY_SOUNDDETECTOR {
                pub const KSPROPERTY_SOUNDDETECTOR_SUPPORTEDPATTERNS: Self = Self(1i32);
                pub const KSPROPERTY_SOUNDDETECTOR_PATTERNS: Self = Self(2i32);
                pub const KSPROPERTY_SOUNDDETECTOR_ARMED: Self = Self(3i32);
                pub const KSPROPERTY_SOUNDDETECTOR_MATCHRESULT: Self = Self(4i32);
                pub const KSPROPERTY_SOUNDDETECTOR_RESET: Self = Self(5i32);
                pub const KSPROPERTY_SOUNDDETECTOR_STREAMINGSUPPORT: Self = Self(6i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_SOUNDDETECTOR {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_SOUNDDETECTOR {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_COLCON {
                pub _bitfield1: u8,
                pub _bitfield2: u8,
                pub _bitfield3: u8,
                pub _bitfield4: u8,
            }
            impl KS_COLCON {}
            impl ::std::default::Default for KS_COLCON {
                fn default() -> Self {
                    Self {
                        _bitfield1: 0,
                        _bitfield2: 0,
                        _bitfield3: 0,
                        _bitfield4: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KS_COLCON {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_COLCON")
                        .field("_bitfield1", &format_args!("{:?}", self._bitfield1))
                        .field("_bitfield2", &format_args!("{:?}", self._bitfield2))
                        .field("_bitfield3", &format_args!("{:?}", self._bitfield3))
                        .field("_bitfield4", &format_args!("{:?}", self._bitfield4))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_COLCON {
                fn eq(&self, other: &Self) -> bool {
                    self._bitfield1 == other._bitfield1
                        && self._bitfield2 == other._bitfield2
                        && self._bitfield3 == other._bitfield3
                        && self._bitfield4 == other._bitfield4
                }
            }
            impl ::std::cmp::Eq for KS_COLCON {}
            unsafe impl ::windows::Abi for KS_COLCON {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_SPHLI {
                pub HLISS: u16,
                pub Reserved: u16,
                pub StartPTM: u32,
                pub EndPTM: u32,
                pub StartX: u16,
                pub StartY: u16,
                pub StopX: u16,
                pub StopY: u16,
                pub ColCon: KS_COLCON,
            }
            impl KSPROPERTY_SPHLI {}
            impl ::std::default::Default for KSPROPERTY_SPHLI {
                fn default() -> Self {
                    Self {
                        HLISS: 0,
                        Reserved: 0,
                        StartPTM: 0,
                        EndPTM: 0,
                        StartX: 0,
                        StartY: 0,
                        StopX: 0,
                        StopY: 0,
                        ColCon: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for KSPROPERTY_SPHLI {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSPROPERTY_SPHLI")
                        .field("HLISS", &format_args!("{:?}", self.HLISS))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .field("StartPTM", &format_args!("{:?}", self.StartPTM))
                        .field("EndPTM", &format_args!("{:?}", self.EndPTM))
                        .field("StartX", &format_args!("{:?}", self.StartX))
                        .field("StartY", &format_args!("{:?}", self.StartY))
                        .field("StopX", &format_args!("{:?}", self.StopX))
                        .field("StopY", &format_args!("{:?}", self.StopY))
                        .field("ColCon", &format_args!("{:?}", self.ColCon))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSPROPERTY_SPHLI {
                fn eq(&self, other: &Self) -> bool {
                    self.HLISS == other.HLISS
                        && self.Reserved == other.Reserved
                        && self.StartPTM == other.StartPTM
                        && self.EndPTM == other.EndPTM
                        && self.StartX == other.StartX
                        && self.StartY == other.StartY
                        && self.StopX == other.StopX
                        && self.StopY == other.StopY
                        && self.ColCon == other.ColCon
                }
            }
            impl ::std::cmp::Eq for KSPROPERTY_SPHLI {}
            unsafe impl ::windows::Abi for KSPROPERTY_SPHLI {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_DVD_YUV {
                pub Reserved: u8,
                pub Y: u8,
                pub V: u8,
                pub U: u8,
            }
            impl KS_DVD_YUV {}
            impl ::std::default::Default for KS_DVD_YUV {
                fn default() -> Self {
                    Self {
                        Reserved: 0,
                        Y: 0,
                        V: 0,
                        U: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KS_DVD_YUV {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_DVD_YUV")
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .field("Y", &format_args!("{:?}", self.Y))
                        .field("V", &format_args!("{:?}", self.V))
                        .field("U", &format_args!("{:?}", self.U))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_DVD_YUV {
                fn eq(&self, other: &Self) -> bool {
                    self.Reserved == other.Reserved
                        && self.Y == other.Y
                        && self.V == other.V
                        && self.U == other.U
                }
            }
            impl ::std::cmp::Eq for KS_DVD_YUV {}
            unsafe impl ::windows::Abi for KS_DVD_YUV {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_SPPAL {
                pub sppal: [KS_DVD_YUV; 16],
            }
            impl KSPROPERTY_SPPAL {}
            impl ::std::default::Default for KSPROPERTY_SPPAL {
                fn default() -> Self {
                    Self {
                        sppal: [::std::default::Default::default(); 16],
                    }
                }
            }
            impl ::std::fmt::Debug for KSPROPERTY_SPPAL {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSPROPERTY_SPPAL")
                        .field("sppal", &format_args!("{:?}", self.sppal))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSPROPERTY_SPPAL {
                fn eq(&self, other: &Self) -> bool {
                    self.sppal == other.sppal
                }
            }
            impl ::std::cmp::Eq for KSPROPERTY_SPPAL {}
            unsafe impl ::windows::Abi for KSPROPERTY_SPPAL {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_STEPPING_LONG {
                pub SteppingDelta: u32,
                pub Reserved: u32,
                pub Bounds: KSPROPERTY_BOUNDS_LONG,
            }
            impl KSPROPERTY_STEPPING_LONG {}
            unsafe impl ::windows::Abi for KSPROPERTY_STEPPING_LONG {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_STEPPING_LONGLONG {
                pub SteppingDelta: u64,
                pub Bounds: KSPROPERTY_BOUNDS_LONGLONG,
            }
            impl KSPROPERTY_STEPPING_LONGLONG {}
            unsafe impl ::windows::Abi for KSPROPERTY_STEPPING_LONGLONG {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_STREAM(pub i32);
            impl KSPROPERTY_STREAM {
                pub const KSPROPERTY_STREAM_ALLOCATOR: Self = Self(0i32);
                pub const KSPROPERTY_STREAM_QUALITY: Self = Self(1i32);
                pub const KSPROPERTY_STREAM_DEGRADATION: Self = Self(2i32);
                pub const KSPROPERTY_STREAM_MASTERCLOCK: Self = Self(3i32);
                pub const KSPROPERTY_STREAM_TIMEFORMAT: Self = Self(4i32);
                pub const KSPROPERTY_STREAM_PRESENTATIONTIME: Self = Self(5i32);
                pub const KSPROPERTY_STREAM_PRESENTATIONEXTENT: Self = Self(6i32);
                pub const KSPROPERTY_STREAM_FRAMETIME: Self = Self(7i32);
                pub const KSPROPERTY_STREAM_RATECAPABILITY: Self = Self(8i32);
                pub const KSPROPERTY_STREAM_RATE: Self = Self(9i32);
                pub const KSPROPERTY_STREAM_PIPE_ID: Self = Self(10i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_STREAM {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_STREAM {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_STREAMINTERFACE(pub i32);
            impl KSPROPERTY_STREAMINTERFACE {
                pub const KSPROPERTY_STREAMINTERFACE_HEADERSIZE: Self = Self(0i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_STREAMINTERFACE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_STREAMINTERFACE {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_TELEPHONY_CONTROL(pub i32);
            impl KSPROPERTY_TELEPHONY_CONTROL {
                pub const KSPROPERTY_TELEPHONY_PROVIDERID: Self = Self(0i32);
                pub const KSPROPERTY_TELEPHONY_CALLINFO: Self = Self(1i32);
                pub const KSPROPERTY_TELEPHONY_CALLCONTROL: Self = Self(2i32);
                pub const KSPROPERTY_TELEPHONY_PROVIDERCHANGE: Self = Self(3i32);
                pub const KSPROPERTY_TELEPHONY_CALLHOLD: Self = Self(4i32);
                pub const KSPROPERTY_TELEPHONY_MUTE_TX: Self = Self(5i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_TELEPHONY_CONTROL {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_TELEPHONY_CONTROL {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_TELEPHONY_TOPOLOGY(pub i32);
            impl KSPROPERTY_TELEPHONY_TOPOLOGY {
                pub const KSPROPERTY_TELEPHONY_ENDPOINTIDPAIR: Self = Self(0i32);
                pub const KSPROPERTY_TELEPHONY_VOLUME: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_TELEPHONY_TOPOLOGY {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_TELEPHONY_TOPOLOGY {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_TIMECODE(pub i32);
            impl KSPROPERTY_TIMECODE {
                pub const KSPROPERTY_TIMECODE_READER: Self = Self(0i32);
                pub const KSPROPERTY_ATN_READER: Self = Self(1i32);
                pub const KSPROPERTY_RTC_READER: Self = Self(2i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_TIMECODE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_TIMECODE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_TIMECODE_NODE_S {
                pub NodeProperty: KSP_NODE,
                pub TimecodeSamp: super::DirectShow::TIMECODE_SAMPLE,
            }
            impl KSPROPERTY_TIMECODE_NODE_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_TIMECODE_NODE_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_TIMECODE_S {
                pub Property: KSIDENTIFIER,
                pub TimecodeSamp: super::DirectShow::TIMECODE_SAMPLE,
            }
            impl KSPROPERTY_TIMECODE_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_TIMECODE_S {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_TOPOLOGY(pub i32);
            impl KSPROPERTY_TOPOLOGY {
                pub const KSPROPERTY_TOPOLOGY_CATEGORIES: Self = Self(0i32);
                pub const KSPROPERTY_TOPOLOGY_NODES: Self = Self(1i32);
                pub const KSPROPERTY_TOPOLOGY_CONNECTIONS: Self = Self(2i32);
                pub const KSPROPERTY_TOPOLOGY_NAME: Self = Self(3i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_TOPOLOGY {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_TOPOLOGY {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_TOPOLOGYNODE(pub i32);
            impl KSPROPERTY_TOPOLOGYNODE {
                pub const KSPROPERTY_TOPOLOGYNODE_ENABLE: Self = Self(1i32);
                pub const KSPROPERTY_TOPOLOGYNODE_RESET: Self = Self(2i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_TOPOLOGYNODE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_TOPOLOGYNODE {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_TUNER(pub i32);
            impl KSPROPERTY_TUNER {
                pub const KSPROPERTY_TUNER_CAPS: Self = Self(0i32);
                pub const KSPROPERTY_TUNER_MODE_CAPS: Self = Self(1i32);
                pub const KSPROPERTY_TUNER_MODE: Self = Self(2i32);
                pub const KSPROPERTY_TUNER_STANDARD: Self = Self(3i32);
                pub const KSPROPERTY_TUNER_FREQUENCY: Self = Self(4i32);
                pub const KSPROPERTY_TUNER_INPUT: Self = Self(5i32);
                pub const KSPROPERTY_TUNER_STATUS: Self = Self(6i32);
                pub const KSPROPERTY_TUNER_IF_MEDIUM: Self = Self(7i32);
                pub const KSPROPERTY_TUNER_SCAN_CAPS: Self = Self(8i32);
                pub const KSPROPERTY_TUNER_SCAN_STATUS: Self = Self(9i32);
                pub const KSPROPERTY_TUNER_STANDARD_MODE: Self = Self(10i32);
                pub const KSPROPERTY_TUNER_NETWORKTYPE_SCAN_CAPS: Self = Self(11i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_TUNER {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_TUNER {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_TUNER_CAPS_S {
                pub Property: KSIDENTIFIER,
                pub ModesSupported: u32,
                pub VideoMedium: KSIDENTIFIER,
                pub TVAudioMedium: KSIDENTIFIER,
                pub RadioAudioMedium: KSIDENTIFIER,
            }
            impl KSPROPERTY_TUNER_CAPS_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_TUNER_CAPS_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_TUNER_FREQUENCY_S {
                pub Property: KSIDENTIFIER,
                pub Frequency: u32,
                pub LastFrequency: u32,
                pub TuningFlags: u32,
                pub VideoSubChannel: u32,
                pub AudioSubChannel: u32,
                pub Channel: u32,
                pub Country: u32,
            }
            impl KSPROPERTY_TUNER_FREQUENCY_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_TUNER_FREQUENCY_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_TUNER_IF_MEDIUM_S {
                pub Property: KSIDENTIFIER,
                pub IFMedium: KSIDENTIFIER,
            }
            impl KSPROPERTY_TUNER_IF_MEDIUM_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_TUNER_IF_MEDIUM_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_TUNER_INPUT_S {
                pub Property: KSIDENTIFIER,
                pub InputIndex: u32,
            }
            impl KSPROPERTY_TUNER_INPUT_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_TUNER_INPUT_S {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_TUNER_MODES(pub i32);
            impl KSPROPERTY_TUNER_MODES {
                pub const KSPROPERTY_TUNER_MODE_TV: Self = Self(1i32);
                pub const KSPROPERTY_TUNER_MODE_FM_RADIO: Self = Self(2i32);
                pub const KSPROPERTY_TUNER_MODE_AM_RADIO: Self = Self(4i32);
                pub const KSPROPERTY_TUNER_MODE_DSS: Self = Self(8i32);
                pub const KSPROPERTY_TUNER_MODE_ATSC: Self = Self(16i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_TUNER_MODES {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_TUNER_MODES {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_TUNER_MODE_CAPS_S {
                pub Property: KSIDENTIFIER,
                pub Mode: u32,
                pub StandardsSupported: u32,
                pub MinFrequency: u32,
                pub MaxFrequency: u32,
                pub TuningGranularity: u32,
                pub NumberOfInputs: u32,
                pub SettlingTime: u32,
                pub Strategy: u32,
            }
            impl KSPROPERTY_TUNER_MODE_CAPS_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_TUNER_MODE_CAPS_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_TUNER_MODE_S {
                pub Property: KSIDENTIFIER,
                pub Mode: u32,
            }
            impl KSPROPERTY_TUNER_MODE_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_TUNER_MODE_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_TUNER_NETWORKTYPE_SCAN_CAPS_S {
                pub Property: KSIDENTIFIER,
                pub NetworkType: ::windows::Guid,
                pub BufferSize: u32,
                pub NetworkTunerCapabilities: *mut ::std::ffi::c_void,
            }
            impl KSPROPERTY_TUNER_NETWORKTYPE_SCAN_CAPS_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_TUNER_NETWORKTYPE_SCAN_CAPS_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_TUNER_SCAN_CAPS_S {
                pub Property: KSIDENTIFIER,
                pub fSupportsHardwareAssistedScanning: super::SystemServices::BOOL,
                pub SupportedBroadcastStandards: u32,
                pub GUIDBucket: *mut ::std::ffi::c_void,
                pub lengthofBucket: u32,
            }
            impl KSPROPERTY_TUNER_SCAN_CAPS_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_TUNER_SCAN_CAPS_S {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct _TunerDecoderLockType(pub i32);
            impl _TunerDecoderLockType {
                pub const Tuner_LockType_None: Self = Self(0i32);
                pub const Tuner_LockType_Within_Scan_Sensing_Range: Self = Self(1i32);
                pub const Tuner_LockType_Locked: Self = Self(2i32);
            }
            impl ::std::convert::From<i32> for _TunerDecoderLockType {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for _TunerDecoderLockType {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_TUNER_SCAN_STATUS_S {
                pub Property: KSIDENTIFIER,
                pub LockStatus: _TunerDecoderLockType,
                pub CurrentFrequency: u32,
            }
            impl KSPROPERTY_TUNER_SCAN_STATUS_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_TUNER_SCAN_STATUS_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_TUNER_STANDARD_MODE_S {
                pub Property: KSIDENTIFIER,
                pub AutoDetect: super::SystemServices::BOOL,
            }
            impl KSPROPERTY_TUNER_STANDARD_MODE_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_TUNER_STANDARD_MODE_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_TUNER_STANDARD_S {
                pub Property: KSIDENTIFIER,
                pub Standard: u32,
            }
            impl KSPROPERTY_TUNER_STANDARD_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_TUNER_STANDARD_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_TUNER_STATUS_S {
                pub Property: KSIDENTIFIER,
                pub CurrentFrequency: u32,
                pub PLLOffset: u32,
                pub SignalStrength: u32,
                pub Busy: u32,
            }
            impl KSPROPERTY_TUNER_STATUS_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_TUNER_STATUS_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_TVAUDIO_CAPS_S {
                pub Property: KSIDENTIFIER,
                pub Capabilities: u32,
                pub InputMedium: KSIDENTIFIER,
                pub OutputMedium: KSIDENTIFIER,
            }
            impl KSPROPERTY_TVAUDIO_CAPS_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_TVAUDIO_CAPS_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_TVAUDIO_S {
                pub Property: KSIDENTIFIER,
                pub Mode: u32,
            }
            impl KSPROPERTY_TVAUDIO_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_TVAUDIO_S {
                type Abi = Self;
            }
            pub const KSPROPERTY_TYPE_BASICSUPPORT: u32 = 512u32;
            pub const KSPROPERTY_TYPE_COPYPAYLOAD: u32 = 2147483648u32;
            pub const KSPROPERTY_TYPE_DEFAULTVALUES: u32 = 65536u32;
            pub const KSPROPERTY_TYPE_FSFILTERSCOPE: u32 = 1073741824u32;
            pub const KSPROPERTY_TYPE_GET: u32 = 1u32;
            pub const KSPROPERTY_TYPE_GETPAYLOADSIZE: u32 = 4u32;
            pub const KSPROPERTY_TYPE_HIGHPRIORITY: u32 = 134217728u32;
            pub const KSPROPERTY_TYPE_RELATIONS: u32 = 1024u32;
            pub const KSPROPERTY_TYPE_SERIALIZERAW: u32 = 8192u32;
            pub const KSPROPERTY_TYPE_SERIALIZESET: u32 = 2048u32;
            pub const KSPROPERTY_TYPE_SERIALIZESIZE: u32 = 32768u32;
            pub const KSPROPERTY_TYPE_SET: u32 = 2u32;
            pub const KSPROPERTY_TYPE_SETSUPPORT: u32 = 256u32;
            pub const KSPROPERTY_TYPE_TOPOLOGY: u32 = 268435456u32;
            pub const KSPROPERTY_TYPE_UNSERIALIZERAW: u32 = 16384u32;
            pub const KSPROPERTY_TYPE_UNSERIALIZESET: u32 = 4096u32;
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_VBICAP(pub i32);
            impl KSPROPERTY_VBICAP {
                pub const KSPROPERTY_VBICAP_PROPERTIES_PROTECTION: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_VBICAP {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_VBICAP {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_VBICODECFILTERING(pub i32);
            impl KSPROPERTY_VBICODECFILTERING {
                pub const KSPROPERTY_VBICODECFILTERING_SCANLINES_REQUESTED_BIT_ARRAY: Self =
                    Self(1i32);
                pub const KSPROPERTY_VBICODECFILTERING_SCANLINES_DISCOVERED_BIT_ARRAY: Self =
                    Self(2i32);
                pub const KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_REQUESTED_BIT_ARRAY: Self =
                    Self(3i32);
                pub const KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_DISCOVERED_BIT_ARRAY: Self =
                    Self(4i32);
                pub const KSPROPERTY_VBICODECFILTERING_STATISTICS: Self = Self(5i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_VBICODECFILTERING {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_VBICODECFILTERING {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct VBICODECFILTERING_CC_SUBSTREAMS {
                pub SubstreamMask: u32,
            }
            impl VBICODECFILTERING_CC_SUBSTREAMS {}
            impl ::std::default::Default for VBICODECFILTERING_CC_SUBSTREAMS {
                fn default() -> Self {
                    Self { SubstreamMask: 0 }
                }
            }
            impl ::std::fmt::Debug for VBICODECFILTERING_CC_SUBSTREAMS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("VBICODECFILTERING_CC_SUBSTREAMS")
                        .field("SubstreamMask", &format_args!("{:?}", self.SubstreamMask))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for VBICODECFILTERING_CC_SUBSTREAMS {
                fn eq(&self, other: &Self) -> bool {
                    self.SubstreamMask == other.SubstreamMask
                }
            }
            impl ::std::cmp::Eq for VBICODECFILTERING_CC_SUBSTREAMS {}
            unsafe impl ::windows::Abi for VBICODECFILTERING_CC_SUBSTREAMS {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_VBICODECFILTERING_CC_SUBSTREAMS_S {
                pub Property: KSIDENTIFIER,
                pub Substreams: VBICODECFILTERING_CC_SUBSTREAMS,
            }
            impl KSPROPERTY_VBICODECFILTERING_CC_SUBSTREAMS_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_VBICODECFILTERING_CC_SUBSTREAMS_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct VBICODECFILTERING_NABTS_SUBSTREAMS {
                pub SubstreamMask: [u32; 128],
            }
            impl VBICODECFILTERING_NABTS_SUBSTREAMS {}
            impl ::std::default::Default for VBICODECFILTERING_NABTS_SUBSTREAMS {
                fn default() -> Self {
                    Self {
                        SubstreamMask: [0; 128],
                    }
                }
            }
            impl ::std::fmt::Debug for VBICODECFILTERING_NABTS_SUBSTREAMS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("VBICODECFILTERING_NABTS_SUBSTREAMS")
                        .field("SubstreamMask", &format_args!("{:?}", self.SubstreamMask))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for VBICODECFILTERING_NABTS_SUBSTREAMS {
                fn eq(&self, other: &Self) -> bool {
                    self.SubstreamMask == other.SubstreamMask
                }
            }
            impl ::std::cmp::Eq for VBICODECFILTERING_NABTS_SUBSTREAMS {}
            unsafe impl ::windows::Abi for VBICODECFILTERING_NABTS_SUBSTREAMS {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_VBICODECFILTERING_NABTS_SUBSTREAMS_S {
                pub Property: KSIDENTIFIER,
                pub Substreams: VBICODECFILTERING_NABTS_SUBSTREAMS,
            }
            impl KSPROPERTY_VBICODECFILTERING_NABTS_SUBSTREAMS_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_VBICODECFILTERING_NABTS_SUBSTREAMS_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_VBICODECFILTERING_SCANLINES_S {
                pub Property: KSIDENTIFIER,
                pub Scanlines: VBICODECFILTERING_SCANLINES,
            }
            impl KSPROPERTY_VBICODECFILTERING_SCANLINES_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_VBICODECFILTERING_SCANLINES_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct VBICODECFILTERING_STATISTICS_COMMON_PIN {
                pub SRBsProcessed: u32,
                pub SRBsIgnored: u32,
                pub SRBsMissing: u32,
                pub InternalErrors: u32,
                pub ExternalErrors: u32,
                pub Discontinuities: u32,
                pub LineConfidenceAvg: u32,
                pub BytesOutput: u32,
            }
            impl VBICODECFILTERING_STATISTICS_COMMON_PIN {}
            impl ::std::default::Default for VBICODECFILTERING_STATISTICS_COMMON_PIN {
                fn default() -> Self {
                    Self {
                        SRBsProcessed: 0,
                        SRBsIgnored: 0,
                        SRBsMissing: 0,
                        InternalErrors: 0,
                        ExternalErrors: 0,
                        Discontinuities: 0,
                        LineConfidenceAvg: 0,
                        BytesOutput: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for VBICODECFILTERING_STATISTICS_COMMON_PIN {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("VBICODECFILTERING_STATISTICS_COMMON_PIN")
                        .field("SRBsProcessed", &format_args!("{:?}", self.SRBsProcessed))
                        .field("SRBsIgnored", &format_args!("{:?}", self.SRBsIgnored))
                        .field("SRBsMissing", &format_args!("{:?}", self.SRBsMissing))
                        .field("InternalErrors", &format_args!("{:?}", self.InternalErrors))
                        .field("ExternalErrors", &format_args!("{:?}", self.ExternalErrors))
                        .field(
                            "Discontinuities",
                            &format_args!("{:?}", self.Discontinuities),
                        )
                        .field(
                            "LineConfidenceAvg",
                            &format_args!("{:?}", self.LineConfidenceAvg),
                        )
                        .field("BytesOutput", &format_args!("{:?}", self.BytesOutput))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for VBICODECFILTERING_STATISTICS_COMMON_PIN {
                fn eq(&self, other: &Self) -> bool {
                    self.SRBsProcessed == other.SRBsProcessed
                        && self.SRBsIgnored == other.SRBsIgnored
                        && self.SRBsMissing == other.SRBsMissing
                        && self.InternalErrors == other.InternalErrors
                        && self.ExternalErrors == other.ExternalErrors
                        && self.Discontinuities == other.Discontinuities
                        && self.LineConfidenceAvg == other.LineConfidenceAvg
                        && self.BytesOutput == other.BytesOutput
                }
            }
            impl ::std::cmp::Eq for VBICODECFILTERING_STATISTICS_COMMON_PIN {}
            unsafe impl ::windows::Abi for VBICODECFILTERING_STATISTICS_COMMON_PIN {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct VBICODECFILTERING_STATISTICS_CC_PIN {
                pub Common: VBICODECFILTERING_STATISTICS_COMMON_PIN,
            }
            impl VBICODECFILTERING_STATISTICS_CC_PIN {}
            impl ::std::default::Default for VBICODECFILTERING_STATISTICS_CC_PIN {
                fn default() -> Self {
                    Self {
                        Common: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for VBICODECFILTERING_STATISTICS_CC_PIN {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("VBICODECFILTERING_STATISTICS_CC_PIN")
                        .field("Common", &format_args!("{:?}", self.Common))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for VBICODECFILTERING_STATISTICS_CC_PIN {
                fn eq(&self, other: &Self) -> bool {
                    self.Common == other.Common
                }
            }
            impl ::std::cmp::Eq for VBICODECFILTERING_STATISTICS_CC_PIN {}
            unsafe impl ::windows::Abi for VBICODECFILTERING_STATISTICS_CC_PIN {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_VBICODECFILTERING_STATISTICS_CC_PIN_S {
                pub Property: KSIDENTIFIER,
                pub Statistics: VBICODECFILTERING_STATISTICS_CC_PIN,
            }
            impl KSPROPERTY_VBICODECFILTERING_STATISTICS_CC_PIN_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_VBICODECFILTERING_STATISTICS_CC_PIN_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct VBICODECFILTERING_STATISTICS_COMMON {
                pub InputSRBsProcessed: u32,
                pub OutputSRBsProcessed: u32,
                pub SRBsIgnored: u32,
                pub InputSRBsMissing: u32,
                pub OutputSRBsMissing: u32,
                pub OutputFailures: u32,
                pub InternalErrors: u32,
                pub ExternalErrors: u32,
                pub InputDiscontinuities: u32,
                pub DSPFailures: u32,
                pub TvTunerChanges: u32,
                pub VBIHeaderChanges: u32,
                pub LineConfidenceAvg: u32,
                pub BytesOutput: u32,
            }
            impl VBICODECFILTERING_STATISTICS_COMMON {}
            impl ::std::default::Default for VBICODECFILTERING_STATISTICS_COMMON {
                fn default() -> Self {
                    Self {
                        InputSRBsProcessed: 0,
                        OutputSRBsProcessed: 0,
                        SRBsIgnored: 0,
                        InputSRBsMissing: 0,
                        OutputSRBsMissing: 0,
                        OutputFailures: 0,
                        InternalErrors: 0,
                        ExternalErrors: 0,
                        InputDiscontinuities: 0,
                        DSPFailures: 0,
                        TvTunerChanges: 0,
                        VBIHeaderChanges: 0,
                        LineConfidenceAvg: 0,
                        BytesOutput: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for VBICODECFILTERING_STATISTICS_COMMON {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("VBICODECFILTERING_STATISTICS_COMMON")
                        .field(
                            "InputSRBsProcessed",
                            &format_args!("{:?}", self.InputSRBsProcessed),
                        )
                        .field(
                            "OutputSRBsProcessed",
                            &format_args!("{:?}", self.OutputSRBsProcessed),
                        )
                        .field("SRBsIgnored", &format_args!("{:?}", self.SRBsIgnored))
                        .field(
                            "InputSRBsMissing",
                            &format_args!("{:?}", self.InputSRBsMissing),
                        )
                        .field(
                            "OutputSRBsMissing",
                            &format_args!("{:?}", self.OutputSRBsMissing),
                        )
                        .field("OutputFailures", &format_args!("{:?}", self.OutputFailures))
                        .field("InternalErrors", &format_args!("{:?}", self.InternalErrors))
                        .field("ExternalErrors", &format_args!("{:?}", self.ExternalErrors))
                        .field(
                            "InputDiscontinuities",
                            &format_args!("{:?}", self.InputDiscontinuities),
                        )
                        .field("DSPFailures", &format_args!("{:?}", self.DSPFailures))
                        .field("TvTunerChanges", &format_args!("{:?}", self.TvTunerChanges))
                        .field(
                            "VBIHeaderChanges",
                            &format_args!("{:?}", self.VBIHeaderChanges),
                        )
                        .field(
                            "LineConfidenceAvg",
                            &format_args!("{:?}", self.LineConfidenceAvg),
                        )
                        .field("BytesOutput", &format_args!("{:?}", self.BytesOutput))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for VBICODECFILTERING_STATISTICS_COMMON {
                fn eq(&self, other: &Self) -> bool {
                    self.InputSRBsProcessed == other.InputSRBsProcessed
                        && self.OutputSRBsProcessed == other.OutputSRBsProcessed
                        && self.SRBsIgnored == other.SRBsIgnored
                        && self.InputSRBsMissing == other.InputSRBsMissing
                        && self.OutputSRBsMissing == other.OutputSRBsMissing
                        && self.OutputFailures == other.OutputFailures
                        && self.InternalErrors == other.InternalErrors
                        && self.ExternalErrors == other.ExternalErrors
                        && self.InputDiscontinuities == other.InputDiscontinuities
                        && self.DSPFailures == other.DSPFailures
                        && self.TvTunerChanges == other.TvTunerChanges
                        && self.VBIHeaderChanges == other.VBIHeaderChanges
                        && self.LineConfidenceAvg == other.LineConfidenceAvg
                        && self.BytesOutput == other.BytesOutput
                }
            }
            impl ::std::cmp::Eq for VBICODECFILTERING_STATISTICS_COMMON {}
            unsafe impl ::windows::Abi for VBICODECFILTERING_STATISTICS_COMMON {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct VBICODECFILTERING_STATISTICS_CC {
                pub Common: VBICODECFILTERING_STATISTICS_COMMON,
            }
            impl VBICODECFILTERING_STATISTICS_CC {}
            impl ::std::default::Default for VBICODECFILTERING_STATISTICS_CC {
                fn default() -> Self {
                    Self {
                        Common: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for VBICODECFILTERING_STATISTICS_CC {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("VBICODECFILTERING_STATISTICS_CC")
                        .field("Common", &format_args!("{:?}", self.Common))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for VBICODECFILTERING_STATISTICS_CC {
                fn eq(&self, other: &Self) -> bool {
                    self.Common == other.Common
                }
            }
            impl ::std::cmp::Eq for VBICODECFILTERING_STATISTICS_CC {}
            unsafe impl ::windows::Abi for VBICODECFILTERING_STATISTICS_CC {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_VBICODECFILTERING_STATISTICS_CC_S {
                pub Property: KSIDENTIFIER,
                pub Statistics: VBICODECFILTERING_STATISTICS_CC,
            }
            impl KSPROPERTY_VBICODECFILTERING_STATISTICS_CC_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_VBICODECFILTERING_STATISTICS_CC_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_PIN_S {
                pub Property: KSIDENTIFIER,
                pub Statistics: VBICODECFILTERING_STATISTICS_COMMON_PIN,
            }
            impl KSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_PIN_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_PIN_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_S {
                pub Property: KSIDENTIFIER,
                pub Statistics: VBICODECFILTERING_STATISTICS_COMMON,
            }
            impl KSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct VBICODECFILTERING_STATISTICS_NABTS_PIN {
                pub Common: VBICODECFILTERING_STATISTICS_COMMON_PIN,
            }
            impl VBICODECFILTERING_STATISTICS_NABTS_PIN {}
            impl ::std::default::Default for VBICODECFILTERING_STATISTICS_NABTS_PIN {
                fn default() -> Self {
                    Self {
                        Common: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for VBICODECFILTERING_STATISTICS_NABTS_PIN {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("VBICODECFILTERING_STATISTICS_NABTS_PIN")
                        .field("Common", &format_args!("{:?}", self.Common))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for VBICODECFILTERING_STATISTICS_NABTS_PIN {
                fn eq(&self, other: &Self) -> bool {
                    self.Common == other.Common
                }
            }
            impl ::std::cmp::Eq for VBICODECFILTERING_STATISTICS_NABTS_PIN {}
            unsafe impl ::windows::Abi for VBICODECFILTERING_STATISTICS_NABTS_PIN {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_PIN_S {
                pub Property: KSIDENTIFIER,
                pub Statistics: VBICODECFILTERING_STATISTICS_NABTS_PIN,
            }
            impl KSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_PIN_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_PIN_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct VBICODECFILTERING_STATISTICS_NABTS {
                pub Common: VBICODECFILTERING_STATISTICS_COMMON,
                pub FECBundleBadLines: u32,
                pub FECQueueOverflows: u32,
                pub FECCorrectedLines: u32,
                pub FECUncorrectableLines: u32,
                pub BundlesProcessed: u32,
                pub BundlesSent2IP: u32,
                pub FilteredLines: u32,
            }
            impl VBICODECFILTERING_STATISTICS_NABTS {}
            impl ::std::default::Default for VBICODECFILTERING_STATISTICS_NABTS {
                fn default() -> Self {
                    Self {
                        Common: ::std::default::Default::default(),
                        FECBundleBadLines: 0,
                        FECQueueOverflows: 0,
                        FECCorrectedLines: 0,
                        FECUncorrectableLines: 0,
                        BundlesProcessed: 0,
                        BundlesSent2IP: 0,
                        FilteredLines: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for VBICODECFILTERING_STATISTICS_NABTS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("VBICODECFILTERING_STATISTICS_NABTS")
                        .field("Common", &format_args!("{:?}", self.Common))
                        .field(
                            "FECBundleBadLines",
                            &format_args!("{:?}", self.FECBundleBadLines),
                        )
                        .field(
                            "FECQueueOverflows",
                            &format_args!("{:?}", self.FECQueueOverflows),
                        )
                        .field(
                            "FECCorrectedLines",
                            &format_args!("{:?}", self.FECCorrectedLines),
                        )
                        .field(
                            "FECUncorrectableLines",
                            &format_args!("{:?}", self.FECUncorrectableLines),
                        )
                        .field(
                            "BundlesProcessed",
                            &format_args!("{:?}", self.BundlesProcessed),
                        )
                        .field("BundlesSent2IP", &format_args!("{:?}", self.BundlesSent2IP))
                        .field("FilteredLines", &format_args!("{:?}", self.FilteredLines))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for VBICODECFILTERING_STATISTICS_NABTS {
                fn eq(&self, other: &Self) -> bool {
                    self.Common == other.Common
                        && self.FECBundleBadLines == other.FECBundleBadLines
                        && self.FECQueueOverflows == other.FECQueueOverflows
                        && self.FECCorrectedLines == other.FECCorrectedLines
                        && self.FECUncorrectableLines == other.FECUncorrectableLines
                        && self.BundlesProcessed == other.BundlesProcessed
                        && self.BundlesSent2IP == other.BundlesSent2IP
                        && self.FilteredLines == other.FilteredLines
                }
            }
            impl ::std::cmp::Eq for VBICODECFILTERING_STATISTICS_NABTS {}
            unsafe impl ::windows::Abi for VBICODECFILTERING_STATISTICS_NABTS {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_S {
                pub Property: KSIDENTIFIER,
                pub Statistics: VBICODECFILTERING_STATISTICS_NABTS,
            }
            impl KSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_S {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_VIDCAP_CAMERACONTROL(pub i32);
            impl KSPROPERTY_VIDCAP_CAMERACONTROL {
                pub const KSPROPERTY_CAMERACONTROL_PAN: Self = Self(0i32);
                pub const KSPROPERTY_CAMERACONTROL_TILT: Self = Self(1i32);
                pub const KSPROPERTY_CAMERACONTROL_ROLL: Self = Self(2i32);
                pub const KSPROPERTY_CAMERACONTROL_ZOOM: Self = Self(3i32);
                pub const KSPROPERTY_CAMERACONTROL_EXPOSURE: Self = Self(4i32);
                pub const KSPROPERTY_CAMERACONTROL_IRIS: Self = Self(5i32);
                pub const KSPROPERTY_CAMERACONTROL_FOCUS: Self = Self(6i32);
                pub const KSPROPERTY_CAMERACONTROL_SCANMODE: Self = Self(7i32);
                pub const KSPROPERTY_CAMERACONTROL_PRIVACY: Self = Self(8i32);
                pub const KSPROPERTY_CAMERACONTROL_PANTILT: Self = Self(9i32);
                pub const KSPROPERTY_CAMERACONTROL_PAN_RELATIVE: Self = Self(10i32);
                pub const KSPROPERTY_CAMERACONTROL_TILT_RELATIVE: Self = Self(11i32);
                pub const KSPROPERTY_CAMERACONTROL_ROLL_RELATIVE: Self = Self(12i32);
                pub const KSPROPERTY_CAMERACONTROL_ZOOM_RELATIVE: Self = Self(13i32);
                pub const KSPROPERTY_CAMERACONTROL_EXPOSURE_RELATIVE: Self = Self(14i32);
                pub const KSPROPERTY_CAMERACONTROL_IRIS_RELATIVE: Self = Self(15i32);
                pub const KSPROPERTY_CAMERACONTROL_FOCUS_RELATIVE: Self = Self(16i32);
                pub const KSPROPERTY_CAMERACONTROL_PANTILT_RELATIVE: Self = Self(17i32);
                pub const KSPROPERTY_CAMERACONTROL_FOCAL_LENGTH: Self = Self(18i32);
                pub const KSPROPERTY_CAMERACONTROL_AUTO_EXPOSURE_PRIORITY: Self = Self(19i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_VIDCAP_CAMERACONTROL {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_VIDCAP_CAMERACONTROL {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_VIDCAP_CROSSBAR(pub i32);
            impl KSPROPERTY_VIDCAP_CROSSBAR {
                pub const KSPROPERTY_CROSSBAR_CAPS: Self = Self(0i32);
                pub const KSPROPERTY_CROSSBAR_PININFO: Self = Self(1i32);
                pub const KSPROPERTY_CROSSBAR_CAN_ROUTE: Self = Self(2i32);
                pub const KSPROPERTY_CROSSBAR_ROUTE: Self = Self(3i32);
                pub const KSPROPERTY_CROSSBAR_INPUT_ACTIVE: Self = Self(4i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_VIDCAP_CROSSBAR {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_VIDCAP_CROSSBAR {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_VIDCAP_DROPPEDFRAMES(pub i32);
            impl KSPROPERTY_VIDCAP_DROPPEDFRAMES {
                pub const KSPROPERTY_DROPPEDFRAMES_CURRENT: Self = Self(0i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_VIDCAP_DROPPEDFRAMES {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_VIDCAP_DROPPEDFRAMES {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_VIDCAP_SELECTOR(pub i32);
            impl KSPROPERTY_VIDCAP_SELECTOR {
                pub const KSPROPERTY_SELECTOR_SOURCE_NODE_ID: Self = Self(0i32);
                pub const KSPROPERTY_SELECTOR_NUM_SOURCES: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_VIDCAP_SELECTOR {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_VIDCAP_SELECTOR {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_VIDCAP_TVAUDIO(pub i32);
            impl KSPROPERTY_VIDCAP_TVAUDIO {
                pub const KSPROPERTY_TVAUDIO_CAPS: Self = Self(0i32);
                pub const KSPROPERTY_TVAUDIO_MODE: Self = Self(1i32);
                pub const KSPROPERTY_TVAUDIO_CURRENTLY_AVAILABLE_MODES: Self = Self(2i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_VIDCAP_TVAUDIO {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_VIDCAP_TVAUDIO {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_VIDCAP_VIDEOCOMPRESSION(pub i32);
            impl KSPROPERTY_VIDCAP_VIDEOCOMPRESSION {
                pub const KSPROPERTY_VIDEOCOMPRESSION_GETINFO: Self = Self(0i32);
                pub const KSPROPERTY_VIDEOCOMPRESSION_KEYFRAME_RATE: Self = Self(1i32);
                pub const KSPROPERTY_VIDEOCOMPRESSION_PFRAMES_PER_KEYFRAME: Self = Self(2i32);
                pub const KSPROPERTY_VIDEOCOMPRESSION_QUALITY: Self = Self(3i32);
                pub const KSPROPERTY_VIDEOCOMPRESSION_OVERRIDE_KEYFRAME: Self = Self(4i32);
                pub const KSPROPERTY_VIDEOCOMPRESSION_OVERRIDE_FRAME_SIZE: Self = Self(5i32);
                pub const KSPROPERTY_VIDEOCOMPRESSION_WINDOWSIZE: Self = Self(6i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_VIDCAP_VIDEOCOMPRESSION {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_VIDCAP_VIDEOCOMPRESSION {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_VIDCAP_VIDEOCONTROL(pub i32);
            impl KSPROPERTY_VIDCAP_VIDEOCONTROL {
                pub const KSPROPERTY_VIDEOCONTROL_CAPS: Self = Self(0i32);
                pub const KSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE: Self = Self(1i32);
                pub const KSPROPERTY_VIDEOCONTROL_FRAME_RATES: Self = Self(2i32);
                pub const KSPROPERTY_VIDEOCONTROL_MODE: Self = Self(3i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_VIDCAP_VIDEOCONTROL {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_VIDCAP_VIDEOCONTROL {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_VIDCAP_VIDEODECODER(pub i32);
            impl KSPROPERTY_VIDCAP_VIDEODECODER {
                pub const KSPROPERTY_VIDEODECODER_CAPS: Self = Self(0i32);
                pub const KSPROPERTY_VIDEODECODER_STANDARD: Self = Self(1i32);
                pub const KSPROPERTY_VIDEODECODER_STATUS: Self = Self(2i32);
                pub const KSPROPERTY_VIDEODECODER_OUTPUT_ENABLE: Self = Self(3i32);
                pub const KSPROPERTY_VIDEODECODER_VCR_TIMING: Self = Self(4i32);
                pub const KSPROPERTY_VIDEODECODER_STATUS2: Self = Self(5i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_VIDCAP_VIDEODECODER {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_VIDCAP_VIDEODECODER {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_VIDCAP_VIDEOENCODER(pub i32);
            impl KSPROPERTY_VIDCAP_VIDEOENCODER {
                pub const KSPROPERTY_VIDEOENCODER_CAPS: Self = Self(0i32);
                pub const KSPROPERTY_VIDEOENCODER_STANDARD: Self = Self(1i32);
                pub const KSPROPERTY_VIDEOENCODER_COPYPROTECTION: Self = Self(2i32);
                pub const KSPROPERTY_VIDEOENCODER_CC_ENABLE: Self = Self(3i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_VIDCAP_VIDEOENCODER {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_VIDCAP_VIDEOENCODER {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_VIDCAP_VIDEOPROCAMP(pub i32);
            impl KSPROPERTY_VIDCAP_VIDEOPROCAMP {
                pub const KSPROPERTY_VIDEOPROCAMP_BRIGHTNESS: Self = Self(0i32);
                pub const KSPROPERTY_VIDEOPROCAMP_CONTRAST: Self = Self(1i32);
                pub const KSPROPERTY_VIDEOPROCAMP_HUE: Self = Self(2i32);
                pub const KSPROPERTY_VIDEOPROCAMP_SATURATION: Self = Self(3i32);
                pub const KSPROPERTY_VIDEOPROCAMP_SHARPNESS: Self = Self(4i32);
                pub const KSPROPERTY_VIDEOPROCAMP_GAMMA: Self = Self(5i32);
                pub const KSPROPERTY_VIDEOPROCAMP_COLORENABLE: Self = Self(6i32);
                pub const KSPROPERTY_VIDEOPROCAMP_WHITEBALANCE: Self = Self(7i32);
                pub const KSPROPERTY_VIDEOPROCAMP_BACKLIGHT_COMPENSATION: Self = Self(8i32);
                pub const KSPROPERTY_VIDEOPROCAMP_GAIN: Self = Self(9i32);
                pub const KSPROPERTY_VIDEOPROCAMP_DIGITAL_MULTIPLIER: Self = Self(10i32);
                pub const KSPROPERTY_VIDEOPROCAMP_DIGITAL_MULTIPLIER_LIMIT: Self = Self(11i32);
                pub const KSPROPERTY_VIDEOPROCAMP_WHITEBALANCE_COMPONENT: Self = Self(12i32);
                pub const KSPROPERTY_VIDEOPROCAMP_POWERLINE_FREQUENCY: Self = Self(13i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_VIDCAP_VIDEOPROCAMP {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_VIDCAP_VIDEOPROCAMP {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_VIDEOCOMPRESSION_GETINFO_S {
                pub Property: KSIDENTIFIER,
                pub StreamIndex: u32,
                pub DefaultKeyFrameRate: i32,
                pub DefaultPFrameRate: i32,
                pub DefaultQuality: i32,
                pub NumberOfQualitySettings: i32,
                pub Capabilities: i32,
            }
            impl KSPROPERTY_VIDEOCOMPRESSION_GETINFO_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_VIDEOCOMPRESSION_GETINFO_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_VIDEOCOMPRESSION_S {
                pub Property: KSIDENTIFIER,
                pub StreamIndex: u32,
                pub Value: i32,
            }
            impl KSPROPERTY_VIDEOCOMPRESSION_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_VIDEOCOMPRESSION_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_VIDEOCOMPRESSION_S1 {
                pub Property: KSIDENTIFIER,
                pub StreamIndex: u32,
                pub Value: i32,
                pub Flags: u32,
            }
            impl KSPROPERTY_VIDEOCOMPRESSION_S1 {}
            unsafe impl ::windows::Abi for KSPROPERTY_VIDEOCOMPRESSION_S1 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE_S {
                pub Property: KSIDENTIFIER,
                pub StreamIndex: u32,
                pub RangeIndex: u32,
                pub Dimensions: super::DisplayDevices::SIZE,
                pub CurrentActualFrameRate: i64,
                pub CurrentMaxAvailableFrameRate: i64,
            }
            impl KSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_VIDEOCONTROL_CAPS_S {
                pub Property: KSIDENTIFIER,
                pub StreamIndex: u32,
                pub VideoControlCaps: u32,
            }
            impl KSPROPERTY_VIDEOCONTROL_CAPS_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_VIDEOCONTROL_CAPS_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_VIDEOCONTROL_FRAME_RATES_S {
                pub Property: KSIDENTIFIER,
                pub StreamIndex: u32,
                pub RangeIndex: u32,
                pub Dimensions: super::DisplayDevices::SIZE,
            }
            impl KSPROPERTY_VIDEOCONTROL_FRAME_RATES_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_VIDEOCONTROL_FRAME_RATES_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_VIDEOCONTROL_MODE_S {
                pub Property: KSIDENTIFIER,
                pub StreamIndex: u32,
                pub Mode: i32,
            }
            impl KSPROPERTY_VIDEOCONTROL_MODE_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_VIDEOCONTROL_MODE_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_VIDEODECODER_CAPS_S {
                pub Property: KSIDENTIFIER,
                pub StandardsSupported: u32,
                pub Capabilities: u32,
                pub SettlingTime: u32,
                pub HSyncPerVSync: u32,
            }
            impl KSPROPERTY_VIDEODECODER_CAPS_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_VIDEODECODER_CAPS_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_VIDEODECODER_S {
                pub Property: KSIDENTIFIER,
                pub Value: u32,
            }
            impl KSPROPERTY_VIDEODECODER_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_VIDEODECODER_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_VIDEODECODER_STATUS2_S {
                pub Property: KSIDENTIFIER,
                pub NumberOfLines: u32,
                pub SignalLocked: u32,
                pub ChromaLock: u32,
            }
            impl KSPROPERTY_VIDEODECODER_STATUS2_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_VIDEODECODER_STATUS2_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_VIDEODECODER_STATUS_S {
                pub Property: KSIDENTIFIER,
                pub NumberOfLines: u32,
                pub SignalLocked: u32,
            }
            impl KSPROPERTY_VIDEODECODER_STATUS_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_VIDEODECODER_STATUS_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_VIDEOENCODER_S {
                pub Property: KSIDENTIFIER,
                pub Value: i32,
                pub Flags: u32,
                pub Capabilities: u32,
            }
            impl KSPROPERTY_VIDEOENCODER_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_VIDEOENCODER_S {
                type Abi = Self;
            }
            pub const KSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO: i32 = 1i32;
            pub const KSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL: i32 = 2i32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_VIDEOPROCAMP_NODE_S {
                pub NodeProperty: KSP_NODE,
                pub Value: i32,
                pub Flags: u32,
                pub Capabilities: u32,
            }
            impl KSPROPERTY_VIDEOPROCAMP_NODE_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_VIDEOPROCAMP_NODE_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_VIDEOPROCAMP_NODE_S2 {
                pub NodeProperty: KSP_NODE,
                pub Value1: i32,
                pub Flags: u32,
                pub Capabilities: u32,
                pub Value2: i32,
            }
            impl KSPROPERTY_VIDEOPROCAMP_NODE_S2 {}
            unsafe impl ::windows::Abi for KSPROPERTY_VIDEOPROCAMP_NODE_S2 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_VIDEOPROCAMP_S {
                pub Property: KSIDENTIFIER,
                pub Value: i32,
                pub Flags: u32,
                pub Capabilities: u32,
            }
            impl KSPROPERTY_VIDEOPROCAMP_S {}
            unsafe impl ::windows::Abi for KSPROPERTY_VIDEOPROCAMP_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSPROPERTY_VIDEOPROCAMP_S2 {
                pub Property: KSIDENTIFIER,
                pub Value1: i32,
                pub Flags: u32,
                pub Capabilities: u32,
                pub Value2: i32,
            }
            impl KSPROPERTY_VIDEOPROCAMP_S2 {}
            unsafe impl ::windows::Abi for KSPROPERTY_VIDEOPROCAMP_S2 {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_VIDMEM_TRANSPORT(pub i32);
            impl KSPROPERTY_VIDMEM_TRANSPORT {
                pub const KSPROPERTY_DISPLAY_ADAPTER_GUID: Self = Self(1i32);
                pub const KSPROPERTY_PREFERRED_CAPTURE_SURFACE: Self = Self(2i32);
                pub const KSPROPERTY_CURRENT_CAPTURE_SURFACE: Self = Self(3i32);
                pub const KSPROPERTY_MAP_CAPTURE_HANDLE_TO_VRAM_ADDRESS: Self = Self(4i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_VIDMEM_TRANSPORT {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_VIDMEM_TRANSPORT {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_VPCONFIG(pub i32);
            impl KSPROPERTY_VPCONFIG {
                pub const KSPROPERTY_VPCONFIG_NUMCONNECTINFO: Self = Self(0i32);
                pub const KSPROPERTY_VPCONFIG_GETCONNECTINFO: Self = Self(1i32);
                pub const KSPROPERTY_VPCONFIG_SETCONNECTINFO: Self = Self(2i32);
                pub const KSPROPERTY_VPCONFIG_VPDATAINFO: Self = Self(3i32);
                pub const KSPROPERTY_VPCONFIG_MAXPIXELRATE: Self = Self(4i32);
                pub const KSPROPERTY_VPCONFIG_INFORMVPINPUT: Self = Self(5i32);
                pub const KSPROPERTY_VPCONFIG_NUMVIDEOFORMAT: Self = Self(6i32);
                pub const KSPROPERTY_VPCONFIG_GETVIDEOFORMAT: Self = Self(7i32);
                pub const KSPROPERTY_VPCONFIG_SETVIDEOFORMAT: Self = Self(8i32);
                pub const KSPROPERTY_VPCONFIG_INVERTPOLARITY: Self = Self(9i32);
                pub const KSPROPERTY_VPCONFIG_DECIMATIONCAPABILITY: Self = Self(10i32);
                pub const KSPROPERTY_VPCONFIG_SCALEFACTOR: Self = Self(11i32);
                pub const KSPROPERTY_VPCONFIG_DDRAWHANDLE: Self = Self(12i32);
                pub const KSPROPERTY_VPCONFIG_VIDEOPORTID: Self = Self(13i32);
                pub const KSPROPERTY_VPCONFIG_DDRAWSURFACEHANDLE: Self = Self(14i32);
                pub const KSPROPERTY_VPCONFIG_SURFACEPARAMS: Self = Self(15i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_VPCONFIG {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_VPCONFIG {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSPROPERTY_WAVE(pub i32);
            impl KSPROPERTY_WAVE {
                pub const KSPROPERTY_WAVE_COMPATIBLE_CAPABILITIES: Self = Self(0i32);
                pub const KSPROPERTY_WAVE_INPUT_CAPABILITIES: Self = Self(1i32);
                pub const KSPROPERTY_WAVE_OUTPUT_CAPABILITIES: Self = Self(2i32);
                pub const KSPROPERTY_WAVE_BUFFER: Self = Self(3i32);
                pub const KSPROPERTY_WAVE_FREQUENCY: Self = Self(4i32);
                pub const KSPROPERTY_WAVE_VOLUME: Self = Self(5i32);
                pub const KSPROPERTY_WAVE_PAN: Self = Self(6i32);
            }
            impl ::std::convert::From<i32> for KSPROPERTY_WAVE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSPROPERTY_WAVE {
                type Abi = Self;
            }
            pub const KSPROPERTY_WAVE_QUEUED_POSITION: u32 = 1u32;
            pub const KSPROPSETID_AC3: ::windows::Guid = ::windows::Guid::from_values(
                3215714080,
                28191,
                4560,
                [188, 242, 68, 69, 83, 84, 0, 0],
            );
            pub const KSPROPSETID_Audio: ::windows::Guid = ::windows::Guid::from_values(
                1174383264,
                28187,
                4560,
                [188, 242, 68, 69, 83, 84, 0, 0],
            );
            pub const KSPROPSETID_AudioBufferDuration: ::windows::Guid =
                ::windows::Guid::from_values(
                    1316208767,
                    9164,
                    18773,
                    [167, 234, 61, 165, 2, 73, 98, 144],
                );
            pub const KSPROPSETID_AudioDecoderOut: ::windows::Guid = ::windows::Guid::from_values(
                1822875680,
                17341,
                4560,
                [189, 106, 0, 53, 5, 193, 3, 169],
            );
            pub const KSPROPSETID_AudioEngine: ::windows::Guid = ::windows::Guid::from_values(
                976192220,
                34927,
                19370,
                [158, 180, 8, 43, 144, 37, 197, 54],
            );
            pub const KSPROPSETID_AudioModule: ::windows::Guid = ::windows::Guid::from_values(
                3224698288,
                65397,
                18376,
                [170, 60, 238, 70, 113, 107, 80, 198],
            );
            pub const KSPROPSETID_AudioPosture: ::windows::Guid = ::windows::Guid::from_values(
                3675580634,
                615,
                19115,
                [135, 89, 186, 200, 142, 70, 182, 83],
            );
            pub const KSPROPSETID_AudioSignalProcessing: ::windows::Guid =
                ::windows::Guid::from_values(
                    1332196648,
                    12489,
                    16606,
                    [178, 251, 133, 157, 221, 31, 52, 112],
                );
            pub const KSPROPSETID_Bibliographic: ::windows::Guid = ::windows::Guid::from_values(
                129635598,
                58033,
                4560,
                [172, 23, 0, 160, 201, 34, 49, 150],
            );
            pub const KSPROPSETID_BtAudio: ::windows::Guid = ::windows::Guid::from_values(
                2141219904,
                47350,
                19582,
                [133, 86, 232, 195, 58, 18, 229, 77],
            );
            pub const KSPROPSETID_Clock: ::windows::Guid = ::windows::Guid::from_values(
                3742540992,
                44055,
                4559,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            pub const KSPROPSETID_Connection: ::windows::Guid = ::windows::Guid::from_values(
                492357920,
                44187,
                4559,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            pub const KSPROPSETID_CopyProt: ::windows::Guid = ::windows::Guid::from_values(
                243927616,
                27375,
                4560,
                [158, 208, 0, 160, 36, 202, 25, 179],
            );
            pub const KSPROPSETID_Cyclic: ::windows::Guid = ::windows::Guid::from_values(
                1073655456,
                11246,
                4559,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            pub const KSPROPSETID_DirectSound3DBuffer: ::windows::Guid =
                ::windows::Guid::from_values(
                    1132147729,
                    53344,
                    4560,
                    [133, 131, 0, 192, 79, 217, 186, 243],
                );
            pub const KSPROPSETID_DirectSound3DListener: ::windows::Guid =
                ::windows::Guid::from_values(
                    1132147732,
                    53344,
                    4560,
                    [133, 131, 0, 192, 79, 217, 186, 243],
                );
            pub const KSPROPSETID_DrmAudioStream: ::windows::Guid = ::windows::Guid::from_values(
                791449053,
                16792,
                20396,
                [186, 41, 97, 187, 5, 183, 222, 6],
            );
            pub const KSPROPSETID_DvdSubPic: ::windows::Guid = ::windows::Guid::from_values(
                2889417824,
                17327,
                4560,
                [189, 106, 0, 53, 5, 193, 3, 169],
            );
            pub const KSPROPSETID_FMRXControl: ::windows::Guid = ::windows::Guid::from_values(
                2491136570,
                59630,
                18310,
                [144, 196, 132, 40, 24, 95, 5, 190],
            );
            pub const KSPROPSETID_FMRXTopology: ::windows::Guid = ::windows::Guid::from_values(
                205966991,
                56365,
                16900,
                [157, 201, 245, 137, 99, 54, 101, 99],
            );
            pub const KSPROPSETID_General: ::windows::Guid = ::windows::Guid::from_values(
                342158757,
                27279,
                4561,
                [154, 167, 0, 160, 201, 34, 49, 150],
            );
            pub const KSPROPSETID_Hrtf3d: ::windows::Guid = ::windows::Guid::from_values(
                3060657328,
                41091,
                4560,
                [133, 30, 0, 192, 79, 217, 186, 243],
            );
            pub const KSPROPSETID_InterleavedAudio: ::windows::Guid = ::windows::Guid::from_values(
                3924550992,
                54809,
                19466,
                [151, 107, 112, 98, 50, 43, 48, 6],
            );
            pub const KSPROPSETID_Itd3d: ::windows::Guid = ::windows::Guid::from_values(
                1680470160,
                40921,
                4560,
                [167, 91, 0, 160, 201, 3, 101, 227],
            );
            pub const KSPROPSETID_Jack: ::windows::Guid = ::windows::Guid::from_values(
                1158281047,
                11590,
                17975,
                [142, 98, 206, 125, 185, 68, 245, 123],
            );
            pub const KSPROPSETID_MPEG4_MediaType_Attributes: ::windows::Guid =
                ::windows::Guid::from_values(
                    4285287418,
                    1961,
                    19579,
                    [162, 55, 103, 47, 157, 104, 6, 95],
                );
            pub const KSPROPSETID_MediaSeeking: ::windows::Guid = ::windows::Guid::from_values(
                4002434828,
                53403,
                4560,
                [171, 233, 0, 160, 201, 34, 49, 150],
            );
            pub const KSPROPSETID_MemoryTransport: ::windows::Guid = ::windows::Guid::from_values(
                171777117,
                21059,
                18457,
                [158, 208, 174, 232, 4, 76, 238, 43],
            );
            pub const KSPROPSETID_Mpeg2Vid: ::windows::Guid = ::windows::Guid::from_values(
                3370195808,
                3273,
                4560,
                [189, 105, 0, 53, 5, 193, 3, 169],
            );
            pub const KSPROPSETID_OverlayUpdate: ::windows::Guid = ::windows::Guid::from_values(
                1225696719,
                30337,
                4561,
                [162, 28, 0, 160, 201, 34, 49, 150],
            );
            pub const KSPROPSETID_Pin: ::windows::Guid = ::windows::Guid::from_values(
                2350074208,
                20909,
                4559,
                [135, 138, 148, 248, 1, 193, 0, 0],
            );
            pub const KSPROPSETID_PinMDLCacheClearProp: ::windows::Guid =
                ::windows::Guid::from_values(
                    3178334843,
                    38908,
                    16583,
                    [136, 206, 211, 255, 6, 245, 91, 22],
                );
            pub const KSPROPSETID_Quality: ::windows::Guid = ::windows::Guid::from_values(
                3513439104,
                44058,
                4559,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            pub const KSPROPSETID_RtAudio: ::windows::Guid = ::windows::Guid::from_values(
                2824184972,
                12152,
                18217,
                [144, 81, 25, 104, 116, 107, 158, 239],
            );
            pub const KSPROPSETID_SoundDetector: ::windows::Guid = ::windows::Guid::from_values(
                289161822,
                64791,
                16471,
                [180, 34, 237, 64, 116, 241, 175, 223],
            );
            pub const KSPROPSETID_SoundDetector2: ::windows::Guid = ::windows::Guid::from_values(
                4261929762,
                17676,
                19413,
                [132, 202, 169, 72, 80, 14, 166, 170],
            );
            pub const KSPROPSETID_Stream: ::windows::Guid = ::windows::Guid::from_values(
                1705687648,
                39086,
                4559,
                [161, 13, 0, 32, 175, 209, 86, 228],
            );
            pub const KSPROPSETID_StreamAllocator: ::windows::Guid = ::windows::Guid::from_values(
                3480109890,
                60551,
                4559,
                [161, 48, 0, 32, 175, 209, 86, 228],
            );
            pub const KSPROPSETID_StreamInterface: ::windows::Guid = ::windows::Guid::from_values(
                534613729,
                40147,
                4560,
                [130, 170, 0, 0, 248, 34, 254, 138],
            );
            pub const KSPROPSETID_TSRateChange: ::windows::Guid = ::windows::Guid::from_values(
                2768487872,
                7453,
                4561,
                [173, 128, 68, 69, 83, 84, 0, 0],
            );
            pub const KSPROPSETID_TelephonyControl: ::windows::Guid = ::windows::Guid::from_values(
                3068100273,
                53401,
                18591,
                [166, 160, 192, 16, 111, 8, 135, 167],
            );
            pub const KSPROPSETID_TelephonyTopology: ::windows::Guid = ::windows::Guid::from_values(
                2884787326,
                3684,
                20018,
                [177, 144, 208, 246, 215, 197, 62, 151],
            );
            pub const KSPROPSETID_Topology: ::windows::Guid = ::windows::Guid::from_values(
                1913473728,
                30003,
                4560,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            pub const KSPROPSETID_TopologyNode: ::windows::Guid = ::windows::Guid::from_values(
                1174383265,
                28187,
                4560,
                [188, 242, 68, 69, 83, 84, 0, 0],
            );
            pub const KSPROPSETID_VBICAP_PROPERTIES: ::windows::Guid = ::windows::Guid::from_values(
                4049782279,
                31541,
                18799,
                [173, 127, 45, 202, 59, 70, 183, 24],
            );
            pub const KSPROPSETID_VBICodecFiltering: ::windows::Guid = ::windows::Guid::from_values(
                3405689034,
                34581,
                4560,
                [189, 106, 0, 53, 192, 237, 186, 190],
            );
            pub const KSPROPSETID_VPConfig: ::windows::Guid = ::windows::Guid::from_values(
                3156846176,
                12515,
                4560,
                [158, 105, 0, 192, 79, 215, 193, 91],
            );
            pub const KSPROPSETID_VPVBIConfig: ::windows::Guid = ::windows::Guid::from_values(
                3964836608,
                6687,
                4561,
                [186, 217, 0, 96, 151, 68, 17, 26],
            );
            pub const KSPROPSETID_VramCapture: ::windows::Guid = ::windows::Guid::from_values(
                3879709923,
                10368,
                18690,
                [183, 153, 136, 208, 205, 99, 78, 15],
            );
            pub const KSPROPSETID_Wave: ::windows::Guid = ::windows::Guid::from_values(
                2454607024,
                25359,
                4559,
                [173, 167, 8, 0, 62, 48, 73, 74],
            );
            pub const KSPROPTYPESETID_General: ::windows::Guid = ::windows::Guid::from_values(
                2548669344,
                48618,
                4559,
                [165, 214, 40, 219, 4, 193, 0, 0],
            );
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSP_TIMEFORMAT {
                pub Property: KSIDENTIFIER,
                pub SourceFormat: ::windows::Guid,
                pub TargetFormat: ::windows::Guid,
                pub Time: i64,
            }
            impl KSP_TIMEFORMAT {}
            unsafe impl ::windows::Abi for KSP_TIMEFORMAT {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSQUALITY {
                pub Context: *mut ::std::ffi::c_void,
                pub Proportion: u32,
                pub DeltaTime: i64,
            }
            impl KSQUALITY {}
            impl ::std::default::Default for KSQUALITY {
                fn default() -> Self {
                    Self {
                        Context: ::std::ptr::null_mut(),
                        Proportion: 0,
                        DeltaTime: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSQUALITY {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSQUALITY")
                        .field("Context", &format_args!("{:?}", self.Context))
                        .field("Proportion", &format_args!("{:?}", self.Proportion))
                        .field("DeltaTime", &format_args!("{:?}", self.DeltaTime))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSQUALITY {
                fn eq(&self, other: &Self) -> bool {
                    self.Context == other.Context
                        && self.Proportion == other.Proportion
                        && self.DeltaTime == other.DeltaTime
                }
            }
            impl ::std::cmp::Eq for KSQUALITY {}
            unsafe impl ::windows::Abi for KSQUALITY {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSQUALITY_MANAGER {
                pub QualityManager: super::SystemServices::HANDLE,
                pub Context: *mut ::std::ffi::c_void,
            }
            impl KSQUALITY_MANAGER {}
            impl ::std::default::Default for KSQUALITY_MANAGER {
                fn default() -> Self {
                    Self {
                        QualityManager: ::std::default::Default::default(),
                        Context: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for KSQUALITY_MANAGER {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSQUALITY_MANAGER")
                        .field("QualityManager", &format_args!("{:?}", self.QualityManager))
                        .field("Context", &format_args!("{:?}", self.Context))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSQUALITY_MANAGER {
                fn eq(&self, other: &Self) -> bool {
                    self.QualityManager == other.QualityManager && self.Context == other.Context
                }
            }
            impl ::std::cmp::Eq for KSQUALITY_MANAGER {}
            unsafe impl ::windows::Abi for KSQUALITY_MANAGER {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSQUERYBUFFER {
                pub Event: KSIDENTIFIER,
                pub EventData: *mut KSEVENTDATA,
                pub Reserved: *mut ::std::ffi::c_void,
            }
            impl KSQUERYBUFFER {}
            unsafe impl ::windows::Abi for KSQUERYBUFFER {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSRATE {
                pub PresentationStart: i64,
                pub Duration: i64,
                pub Interface: KSIDENTIFIER,
                pub Rate: i32,
                pub Flags: u32,
            }
            impl KSRATE {}
            unsafe impl ::windows::Abi for KSRATE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSRATE_CAPABILITY {
                pub Property: KSIDENTIFIER,
                pub Rate: KSRATE,
            }
            impl KSRATE_CAPABILITY {}
            unsafe impl ::windows::Abi for KSRATE_CAPABILITY {
                type Abi = Self;
            }
            pub const KSRATE_NOPRESENTATIONDURATION: u32 = 2u32;
            pub const KSRATE_NOPRESENTATIONSTART: u32 = 1u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSRELATIVEEVENT {
                pub Size: u32,
                pub Flags: u32,
                pub Anonymous: KSRELATIVEEVENT_0,
                pub Reserved: *mut ::std::ffi::c_void,
                pub Event: KSIDENTIFIER,
                pub EventData: KSEVENTDATA,
            }
            impl KSRELATIVEEVENT {}
            unsafe impl ::windows::Abi for KSRELATIVEEVENT {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union KSRELATIVEEVENT_0 {
                pub ObjectHandle: super::SystemServices::HANDLE,
                pub ObjectPointer: *mut ::std::ffi::c_void,
            }
            impl KSRELATIVEEVENT_0 {}
            unsafe impl ::windows::Abi for KSRELATIVEEVENT_0 {
                type Abi = Self;
            }
            pub const KSRELATIVEEVENT_FLAG_HANDLE: u32 = 1u32;
            pub const KSRELATIVEEVENT_FLAG_POINTER: u32 = 2u32;
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSRESET(pub i32);
            impl KSRESET {
                pub const KSRESET_BEGIN: Self = Self(0i32);
                pub const KSRESET_END: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for KSRESET {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSRESET {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSRESOLUTION {
                pub Granularity: i64,
                pub Error: i64,
            }
            impl KSRESOLUTION {}
            impl ::std::default::Default for KSRESOLUTION {
                fn default() -> Self {
                    Self {
                        Granularity: 0,
                        Error: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSRESOLUTION {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSRESOLUTION")
                        .field("Granularity", &format_args!("{:?}", self.Granularity))
                        .field("Error", &format_args!("{:?}", self.Error))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSRESOLUTION {
                fn eq(&self, other: &Self) -> bool {
                    self.Granularity == other.Granularity && self.Error == other.Error
                }
            }
            impl ::std::cmp::Eq for KSRESOLUTION {}
            unsafe impl ::windows::Abi for KSRESOLUTION {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSRTAUDIO_BUFFER {
                pub BufferAddress: *mut ::std::ffi::c_void,
                pub ActualBufferSize: u32,
                pub CallMemoryBarrier: super::SystemServices::BOOL,
            }
            impl KSRTAUDIO_BUFFER {}
            impl ::std::default::Default for KSRTAUDIO_BUFFER {
                fn default() -> Self {
                    Self {
                        BufferAddress: ::std::ptr::null_mut(),
                        ActualBufferSize: 0,
                        CallMemoryBarrier: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for KSRTAUDIO_BUFFER {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSRTAUDIO_BUFFER")
                        .field("BufferAddress", &format_args!("{:?}", self.BufferAddress))
                        .field(
                            "ActualBufferSize",
                            &format_args!("{:?}", self.ActualBufferSize),
                        )
                        .field(
                            "CallMemoryBarrier",
                            &format_args!("{:?}", self.CallMemoryBarrier),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSRTAUDIO_BUFFER {
                fn eq(&self, other: &Self) -> bool {
                    self.BufferAddress == other.BufferAddress
                        && self.ActualBufferSize == other.ActualBufferSize
                        && self.CallMemoryBarrier == other.CallMemoryBarrier
                }
            }
            impl ::std::cmp::Eq for KSRTAUDIO_BUFFER {}
            unsafe impl ::windows::Abi for KSRTAUDIO_BUFFER {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSRTAUDIO_BUFFER32 {
                pub BufferAddress: u32,
                pub ActualBufferSize: u32,
                pub CallMemoryBarrier: super::SystemServices::BOOL,
            }
            impl KSRTAUDIO_BUFFER32 {}
            impl ::std::default::Default for KSRTAUDIO_BUFFER32 {
                fn default() -> Self {
                    Self {
                        BufferAddress: 0,
                        ActualBufferSize: 0,
                        CallMemoryBarrier: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for KSRTAUDIO_BUFFER32 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSRTAUDIO_BUFFER32")
                        .field("BufferAddress", &format_args!("{:?}", self.BufferAddress))
                        .field(
                            "ActualBufferSize",
                            &format_args!("{:?}", self.ActualBufferSize),
                        )
                        .field(
                            "CallMemoryBarrier",
                            &format_args!("{:?}", self.CallMemoryBarrier),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSRTAUDIO_BUFFER32 {
                fn eq(&self, other: &Self) -> bool {
                    self.BufferAddress == other.BufferAddress
                        && self.ActualBufferSize == other.ActualBufferSize
                        && self.CallMemoryBarrier == other.CallMemoryBarrier
                }
            }
            impl ::std::cmp::Eq for KSRTAUDIO_BUFFER32 {}
            unsafe impl ::windows::Abi for KSRTAUDIO_BUFFER32 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSRTAUDIO_BUFFER_PROPERTY {
                pub Property: KSIDENTIFIER,
                pub BaseAddress: *mut ::std::ffi::c_void,
                pub RequestedBufferSize: u32,
            }
            impl KSRTAUDIO_BUFFER_PROPERTY {}
            unsafe impl ::windows::Abi for KSRTAUDIO_BUFFER_PROPERTY {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSRTAUDIO_BUFFER_PROPERTY32 {
                pub Property: KSIDENTIFIER,
                pub BaseAddress: u32,
                pub RequestedBufferSize: u32,
            }
            impl KSRTAUDIO_BUFFER_PROPERTY32 {}
            unsafe impl ::windows::Abi for KSRTAUDIO_BUFFER_PROPERTY32 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSRTAUDIO_BUFFER_PROPERTY_WITH_NOTIFICATION {
                pub Property: KSIDENTIFIER,
                pub BaseAddress: *mut ::std::ffi::c_void,
                pub RequestedBufferSize: u32,
                pub NotificationCount: u32,
            }
            impl KSRTAUDIO_BUFFER_PROPERTY_WITH_NOTIFICATION {}
            unsafe impl ::windows::Abi for KSRTAUDIO_BUFFER_PROPERTY_WITH_NOTIFICATION {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSRTAUDIO_BUFFER_PROPERTY_WITH_NOTIFICATION32 {
                pub Property: KSIDENTIFIER,
                pub BaseAddress: u32,
                pub RequestedBufferSize: u32,
                pub NotificationCount: u32,
            }
            impl KSRTAUDIO_BUFFER_PROPERTY_WITH_NOTIFICATION32 {}
            unsafe impl ::windows::Abi for KSRTAUDIO_BUFFER_PROPERTY_WITH_NOTIFICATION32 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSRTAUDIO_GETREADPACKET_INFO {
                pub PacketNumber: u32,
                pub Flags: u32,
                pub PerformanceCounterValue: u64,
                pub MoreData: super::SystemServices::BOOL,
            }
            impl KSRTAUDIO_GETREADPACKET_INFO {}
            impl ::std::default::Default for KSRTAUDIO_GETREADPACKET_INFO {
                fn default() -> Self {
                    Self {
                        PacketNumber: 0,
                        Flags: 0,
                        PerformanceCounterValue: 0,
                        MoreData: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for KSRTAUDIO_GETREADPACKET_INFO {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSRTAUDIO_GETREADPACKET_INFO")
                        .field("PacketNumber", &format_args!("{:?}", self.PacketNumber))
                        .field("Flags", &format_args!("{:?}", self.Flags))
                        .field(
                            "PerformanceCounterValue",
                            &format_args!("{:?}", self.PerformanceCounterValue),
                        )
                        .field("MoreData", &format_args!("{:?}", self.MoreData))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSRTAUDIO_GETREADPACKET_INFO {
                fn eq(&self, other: &Self) -> bool {
                    self.PacketNumber == other.PacketNumber
                        && self.Flags == other.Flags
                        && self.PerformanceCounterValue == other.PerformanceCounterValue
                        && self.MoreData == other.MoreData
                }
            }
            impl ::std::cmp::Eq for KSRTAUDIO_GETREADPACKET_INFO {}
            unsafe impl ::windows::Abi for KSRTAUDIO_GETREADPACKET_INFO {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSRTAUDIO_HWLATENCY {
                pub FifoSize: u32,
                pub ChipsetDelay: u32,
                pub CodecDelay: u32,
            }
            impl KSRTAUDIO_HWLATENCY {}
            impl ::std::default::Default for KSRTAUDIO_HWLATENCY {
                fn default() -> Self {
                    Self {
                        FifoSize: 0,
                        ChipsetDelay: 0,
                        CodecDelay: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSRTAUDIO_HWLATENCY {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSRTAUDIO_HWLATENCY")
                        .field("FifoSize", &format_args!("{:?}", self.FifoSize))
                        .field("ChipsetDelay", &format_args!("{:?}", self.ChipsetDelay))
                        .field("CodecDelay", &format_args!("{:?}", self.CodecDelay))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSRTAUDIO_HWLATENCY {
                fn eq(&self, other: &Self) -> bool {
                    self.FifoSize == other.FifoSize
                        && self.ChipsetDelay == other.ChipsetDelay
                        && self.CodecDelay == other.CodecDelay
                }
            }
            impl ::std::cmp::Eq for KSRTAUDIO_HWLATENCY {}
            unsafe impl ::windows::Abi for KSRTAUDIO_HWLATENCY {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSRTAUDIO_HWREGISTER {
                pub Register: *mut ::std::ffi::c_void,
                pub Width: u32,
                pub Numerator: u64,
                pub Denominator: u64,
                pub Accuracy: u32,
            }
            impl KSRTAUDIO_HWREGISTER {}
            impl ::std::default::Default for KSRTAUDIO_HWREGISTER {
                fn default() -> Self {
                    Self {
                        Register: ::std::ptr::null_mut(),
                        Width: 0,
                        Numerator: 0,
                        Denominator: 0,
                        Accuracy: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSRTAUDIO_HWREGISTER {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSRTAUDIO_HWREGISTER")
                        .field("Register", &format_args!("{:?}", self.Register))
                        .field("Width", &format_args!("{:?}", self.Width))
                        .field("Numerator", &format_args!("{:?}", self.Numerator))
                        .field("Denominator", &format_args!("{:?}", self.Denominator))
                        .field("Accuracy", &format_args!("{:?}", self.Accuracy))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSRTAUDIO_HWREGISTER {
                fn eq(&self, other: &Self) -> bool {
                    self.Register == other.Register
                        && self.Width == other.Width
                        && self.Numerator == other.Numerator
                        && self.Denominator == other.Denominator
                        && self.Accuracy == other.Accuracy
                }
            }
            impl ::std::cmp::Eq for KSRTAUDIO_HWREGISTER {}
            unsafe impl ::windows::Abi for KSRTAUDIO_HWREGISTER {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSRTAUDIO_HWREGISTER32 {
                pub Register: u32,
                pub Width: u32,
                pub Numerator: u64,
                pub Denominator: u64,
                pub Accuracy: u32,
            }
            impl KSRTAUDIO_HWREGISTER32 {}
            impl ::std::default::Default for KSRTAUDIO_HWREGISTER32 {
                fn default() -> Self {
                    Self {
                        Register: 0,
                        Width: 0,
                        Numerator: 0,
                        Denominator: 0,
                        Accuracy: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSRTAUDIO_HWREGISTER32 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSRTAUDIO_HWREGISTER32")
                        .field("Register", &format_args!("{:?}", self.Register))
                        .field("Width", &format_args!("{:?}", self.Width))
                        .field("Numerator", &format_args!("{:?}", self.Numerator))
                        .field("Denominator", &format_args!("{:?}", self.Denominator))
                        .field("Accuracy", &format_args!("{:?}", self.Accuracy))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSRTAUDIO_HWREGISTER32 {
                fn eq(&self, other: &Self) -> bool {
                    self.Register == other.Register
                        && self.Width == other.Width
                        && self.Numerator == other.Numerator
                        && self.Denominator == other.Denominator
                        && self.Accuracy == other.Accuracy
                }
            }
            impl ::std::cmp::Eq for KSRTAUDIO_HWREGISTER32 {}
            unsafe impl ::windows::Abi for KSRTAUDIO_HWREGISTER32 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSRTAUDIO_HWREGISTER_PROPERTY {
                pub Property: KSIDENTIFIER,
                pub BaseAddress: *mut ::std::ffi::c_void,
            }
            impl KSRTAUDIO_HWREGISTER_PROPERTY {}
            unsafe impl ::windows::Abi for KSRTAUDIO_HWREGISTER_PROPERTY {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSRTAUDIO_HWREGISTER_PROPERTY32 {
                pub Property: KSIDENTIFIER,
                pub BaseAddress: u32,
            }
            impl KSRTAUDIO_HWREGISTER_PROPERTY32 {}
            unsafe impl ::windows::Abi for KSRTAUDIO_HWREGISTER_PROPERTY32 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSRTAUDIO_NOTIFICATION_EVENT_PROPERTY {
                pub Property: KSIDENTIFIER,
                pub NotificationEvent: super::SystemServices::HANDLE,
            }
            impl KSRTAUDIO_NOTIFICATION_EVENT_PROPERTY {}
            unsafe impl ::windows::Abi for KSRTAUDIO_NOTIFICATION_EVENT_PROPERTY {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSRTAUDIO_NOTIFICATION_EVENT_PROPERTY32 {
                pub Property: KSIDENTIFIER,
                pub NotificationEvent: u32,
            }
            impl KSRTAUDIO_NOTIFICATION_EVENT_PROPERTY32 {}
            unsafe impl ::windows::Abi for KSRTAUDIO_NOTIFICATION_EVENT_PROPERTY32 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSRTAUDIO_PACKETVREGISTER {
                pub CompletedPacketCount: *mut u64,
                pub CompletedPacketQPC: *mut u64,
                pub CompletedPacketHash: *mut u64,
            }
            impl KSRTAUDIO_PACKETVREGISTER {}
            impl ::std::default::Default for KSRTAUDIO_PACKETVREGISTER {
                fn default() -> Self {
                    Self {
                        CompletedPacketCount: ::std::ptr::null_mut(),
                        CompletedPacketQPC: ::std::ptr::null_mut(),
                        CompletedPacketHash: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for KSRTAUDIO_PACKETVREGISTER {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSRTAUDIO_PACKETVREGISTER")
                        .field(
                            "CompletedPacketCount",
                            &format_args!("{:?}", self.CompletedPacketCount),
                        )
                        .field(
                            "CompletedPacketQPC",
                            &format_args!("{:?}", self.CompletedPacketQPC),
                        )
                        .field(
                            "CompletedPacketHash",
                            &format_args!("{:?}", self.CompletedPacketHash),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSRTAUDIO_PACKETVREGISTER {
                fn eq(&self, other: &Self) -> bool {
                    self.CompletedPacketCount == other.CompletedPacketCount
                        && self.CompletedPacketQPC == other.CompletedPacketQPC
                        && self.CompletedPacketHash == other.CompletedPacketHash
                }
            }
            impl ::std::cmp::Eq for KSRTAUDIO_PACKETVREGISTER {}
            unsafe impl ::windows::Abi for KSRTAUDIO_PACKETVREGISTER {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSRTAUDIO_PACKETVREGISTER_PROPERTY {
                pub Property: KSIDENTIFIER,
                pub BaseAddress: *mut ::std::ffi::c_void,
            }
            impl KSRTAUDIO_PACKETVREGISTER_PROPERTY {}
            unsafe impl ::windows::Abi for KSRTAUDIO_PACKETVREGISTER_PROPERTY {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSRTAUDIO_SETWRITEPACKET_INFO {
                pub PacketNumber: u32,
                pub Flags: u32,
                pub EosPacketLength: u32,
            }
            impl KSRTAUDIO_SETWRITEPACKET_INFO {}
            impl ::std::default::Default for KSRTAUDIO_SETWRITEPACKET_INFO {
                fn default() -> Self {
                    Self {
                        PacketNumber: 0,
                        Flags: 0,
                        EosPacketLength: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSRTAUDIO_SETWRITEPACKET_INFO {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSRTAUDIO_SETWRITEPACKET_INFO")
                        .field("PacketNumber", &format_args!("{:?}", self.PacketNumber))
                        .field("Flags", &format_args!("{:?}", self.Flags))
                        .field(
                            "EosPacketLength",
                            &format_args!("{:?}", self.EosPacketLength),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSRTAUDIO_SETWRITEPACKET_INFO {
                fn eq(&self, other: &Self) -> bool {
                    self.PacketNumber == other.PacketNumber
                        && self.Flags == other.Flags
                        && self.EosPacketLength == other.EosPacketLength
                }
            }
            impl ::std::cmp::Eq for KSRTAUDIO_SETWRITEPACKET_INFO {}
            unsafe impl ::windows::Abi for KSRTAUDIO_SETWRITEPACKET_INFO {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSSOUNDDETECTORPROPERTY {
                pub Property: KSIDENTIFIER,
                pub EventId: ::windows::Guid,
            }
            impl KSSOUNDDETECTORPROPERTY {}
            unsafe impl ::windows::Abi for KSSOUNDDETECTORPROPERTY {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KSSTATE(pub i32);
            impl KSSTATE {
                pub const KSSTATE_STOP: Self = Self(0i32);
                pub const KSSTATE_ACQUIRE: Self = Self(1i32);
                pub const KSSTATE_PAUSE: Self = Self(2i32);
                pub const KSSTATE_RUN: Self = Self(3i32);
            }
            impl ::std::convert::From<i32> for KSSTATE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KSSTATE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSSTREAMALLOCATOR_STATUS {
                pub Framing: KSALLOCATOR_FRAMING,
                pub AllocatedFrames: u32,
                pub Reserved: u32,
            }
            impl KSSTREAMALLOCATOR_STATUS {}
            unsafe impl ::windows::Abi for KSSTREAMALLOCATOR_STATUS {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSSTREAMALLOCATOR_STATUS_EX {
                pub Framing: KSALLOCATOR_FRAMING_EX,
                pub AllocatedFrames: u32,
                pub Reserved: u32,
            }
            impl KSSTREAMALLOCATOR_STATUS_EX {}
            unsafe impl ::windows::Abi for KSSTREAMALLOCATOR_STATUS_EX {
                type Abi = Self;
            }
            pub const KSSTREAM_FAILUREEXCEPTION: u32 = 8192u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSTIME {
                pub Time: i64,
                pub Numerator: u32,
                pub Denominator: u32,
            }
            impl KSTIME {}
            impl ::std::default::Default for KSTIME {
                fn default() -> Self {
                    Self {
                        Time: 0,
                        Numerator: 0,
                        Denominator: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSTIME {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSTIME")
                        .field("Time", &format_args!("{:?}", self.Time))
                        .field("Numerator", &format_args!("{:?}", self.Numerator))
                        .field("Denominator", &format_args!("{:?}", self.Denominator))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSTIME {
                fn eq(&self, other: &Self) -> bool {
                    self.Time == other.Time
                        && self.Numerator == other.Numerator
                        && self.Denominator == other.Denominator
                }
            }
            impl ::std::cmp::Eq for KSTIME {}
            unsafe impl ::windows::Abi for KSTIME {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSSTREAM_HEADER {
                pub Size: u32,
                pub TypeSpecificFlags: u32,
                pub PresentationTime: KSTIME,
                pub Duration: i64,
                pub FrameExtent: u32,
                pub DataUsed: u32,
                pub Data: *mut ::std::ffi::c_void,
                pub OptionsFlags: u32,
                pub Reserved: u32,
            }
            impl KSSTREAM_HEADER {}
            impl ::std::default::Default for KSSTREAM_HEADER {
                fn default() -> Self {
                    Self {
                        Size: 0,
                        TypeSpecificFlags: 0,
                        PresentationTime: ::std::default::Default::default(),
                        Duration: 0,
                        FrameExtent: 0,
                        DataUsed: 0,
                        Data: ::std::ptr::null_mut(),
                        OptionsFlags: 0,
                        Reserved: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSSTREAM_HEADER {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSSTREAM_HEADER")
                        .field("Size", &format_args!("{:?}", self.Size))
                        .field(
                            "TypeSpecificFlags",
                            &format_args!("{:?}", self.TypeSpecificFlags),
                        )
                        .field(
                            "PresentationTime",
                            &format_args!("{:?}", self.PresentationTime),
                        )
                        .field("Duration", &format_args!("{:?}", self.Duration))
                        .field("FrameExtent", &format_args!("{:?}", self.FrameExtent))
                        .field("DataUsed", &format_args!("{:?}", self.DataUsed))
                        .field("Data", &format_args!("{:?}", self.Data))
                        .field("OptionsFlags", &format_args!("{:?}", self.OptionsFlags))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSSTREAM_HEADER {
                fn eq(&self, other: &Self) -> bool {
                    self.Size == other.Size
                        && self.TypeSpecificFlags == other.TypeSpecificFlags
                        && self.PresentationTime == other.PresentationTime
                        && self.Duration == other.Duration
                        && self.FrameExtent == other.FrameExtent
                        && self.DataUsed == other.DataUsed
                        && self.Data == other.Data
                        && self.OptionsFlags == other.OptionsFlags
                        && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for KSSTREAM_HEADER {}
            unsafe impl ::windows::Abi for KSSTREAM_HEADER {
                type Abi = Self;
            }
            pub const KSSTREAM_HEADER_OPTIONSF_BUFFEREDTRANSFER: u32 = 1024u32;
            pub const KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY: u32 = 4u32;
            pub const KSSTREAM_HEADER_OPTIONSF_DURATIONVALID: u32 = 256u32;
            pub const KSSTREAM_HEADER_OPTIONSF_ENDOFPHOTOSEQUENCE: u32 = 8192u32;
            pub const KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM: u32 = 512u32;
            pub const KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE: u32 = 128u32;
            pub const KSSTREAM_HEADER_OPTIONSF_FRAMEINFO: u32 = 16384u32;
            pub const KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA: u32 = 2147483648u32;
            pub const KSSTREAM_HEADER_OPTIONSF_METADATA: u32 = 4096u32;
            pub const KSSTREAM_HEADER_OPTIONSF_PERSIST_SAMPLE: u32 = 32768u32;
            pub const KSSTREAM_HEADER_OPTIONSF_PREROLL: u32 = 2u32;
            pub const KSSTREAM_HEADER_OPTIONSF_SAMPLE_PERSISTED: u32 = 65536u32;
            pub const KSSTREAM_HEADER_OPTIONSF_SECUREBUFFERTRANSFER: u32 = 262144u32;
            pub const KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT: u32 = 1u32;
            pub const KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY: u32 = 64u32;
            pub const KSSTREAM_HEADER_OPTIONSF_TIMEVALID: u32 = 16u32;
            pub const KSSTREAM_HEADER_OPTIONSF_TYPECHANGED: u32 = 8u32;
            pub const KSSTREAM_HEADER_OPTIONSF_VRAM_DATA_TRANSFER: u32 = 2048u32;
            pub const KSSTREAM_HEADER_TRACK_COMPLETION_NUMBERS: u32 = 131072u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSSTREAM_METADATA_INFO {
                pub BufferSize: u32,
                pub UsedSize: u32,
                pub Data: *mut ::std::ffi::c_void,
                pub SystemVa: *mut ::std::ffi::c_void,
                pub Flags: u32,
                pub Reserved: u32,
            }
            impl KSSTREAM_METADATA_INFO {}
            impl ::std::default::Default for KSSTREAM_METADATA_INFO {
                fn default() -> Self {
                    Self {
                        BufferSize: 0,
                        UsedSize: 0,
                        Data: ::std::ptr::null_mut(),
                        SystemVa: ::std::ptr::null_mut(),
                        Flags: 0,
                        Reserved: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSSTREAM_METADATA_INFO {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSSTREAM_METADATA_INFO")
                        .field("BufferSize", &format_args!("{:?}", self.BufferSize))
                        .field("UsedSize", &format_args!("{:?}", self.UsedSize))
                        .field("Data", &format_args!("{:?}", self.Data))
                        .field("SystemVa", &format_args!("{:?}", self.SystemVa))
                        .field("Flags", &format_args!("{:?}", self.Flags))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSSTREAM_METADATA_INFO {
                fn eq(&self, other: &Self) -> bool {
                    self.BufferSize == other.BufferSize
                        && self.UsedSize == other.UsedSize
                        && self.Data == other.Data
                        && self.SystemVa == other.SystemVa
                        && self.Flags == other.Flags
                        && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for KSSTREAM_METADATA_INFO {}
            unsafe impl ::windows::Abi for KSSTREAM_METADATA_INFO {
                type Abi = Self;
            }
            pub const KSSTREAM_NONPAGED_DATA: u32 = 256u32;
            pub const KSSTREAM_PAGED_DATA: u32 = 0u32;
            pub const KSSTREAM_SYNCHRONOUS: u32 = 4096u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSSTREAM_UVC_METADATATYPE_TIMESTAMP {
                pub PresentationTimeStamp: u32,
                pub SourceClockReference: u32,
                pub Anonymous: KSSTREAM_UVC_METADATATYPE_TIMESTAMP_0,
                pub Reserved0: u16,
                pub Reserved1: u32,
            }
            impl KSSTREAM_UVC_METADATATYPE_TIMESTAMP {}
            unsafe impl ::windows::Abi for KSSTREAM_UVC_METADATATYPE_TIMESTAMP {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union KSSTREAM_UVC_METADATATYPE_TIMESTAMP_0 {
                pub Anonymous: KSSTREAM_UVC_METADATATYPE_TIMESTAMP_0_0,
                pub SCRToken: u16,
            }
            impl KSSTREAM_UVC_METADATATYPE_TIMESTAMP_0 {}
            unsafe impl ::windows::Abi for KSSTREAM_UVC_METADATATYPE_TIMESTAMP_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSSTREAM_UVC_METADATATYPE_TIMESTAMP_0_0 {
                pub _bitfield: u16,
            }
            impl KSSTREAM_UVC_METADATATYPE_TIMESTAMP_0_0 {}
            impl ::std::default::Default for KSSTREAM_UVC_METADATATYPE_TIMESTAMP_0_0 {
                fn default() -> Self {
                    Self { _bitfield: 0 }
                }
            }
            impl ::std::fmt::Debug for KSSTREAM_UVC_METADATATYPE_TIMESTAMP_0_0 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_Anonymous_e__Struct")
                        .field("_bitfield", &format_args!("{:?}", self._bitfield))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSSTREAM_UVC_METADATATYPE_TIMESTAMP_0_0 {
                fn eq(&self, other: &Self) -> bool {
                    self._bitfield == other._bitfield
                }
            }
            impl ::std::cmp::Eq for KSSTREAM_UVC_METADATATYPE_TIMESTAMP_0_0 {}
            unsafe impl ::windows::Abi for KSSTREAM_UVC_METADATATYPE_TIMESTAMP_0_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSSTREAM_UVC_METADATA {
                pub StartOfFrameTimestamp: KSSTREAM_UVC_METADATATYPE_TIMESTAMP,
                pub EndOfFrameTimestamp: KSSTREAM_UVC_METADATATYPE_TIMESTAMP,
            }
            impl KSSTREAM_UVC_METADATA {}
            unsafe impl ::windows::Abi for KSSTREAM_UVC_METADATA {
                type Abi = Self;
            }
            pub const KSSTREAM_UVC_SECURE_ATTRIBUTE_SIZE: u32 = 8192u32;
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct TELEPHONY_CALLTYPE(pub i32);
            impl TELEPHONY_CALLTYPE {
                pub const TELEPHONY_CALLTYPE_CIRCUITSWITCHED: Self = Self(0i32);
                pub const TELEPHONY_CALLTYPE_PACKETSWITCHED_LTE: Self = Self(1i32);
                pub const TELEPHONY_CALLTYPE_PACKETSWITCHED_WLAN: Self = Self(2i32);
            }
            impl ::std::convert::From<i32> for TELEPHONY_CALLTYPE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for TELEPHONY_CALLTYPE {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct TELEPHONY_CALLCONTROLOP(pub i32);
            impl TELEPHONY_CALLCONTROLOP {
                pub const TELEPHONY_CALLCONTROLOP_DISABLE: Self = Self(0i32);
                pub const TELEPHONY_CALLCONTROLOP_ENABLE: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for TELEPHONY_CALLCONTROLOP {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for TELEPHONY_CALLCONTROLOP {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSTELEPHONY_CALLCONTROL {
                pub CallType: TELEPHONY_CALLTYPE,
                pub CallControlOp: TELEPHONY_CALLCONTROLOP,
            }
            impl KSTELEPHONY_CALLCONTROL {}
            impl ::std::default::Default for KSTELEPHONY_CALLCONTROL {
                fn default() -> Self {
                    Self {
                        CallType: ::std::default::Default::default(),
                        CallControlOp: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for KSTELEPHONY_CALLCONTROL {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSTELEPHONY_CALLCONTROL")
                        .field("CallType", &format_args!("{:?}", self.CallType))
                        .field("CallControlOp", &format_args!("{:?}", self.CallControlOp))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSTELEPHONY_CALLCONTROL {
                fn eq(&self, other: &Self) -> bool {
                    self.CallType == other.CallType && self.CallControlOp == other.CallControlOp
                }
            }
            impl ::std::cmp::Eq for KSTELEPHONY_CALLCONTROL {}
            unsafe impl ::windows::Abi for KSTELEPHONY_CALLCONTROL {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct TELEPHONY_CALLSTATE(pub i32);
            impl TELEPHONY_CALLSTATE {
                pub const TELEPHONY_CALLSTATE_DISABLED: Self = Self(0i32);
                pub const TELEPHONY_CALLSTATE_ENABLED: Self = Self(1i32);
                pub const TELEPHONY_CALLSTATE_HOLD: Self = Self(2i32);
                pub const TELEPHONY_CALLSTATE_PROVIDERTRANSITION: Self = Self(3i32);
            }
            impl ::std::convert::From<i32> for TELEPHONY_CALLSTATE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for TELEPHONY_CALLSTATE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSTELEPHONY_CALLINFO {
                pub CallType: TELEPHONY_CALLTYPE,
                pub CallState: TELEPHONY_CALLSTATE,
            }
            impl KSTELEPHONY_CALLINFO {}
            impl ::std::default::Default for KSTELEPHONY_CALLINFO {
                fn default() -> Self {
                    Self {
                        CallType: ::std::default::Default::default(),
                        CallState: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for KSTELEPHONY_CALLINFO {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSTELEPHONY_CALLINFO")
                        .field("CallType", &format_args!("{:?}", self.CallType))
                        .field("CallState", &format_args!("{:?}", self.CallState))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSTELEPHONY_CALLINFO {
                fn eq(&self, other: &Self) -> bool {
                    self.CallType == other.CallType && self.CallState == other.CallState
                }
            }
            impl ::std::cmp::Eq for KSTELEPHONY_CALLINFO {}
            unsafe impl ::windows::Abi for KSTELEPHONY_CALLINFO {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct TELEPHONY_PROVIDERCHANGEOP(pub i32);
            impl TELEPHONY_PROVIDERCHANGEOP {
                pub const TELEPHONY_PROVIDERCHANGEOP_END: Self = Self(0i32);
                pub const TELEPHONY_PROVIDERCHANGEOP_BEGIN: Self = Self(1i32);
                pub const TELEPHONY_PROVIDERCHANGEOP_CANCEL: Self = Self(2i32);
            }
            impl ::std::convert::From<i32> for TELEPHONY_PROVIDERCHANGEOP {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for TELEPHONY_PROVIDERCHANGEOP {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSTELEPHONY_PROVIDERCHANGE {
                pub CallType: TELEPHONY_CALLTYPE,
                pub ProviderChangeOp: TELEPHONY_PROVIDERCHANGEOP,
            }
            impl KSTELEPHONY_PROVIDERCHANGE {}
            impl ::std::default::Default for KSTELEPHONY_PROVIDERCHANGE {
                fn default() -> Self {
                    Self {
                        CallType: ::std::default::Default::default(),
                        ProviderChangeOp: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for KSTELEPHONY_PROVIDERCHANGE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSTELEPHONY_PROVIDERCHANGE")
                        .field("CallType", &format_args!("{:?}", self.CallType))
                        .field(
                            "ProviderChangeOp",
                            &format_args!("{:?}", self.ProviderChangeOp),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSTELEPHONY_PROVIDERCHANGE {
                fn eq(&self, other: &Self) -> bool {
                    self.CallType == other.CallType
                        && self.ProviderChangeOp == other.ProviderChangeOp
                }
            }
            impl ::std::cmp::Eq for KSTELEPHONY_PROVIDERCHANGE {}
            unsafe impl ::windows::Abi for KSTELEPHONY_PROVIDERCHANGE {
                type Abi = Self;
            }
            pub const KSTIME_FORMAT_BYTE: ::windows::Guid = ::windows::Guid::from_values(
                2071483761,
                35970,
                4559,
                [188, 12, 0, 170, 0, 172, 116, 246],
            );
            pub const KSTIME_FORMAT_FIELD: ::windows::Guid = ::windows::Guid::from_values(
                2071483763,
                35970,
                4559,
                [188, 12, 0, 170, 0, 172, 116, 246],
            );
            pub const KSTIME_FORMAT_FRAME: ::windows::Guid = ::windows::Guid::from_values(
                2071483760,
                35970,
                4559,
                [188, 12, 0, 170, 0, 172, 116, 246],
            );
            pub const KSTIME_FORMAT_MEDIA_TIME: ::windows::Guid = ::windows::Guid::from_values(
                2071483764,
                35970,
                4559,
                [188, 12, 0, 170, 0, 172, 116, 246],
            );
            pub const KSTIME_FORMAT_SAMPLE: ::windows::Guid = ::windows::Guid::from_values(
                2071483762,
                35970,
                4559,
                [188, 12, 0, 170, 0, 172, 116, 246],
            );
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSTOPOLOGY {
                pub CategoriesCount: u32,
                pub Categories: *mut ::windows::Guid,
                pub TopologyNodesCount: u32,
                pub TopologyNodes: *mut ::windows::Guid,
                pub TopologyConnectionsCount: u32,
                pub TopologyConnections: *mut super::DirectShow::KSTOPOLOGY_CONNECTION,
                pub TopologyNodesNames: *mut ::windows::Guid,
                pub Reserved: u32,
            }
            impl KSTOPOLOGY {}
            impl ::std::default::Default for KSTOPOLOGY {
                fn default() -> Self {
                    Self {
                        CategoriesCount: 0,
                        Categories: ::std::ptr::null_mut(),
                        TopologyNodesCount: 0,
                        TopologyNodes: ::std::ptr::null_mut(),
                        TopologyConnectionsCount: 0,
                        TopologyConnections: ::std::ptr::null_mut(),
                        TopologyNodesNames: ::std::ptr::null_mut(),
                        Reserved: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSTOPOLOGY {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSTOPOLOGY")
                        .field(
                            "CategoriesCount",
                            &format_args!("{:?}", self.CategoriesCount),
                        )
                        .field("Categories", &format_args!("{:?}", self.Categories))
                        .field(
                            "TopologyNodesCount",
                            &format_args!("{:?}", self.TopologyNodesCount),
                        )
                        .field("TopologyNodes", &format_args!("{:?}", self.TopologyNodes))
                        .field(
                            "TopologyConnectionsCount",
                            &format_args!("{:?}", self.TopologyConnectionsCount),
                        )
                        .field(
                            "TopologyConnections",
                            &format_args!("{:?}", self.TopologyConnections),
                        )
                        .field(
                            "TopologyNodesNames",
                            &format_args!("{:?}", self.TopologyNodesNames),
                        )
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSTOPOLOGY {
                fn eq(&self, other: &Self) -> bool {
                    self.CategoriesCount == other.CategoriesCount
                        && self.Categories == other.Categories
                        && self.TopologyNodesCount == other.TopologyNodesCount
                        && self.TopologyNodes == other.TopologyNodes
                        && self.TopologyConnectionsCount == other.TopologyConnectionsCount
                        && self.TopologyConnections == other.TopologyConnections
                        && self.TopologyNodesNames == other.TopologyNodesNames
                        && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for KSTOPOLOGY {}
            unsafe impl ::windows::Abi for KSTOPOLOGY {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSTOPOLOGY_ENDPOINTID {
                pub TopologyName: [u16; 260],
                pub PinId: u32,
            }
            impl KSTOPOLOGY_ENDPOINTID {}
            impl ::std::default::Default for KSTOPOLOGY_ENDPOINTID {
                fn default() -> Self {
                    Self {
                        TopologyName: [0; 260],
                        PinId: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSTOPOLOGY_ENDPOINTID {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSTOPOLOGY_ENDPOINTID")
                        .field("TopologyName", &format_args!("{:?}", self.TopologyName))
                        .field("PinId", &format_args!("{:?}", self.PinId))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSTOPOLOGY_ENDPOINTID {
                fn eq(&self, other: &Self) -> bool {
                    self.TopologyName == other.TopologyName && self.PinId == other.PinId
                }
            }
            impl ::std::cmp::Eq for KSTOPOLOGY_ENDPOINTID {}
            unsafe impl ::windows::Abi for KSTOPOLOGY_ENDPOINTID {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSTOPOLOGY_ENDPOINTIDPAIR {
                pub RenderEndpoint: KSTOPOLOGY_ENDPOINTID,
                pub CaptureEndpoint: KSTOPOLOGY_ENDPOINTID,
            }
            impl KSTOPOLOGY_ENDPOINTIDPAIR {}
            impl ::std::default::Default for KSTOPOLOGY_ENDPOINTIDPAIR {
                fn default() -> Self {
                    Self {
                        RenderEndpoint: ::std::default::Default::default(),
                        CaptureEndpoint: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for KSTOPOLOGY_ENDPOINTIDPAIR {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSTOPOLOGY_ENDPOINTIDPAIR")
                        .field("RenderEndpoint", &format_args!("{:?}", self.RenderEndpoint))
                        .field(
                            "CaptureEndpoint",
                            &format_args!("{:?}", self.CaptureEndpoint),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSTOPOLOGY_ENDPOINTIDPAIR {
                fn eq(&self, other: &Self) -> bool {
                    self.RenderEndpoint == other.RenderEndpoint
                        && self.CaptureEndpoint == other.CaptureEndpoint
                }
            }
            impl ::std::cmp::Eq for KSTOPOLOGY_ENDPOINTIDPAIR {}
            unsafe impl ::windows::Abi for KSTOPOLOGY_ENDPOINTIDPAIR {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_AMVPSIZE {
                pub dwWidth: u32,
                pub dwHeight: u32,
            }
            impl KS_AMVPSIZE {}
            impl ::std::default::Default for KS_AMVPSIZE {
                fn default() -> Self {
                    Self {
                        dwWidth: 0,
                        dwHeight: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KS_AMVPSIZE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_AMVPSIZE")
                        .field("dwWidth", &format_args!("{:?}", self.dwWidth))
                        .field("dwHeight", &format_args!("{:?}", self.dwHeight))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_AMVPSIZE {
                fn eq(&self, other: &Self) -> bool {
                    self.dwWidth == other.dwWidth && self.dwHeight == other.dwHeight
                }
            }
            impl ::std::cmp::Eq for KS_AMVPSIZE {}
            unsafe impl ::windows::Abi for KS_AMVPSIZE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSVPMAXPIXELRATE {
                pub Size: KS_AMVPSIZE,
                pub MaxPixelsPerSecond: u32,
                pub Reserved: u32,
            }
            impl KSVPMAXPIXELRATE {}
            impl ::std::default::Default for KSVPMAXPIXELRATE {
                fn default() -> Self {
                    Self {
                        Size: ::std::default::Default::default(),
                        MaxPixelsPerSecond: 0,
                        Reserved: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSVPMAXPIXELRATE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSVPMAXPIXELRATE")
                        .field("Size", &format_args!("{:?}", self.Size))
                        .field(
                            "MaxPixelsPerSecond",
                            &format_args!("{:?}", self.MaxPixelsPerSecond),
                        )
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSVPMAXPIXELRATE {
                fn eq(&self, other: &Self) -> bool {
                    self.Size == other.Size
                        && self.MaxPixelsPerSecond == other.MaxPixelsPerSecond
                        && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for KSVPMAXPIXELRATE {}
            unsafe impl ::windows::Abi for KSVPMAXPIXELRATE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSVPSIZE_PROP {
                pub Property: KSIDENTIFIER,
                pub Size: KS_AMVPSIZE,
            }
            impl KSVPSIZE_PROP {}
            unsafe impl ::windows::Abi for KSVPSIZE_PROP {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSVPSURFACEPARAMS {
                pub dwPitch: u32,
                pub dwXOrigin: u32,
                pub dwYOrigin: u32,
            }
            impl KSVPSURFACEPARAMS {}
            impl ::std::default::Default for KSVPSURFACEPARAMS {
                fn default() -> Self {
                    Self {
                        dwPitch: 0,
                        dwXOrigin: 0,
                        dwYOrigin: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSVPSURFACEPARAMS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSVPSURFACEPARAMS")
                        .field("dwPitch", &format_args!("{:?}", self.dwPitch))
                        .field("dwXOrigin", &format_args!("{:?}", self.dwXOrigin))
                        .field("dwYOrigin", &format_args!("{:?}", self.dwYOrigin))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSVPSURFACEPARAMS {
                fn eq(&self, other: &Self) -> bool {
                    self.dwPitch == other.dwPitch
                        && self.dwXOrigin == other.dwXOrigin
                        && self.dwYOrigin == other.dwYOrigin
                }
            }
            impl ::std::cmp::Eq for KSVPSURFACEPARAMS {}
            unsafe impl ::windows::Abi for KSVPSURFACEPARAMS {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSWAVETABLE_WAVE_DESC {
                pub Identifier: KSIDENTIFIER,
                pub Size: u32,
                pub Looped: super::SystemServices::BOOL,
                pub LoopPoint: u32,
                pub InROM: super::SystemServices::BOOL,
                pub Format: KSDATAFORMAT,
            }
            impl KSWAVETABLE_WAVE_DESC {}
            unsafe impl ::windows::Abi for KSWAVETABLE_WAVE_DESC {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSWAVE_BUFFER {
                pub Attributes: u32,
                pub BufferSize: u32,
                pub BufferAddress: *mut ::std::ffi::c_void,
            }
            impl KSWAVE_BUFFER {}
            impl ::std::default::Default for KSWAVE_BUFFER {
                fn default() -> Self {
                    Self {
                        Attributes: 0,
                        BufferSize: 0,
                        BufferAddress: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for KSWAVE_BUFFER {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSWAVE_BUFFER")
                        .field("Attributes", &format_args!("{:?}", self.Attributes))
                        .field("BufferSize", &format_args!("{:?}", self.BufferSize))
                        .field("BufferAddress", &format_args!("{:?}", self.BufferAddress))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSWAVE_BUFFER {
                fn eq(&self, other: &Self) -> bool {
                    self.Attributes == other.Attributes
                        && self.BufferSize == other.BufferSize
                        && self.BufferAddress == other.BufferAddress
                }
            }
            impl ::std::cmp::Eq for KSWAVE_BUFFER {}
            unsafe impl ::windows::Abi for KSWAVE_BUFFER {
                type Abi = Self;
            }
            pub const KSWAVE_BUFFER_ATTRIBUTEF_LOOPING: u32 = 1u32;
            pub const KSWAVE_BUFFER_ATTRIBUTEF_STATIC: u32 = 2u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSWAVE_COMPATCAPS {
                pub ulDeviceType: u32,
            }
            impl KSWAVE_COMPATCAPS {}
            impl ::std::default::Default for KSWAVE_COMPATCAPS {
                fn default() -> Self {
                    Self { ulDeviceType: 0 }
                }
            }
            impl ::std::fmt::Debug for KSWAVE_COMPATCAPS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSWAVE_COMPATCAPS")
                        .field("ulDeviceType", &format_args!("{:?}", self.ulDeviceType))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSWAVE_COMPATCAPS {
                fn eq(&self, other: &Self) -> bool {
                    self.ulDeviceType == other.ulDeviceType
                }
            }
            impl ::std::cmp::Eq for KSWAVE_COMPATCAPS {}
            unsafe impl ::windows::Abi for KSWAVE_COMPATCAPS {
                type Abi = Self;
            }
            pub const KSWAVE_COMPATCAPS_INPUT: u32 = 0u32;
            pub const KSWAVE_COMPATCAPS_OUTPUT: u32 = 1u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSWAVE_INPUT_CAPABILITIES {
                pub MaximumChannelsPerConnection: u32,
                pub MinimumBitsPerSample: u32,
                pub MaximumBitsPerSample: u32,
                pub MinimumSampleFrequency: u32,
                pub MaximumSampleFrequency: u32,
                pub TotalConnections: u32,
                pub ActiveConnections: u32,
            }
            impl KSWAVE_INPUT_CAPABILITIES {}
            impl ::std::default::Default for KSWAVE_INPUT_CAPABILITIES {
                fn default() -> Self {
                    Self {
                        MaximumChannelsPerConnection: 0,
                        MinimumBitsPerSample: 0,
                        MaximumBitsPerSample: 0,
                        MinimumSampleFrequency: 0,
                        MaximumSampleFrequency: 0,
                        TotalConnections: 0,
                        ActiveConnections: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSWAVE_INPUT_CAPABILITIES {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSWAVE_INPUT_CAPABILITIES")
                        .field(
                            "MaximumChannelsPerConnection",
                            &format_args!("{:?}", self.MaximumChannelsPerConnection),
                        )
                        .field(
                            "MinimumBitsPerSample",
                            &format_args!("{:?}", self.MinimumBitsPerSample),
                        )
                        .field(
                            "MaximumBitsPerSample",
                            &format_args!("{:?}", self.MaximumBitsPerSample),
                        )
                        .field(
                            "MinimumSampleFrequency",
                            &format_args!("{:?}", self.MinimumSampleFrequency),
                        )
                        .field(
                            "MaximumSampleFrequency",
                            &format_args!("{:?}", self.MaximumSampleFrequency),
                        )
                        .field(
                            "TotalConnections",
                            &format_args!("{:?}", self.TotalConnections),
                        )
                        .field(
                            "ActiveConnections",
                            &format_args!("{:?}", self.ActiveConnections),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSWAVE_INPUT_CAPABILITIES {
                fn eq(&self, other: &Self) -> bool {
                    self.MaximumChannelsPerConnection == other.MaximumChannelsPerConnection
                        && self.MinimumBitsPerSample == other.MinimumBitsPerSample
                        && self.MaximumBitsPerSample == other.MaximumBitsPerSample
                        && self.MinimumSampleFrequency == other.MinimumSampleFrequency
                        && self.MaximumSampleFrequency == other.MaximumSampleFrequency
                        && self.TotalConnections == other.TotalConnections
                        && self.ActiveConnections == other.ActiveConnections
                }
            }
            impl ::std::cmp::Eq for KSWAVE_INPUT_CAPABILITIES {}
            unsafe impl ::windows::Abi for KSWAVE_INPUT_CAPABILITIES {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSWAVE_OUTPUT_CAPABILITIES {
                pub MaximumChannelsPerConnection: u32,
                pub MinimumBitsPerSample: u32,
                pub MaximumBitsPerSample: u32,
                pub MinimumSampleFrequency: u32,
                pub MaximumSampleFrequency: u32,
                pub TotalConnections: u32,
                pub StaticConnections: u32,
                pub StreamingConnections: u32,
                pub ActiveConnections: u32,
                pub ActiveStaticConnections: u32,
                pub ActiveStreamingConnections: u32,
                pub Total3DConnections: u32,
                pub Static3DConnections: u32,
                pub Streaming3DConnections: u32,
                pub Active3DConnections: u32,
                pub ActiveStatic3DConnections: u32,
                pub ActiveStreaming3DConnections: u32,
                pub TotalSampleMemory: u32,
                pub FreeSampleMemory: u32,
                pub LargestFreeContiguousSampleMemory: u32,
            }
            impl KSWAVE_OUTPUT_CAPABILITIES {}
            impl ::std::default::Default for KSWAVE_OUTPUT_CAPABILITIES {
                fn default() -> Self {
                    Self {
                        MaximumChannelsPerConnection: 0,
                        MinimumBitsPerSample: 0,
                        MaximumBitsPerSample: 0,
                        MinimumSampleFrequency: 0,
                        MaximumSampleFrequency: 0,
                        TotalConnections: 0,
                        StaticConnections: 0,
                        StreamingConnections: 0,
                        ActiveConnections: 0,
                        ActiveStaticConnections: 0,
                        ActiveStreamingConnections: 0,
                        Total3DConnections: 0,
                        Static3DConnections: 0,
                        Streaming3DConnections: 0,
                        Active3DConnections: 0,
                        ActiveStatic3DConnections: 0,
                        ActiveStreaming3DConnections: 0,
                        TotalSampleMemory: 0,
                        FreeSampleMemory: 0,
                        LargestFreeContiguousSampleMemory: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSWAVE_OUTPUT_CAPABILITIES {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSWAVE_OUTPUT_CAPABILITIES")
                        .field(
                            "MaximumChannelsPerConnection",
                            &format_args!("{:?}", self.MaximumChannelsPerConnection),
                        )
                        .field(
                            "MinimumBitsPerSample",
                            &format_args!("{:?}", self.MinimumBitsPerSample),
                        )
                        .field(
                            "MaximumBitsPerSample",
                            &format_args!("{:?}", self.MaximumBitsPerSample),
                        )
                        .field(
                            "MinimumSampleFrequency",
                            &format_args!("{:?}", self.MinimumSampleFrequency),
                        )
                        .field(
                            "MaximumSampleFrequency",
                            &format_args!("{:?}", self.MaximumSampleFrequency),
                        )
                        .field(
                            "TotalConnections",
                            &format_args!("{:?}", self.TotalConnections),
                        )
                        .field(
                            "StaticConnections",
                            &format_args!("{:?}", self.StaticConnections),
                        )
                        .field(
                            "StreamingConnections",
                            &format_args!("{:?}", self.StreamingConnections),
                        )
                        .field(
                            "ActiveConnections",
                            &format_args!("{:?}", self.ActiveConnections),
                        )
                        .field(
                            "ActiveStaticConnections",
                            &format_args!("{:?}", self.ActiveStaticConnections),
                        )
                        .field(
                            "ActiveStreamingConnections",
                            &format_args!("{:?}", self.ActiveStreamingConnections),
                        )
                        .field(
                            "Total3DConnections",
                            &format_args!("{:?}", self.Total3DConnections),
                        )
                        .field(
                            "Static3DConnections",
                            &format_args!("{:?}", self.Static3DConnections),
                        )
                        .field(
                            "Streaming3DConnections",
                            &format_args!("{:?}", self.Streaming3DConnections),
                        )
                        .field(
                            "Active3DConnections",
                            &format_args!("{:?}", self.Active3DConnections),
                        )
                        .field(
                            "ActiveStatic3DConnections",
                            &format_args!("{:?}", self.ActiveStatic3DConnections),
                        )
                        .field(
                            "ActiveStreaming3DConnections",
                            &format_args!("{:?}", self.ActiveStreaming3DConnections),
                        )
                        .field(
                            "TotalSampleMemory",
                            &format_args!("{:?}", self.TotalSampleMemory),
                        )
                        .field(
                            "FreeSampleMemory",
                            &format_args!("{:?}", self.FreeSampleMemory),
                        )
                        .field(
                            "LargestFreeContiguousSampleMemory",
                            &format_args!("{:?}", self.LargestFreeContiguousSampleMemory),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSWAVE_OUTPUT_CAPABILITIES {
                fn eq(&self, other: &Self) -> bool {
                    self.MaximumChannelsPerConnection == other.MaximumChannelsPerConnection
                        && self.MinimumBitsPerSample == other.MinimumBitsPerSample
                        && self.MaximumBitsPerSample == other.MaximumBitsPerSample
                        && self.MinimumSampleFrequency == other.MinimumSampleFrequency
                        && self.MaximumSampleFrequency == other.MaximumSampleFrequency
                        && self.TotalConnections == other.TotalConnections
                        && self.StaticConnections == other.StaticConnections
                        && self.StreamingConnections == other.StreamingConnections
                        && self.ActiveConnections == other.ActiveConnections
                        && self.ActiveStaticConnections == other.ActiveStaticConnections
                        && self.ActiveStreamingConnections == other.ActiveStreamingConnections
                        && self.Total3DConnections == other.Total3DConnections
                        && self.Static3DConnections == other.Static3DConnections
                        && self.Streaming3DConnections == other.Streaming3DConnections
                        && self.Active3DConnections == other.Active3DConnections
                        && self.ActiveStatic3DConnections == other.ActiveStatic3DConnections
                        && self.ActiveStreaming3DConnections == other.ActiveStreaming3DConnections
                        && self.TotalSampleMemory == other.TotalSampleMemory
                        && self.FreeSampleMemory == other.FreeSampleMemory
                        && self.LargestFreeContiguousSampleMemory
                            == other.LargestFreeContiguousSampleMemory
                }
            }
            impl ::std::cmp::Eq for KSWAVE_OUTPUT_CAPABILITIES {}
            unsafe impl ::windows::Abi for KSWAVE_OUTPUT_CAPABILITIES {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSWAVE_VOLUME {
                pub LeftAttenuation: i32,
                pub RightAttenuation: i32,
            }
            impl KSWAVE_VOLUME {}
            impl ::std::default::Default for KSWAVE_VOLUME {
                fn default() -> Self {
                    Self {
                        LeftAttenuation: 0,
                        RightAttenuation: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSWAVE_VOLUME {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSWAVE_VOLUME")
                        .field(
                            "LeftAttenuation",
                            &format_args!("{:?}", self.LeftAttenuation),
                        )
                        .field(
                            "RightAttenuation",
                            &format_args!("{:?}", self.RightAttenuation),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSWAVE_VOLUME {
                fn eq(&self, other: &Self) -> bool {
                    self.LeftAttenuation == other.LeftAttenuation
                        && self.RightAttenuation == other.RightAttenuation
                }
            }
            impl ::std::cmp::Eq for KSWAVE_VOLUME {}
            unsafe impl ::windows::Abi for KSWAVE_VOLUME {
                type Abi = Self;
            }
            pub const KS_AMCONTROL_COLORINFO_PRESENT: u32 = 128u32;
            pub const KS_AMCONTROL_PAD_TO_16x9: u32 = 4u32;
            pub const KS_AMCONTROL_PAD_TO_4x3: u32 = 2u32;
            pub const KS_AMCONTROL_USED: u32 = 1u32;
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KS_AMPixAspectRatio(pub i32);
            impl KS_AMPixAspectRatio {
                pub const KS_PixAspectRatio_NTSC4x3: Self = Self(0i32);
                pub const KS_PixAspectRatio_NTSC16x9: Self = Self(1i32);
                pub const KS_PixAspectRatio_PAL4x3: Self = Self(2i32);
                pub const KS_PixAspectRatio_PAL16x9: Self = Self(3i32);
            }
            impl ::std::convert::From<i32> for KS_AMPixAspectRatio {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KS_AMPixAspectRatio {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_AMVPDIMINFO {
                pub dwFieldWidth: u32,
                pub dwFieldHeight: u32,
                pub dwVBIWidth: u32,
                pub dwVBIHeight: u32,
                pub rcValidRegion: super::DisplayDevices::RECT,
            }
            impl KS_AMVPDIMINFO {}
            impl ::std::default::Default for KS_AMVPDIMINFO {
                fn default() -> Self {
                    Self {
                        dwFieldWidth: 0,
                        dwFieldHeight: 0,
                        dwVBIWidth: 0,
                        dwVBIHeight: 0,
                        rcValidRegion: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for KS_AMVPDIMINFO {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_AMVPDIMINFO")
                        .field("dwFieldWidth", &format_args!("{:?}", self.dwFieldWidth))
                        .field("dwFieldHeight", &format_args!("{:?}", self.dwFieldHeight))
                        .field("dwVBIWidth", &format_args!("{:?}", self.dwVBIWidth))
                        .field("dwVBIHeight", &format_args!("{:?}", self.dwVBIHeight))
                        .field("rcValidRegion", &format_args!("{:?}", self.rcValidRegion))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_AMVPDIMINFO {
                fn eq(&self, other: &Self) -> bool {
                    self.dwFieldWidth == other.dwFieldWidth
                        && self.dwFieldHeight == other.dwFieldHeight
                        && self.dwVBIWidth == other.dwVBIWidth
                        && self.dwVBIHeight == other.dwVBIHeight
                        && self.rcValidRegion == other.rcValidRegion
                }
            }
            impl ::std::cmp::Eq for KS_AMVPDIMINFO {}
            unsafe impl ::windows::Abi for KS_AMVPDIMINFO {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_AMVPDATAINFO {
                pub dwSize: u32,
                pub dwMicrosecondsPerField: u32,
                pub amvpDimInfo: KS_AMVPDIMINFO,
                pub dwPictAspectRatioX: u32,
                pub dwPictAspectRatioY: u32,
                pub bEnableDoubleClock: super::SystemServices::BOOL,
                pub bEnableVACT: super::SystemServices::BOOL,
                pub bDataIsInterlaced: super::SystemServices::BOOL,
                pub lHalfLinesOdd: i32,
                pub bFieldPolarityInverted: super::SystemServices::BOOL,
                pub dwNumLinesInVREF: u32,
                pub lHalfLinesEven: i32,
                pub dwReserved1: u32,
            }
            impl KS_AMVPDATAINFO {}
            impl ::std::default::Default for KS_AMVPDATAINFO {
                fn default() -> Self {
                    Self {
                        dwSize: 0,
                        dwMicrosecondsPerField: 0,
                        amvpDimInfo: ::std::default::Default::default(),
                        dwPictAspectRatioX: 0,
                        dwPictAspectRatioY: 0,
                        bEnableDoubleClock: ::std::default::Default::default(),
                        bEnableVACT: ::std::default::Default::default(),
                        bDataIsInterlaced: ::std::default::Default::default(),
                        lHalfLinesOdd: 0,
                        bFieldPolarityInverted: ::std::default::Default::default(),
                        dwNumLinesInVREF: 0,
                        lHalfLinesEven: 0,
                        dwReserved1: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KS_AMVPDATAINFO {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_AMVPDATAINFO")
                        .field("dwSize", &format_args!("{:?}", self.dwSize))
                        .field(
                            "dwMicrosecondsPerField",
                            &format_args!("{:?}", self.dwMicrosecondsPerField),
                        )
                        .field("amvpDimInfo", &format_args!("{:?}", self.amvpDimInfo))
                        .field(
                            "dwPictAspectRatioX",
                            &format_args!("{:?}", self.dwPictAspectRatioX),
                        )
                        .field(
                            "dwPictAspectRatioY",
                            &format_args!("{:?}", self.dwPictAspectRatioY),
                        )
                        .field(
                            "bEnableDoubleClock",
                            &format_args!("{:?}", self.bEnableDoubleClock),
                        )
                        .field("bEnableVACT", &format_args!("{:?}", self.bEnableVACT))
                        .field(
                            "bDataIsInterlaced",
                            &format_args!("{:?}", self.bDataIsInterlaced),
                        )
                        .field("lHalfLinesOdd", &format_args!("{:?}", self.lHalfLinesOdd))
                        .field(
                            "bFieldPolarityInverted",
                            &format_args!("{:?}", self.bFieldPolarityInverted),
                        )
                        .field(
                            "dwNumLinesInVREF",
                            &format_args!("{:?}", self.dwNumLinesInVREF),
                        )
                        .field("lHalfLinesEven", &format_args!("{:?}", self.lHalfLinesEven))
                        .field("dwReserved1", &format_args!("{:?}", self.dwReserved1))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_AMVPDATAINFO {
                fn eq(&self, other: &Self) -> bool {
                    self.dwSize == other.dwSize
                        && self.dwMicrosecondsPerField == other.dwMicrosecondsPerField
                        && self.amvpDimInfo == other.amvpDimInfo
                        && self.dwPictAspectRatioX == other.dwPictAspectRatioX
                        && self.dwPictAspectRatioY == other.dwPictAspectRatioY
                        && self.bEnableDoubleClock == other.bEnableDoubleClock
                        && self.bEnableVACT == other.bEnableVACT
                        && self.bDataIsInterlaced == other.bDataIsInterlaced
                        && self.lHalfLinesOdd == other.lHalfLinesOdd
                        && self.bFieldPolarityInverted == other.bFieldPolarityInverted
                        && self.dwNumLinesInVREF == other.dwNumLinesInVREF
                        && self.lHalfLinesEven == other.lHalfLinesEven
                        && self.dwReserved1 == other.dwReserved1
                }
            }
            impl ::std::cmp::Eq for KS_AMVPDATAINFO {}
            unsafe impl ::windows::Abi for KS_AMVPDATAINFO {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KS_AMVP_MODE(pub i32);
            impl KS_AMVP_MODE {
                pub const KS_AMVP_MODE_WEAVE: Self = Self(0i32);
                pub const KS_AMVP_MODE_BOBINTERLEAVED: Self = Self(1i32);
                pub const KS_AMVP_MODE_BOBNONINTERLEAVED: Self = Self(2i32);
                pub const KS_AMVP_MODE_SKIPEVEN: Self = Self(3i32);
                pub const KS_AMVP_MODE_SKIPODD: Self = Self(4i32);
            }
            impl ::std::convert::From<i32> for KS_AMVP_MODE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KS_AMVP_MODE {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KS_AMVP_SELECTFORMATBY(pub i32);
            impl KS_AMVP_SELECTFORMATBY {
                pub const KS_AMVP_DO_NOT_CARE: Self = Self(0i32);
                pub const KS_AMVP_BEST_BANDWIDTH: Self = Self(1i32);
                pub const KS_AMVP_INPUT_SAME_AS_OUTPUT: Self = Self(2i32);
            }
            impl ::std::convert::From<i32> for KS_AMVP_SELECTFORMATBY {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KS_AMVP_SELECTFORMATBY {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_AM_ExactRateChange {
                pub OutputZeroTime: i64,
                pub Rate: i32,
            }
            impl KS_AM_ExactRateChange {}
            impl ::std::default::Default for KS_AM_ExactRateChange {
                fn default() -> Self {
                    Self {
                        OutputZeroTime: 0,
                        Rate: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KS_AM_ExactRateChange {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_AM_ExactRateChange")
                        .field("OutputZeroTime", &format_args!("{:?}", self.OutputZeroTime))
                        .field("Rate", &format_args!("{:?}", self.Rate))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_AM_ExactRateChange {
                fn eq(&self, other: &Self) -> bool {
                    self.OutputZeroTime == other.OutputZeroTime && self.Rate == other.Rate
                }
            }
            impl ::std::cmp::Eq for KS_AM_ExactRateChange {}
            unsafe impl ::windows::Abi for KS_AM_ExactRateChange {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KS_AM_PROPERTY_TS_RATE_CHANGE(pub i32);
            impl KS_AM_PROPERTY_TS_RATE_CHANGE {
                pub const KS_AM_RATE_SimpleRateChange: Self = Self(1i32);
                pub const KS_AM_RATE_ExactRateChange: Self = Self(2i32);
                pub const KS_AM_RATE_MaxFullDataRate: Self = Self(3i32);
                pub const KS_AM_RATE_Step: Self = Self(4i32);
            }
            impl ::std::convert::From<i32> for KS_AM_PROPERTY_TS_RATE_CHANGE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KS_AM_PROPERTY_TS_RATE_CHANGE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_AM_SimpleRateChange {
                pub StartTime: i64,
                pub Rate: i32,
            }
            impl KS_AM_SimpleRateChange {}
            impl ::std::default::Default for KS_AM_SimpleRateChange {
                fn default() -> Self {
                    Self {
                        StartTime: 0,
                        Rate: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KS_AM_SimpleRateChange {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_AM_SimpleRateChange")
                        .field("StartTime", &format_args!("{:?}", self.StartTime))
                        .field("Rate", &format_args!("{:?}", self.Rate))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_AM_SimpleRateChange {
                fn eq(&self, other: &Self) -> bool {
                    self.StartTime == other.StartTime && self.Rate == other.Rate
                }
            }
            impl ::std::cmp::Eq for KS_AM_SimpleRateChange {}
            unsafe impl ::windows::Abi for KS_AM_SimpleRateChange {
                type Abi = Self;
            }
            pub const KS_AM_UseNewCSSKey: i32 = 1i32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_AnalogVideoInfo {
                pub rcSource: super::DisplayDevices::RECT,
                pub rcTarget: super::DisplayDevices::RECT,
                pub dwActiveWidth: u32,
                pub dwActiveHeight: u32,
                pub AvgTimePerFrame: i64,
            }
            impl KS_AnalogVideoInfo {}
            impl ::std::default::Default for KS_AnalogVideoInfo {
                fn default() -> Self {
                    Self {
                        rcSource: ::std::default::Default::default(),
                        rcTarget: ::std::default::Default::default(),
                        dwActiveWidth: 0,
                        dwActiveHeight: 0,
                        AvgTimePerFrame: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KS_AnalogVideoInfo {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_AnalogVideoInfo")
                        .field("rcSource", &format_args!("{:?}", self.rcSource))
                        .field("rcTarget", &format_args!("{:?}", self.rcTarget))
                        .field("dwActiveWidth", &format_args!("{:?}", self.dwActiveWidth))
                        .field("dwActiveHeight", &format_args!("{:?}", self.dwActiveHeight))
                        .field(
                            "AvgTimePerFrame",
                            &format_args!("{:?}", self.AvgTimePerFrame),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_AnalogVideoInfo {
                fn eq(&self, other: &Self) -> bool {
                    self.rcSource == other.rcSource
                        && self.rcTarget == other.rcTarget
                        && self.dwActiveWidth == other.dwActiveWidth
                        && self.dwActiveHeight == other.dwActiveHeight
                        && self.AvgTimePerFrame == other.AvgTimePerFrame
                }
            }
            impl ::std::cmp::Eq for KS_AnalogVideoInfo {}
            unsafe impl ::windows::Abi for KS_AnalogVideoInfo {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KS_AnalogVideoStandard(pub i32);
            impl KS_AnalogVideoStandard {
                pub const KS_AnalogVideo_None: Self = Self(0i32);
                pub const KS_AnalogVideo_NTSC_M: Self = Self(1i32);
                pub const KS_AnalogVideo_NTSC_M_J: Self = Self(2i32);
                pub const KS_AnalogVideo_NTSC_433: Self = Self(4i32);
                pub const KS_AnalogVideo_PAL_B: Self = Self(16i32);
                pub const KS_AnalogVideo_PAL_D: Self = Self(32i32);
                pub const KS_AnalogVideo_PAL_G: Self = Self(64i32);
                pub const KS_AnalogVideo_PAL_H: Self = Self(128i32);
                pub const KS_AnalogVideo_PAL_I: Self = Self(256i32);
                pub const KS_AnalogVideo_PAL_M: Self = Self(512i32);
                pub const KS_AnalogVideo_PAL_N: Self = Self(1024i32);
                pub const KS_AnalogVideo_PAL_60: Self = Self(2048i32);
                pub const KS_AnalogVideo_SECAM_B: Self = Self(4096i32);
                pub const KS_AnalogVideo_SECAM_D: Self = Self(8192i32);
                pub const KS_AnalogVideo_SECAM_G: Self = Self(16384i32);
                pub const KS_AnalogVideo_SECAM_H: Self = Self(32768i32);
                pub const KS_AnalogVideo_SECAM_K: Self = Self(65536i32);
                pub const KS_AnalogVideo_SECAM_K1: Self = Self(131072i32);
                pub const KS_AnalogVideo_SECAM_L: Self = Self(262144i32);
                pub const KS_AnalogVideo_SECAM_L1: Self = Self(524288i32);
                pub const KS_AnalogVideo_PAL_N_COMBO: Self = Self(1048576i32);
            }
            impl ::std::convert::From<i32> for KS_AnalogVideoStandard {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KS_AnalogVideoStandard {
                type Abi = Self;
            }
            pub const KS_AnalogVideo_NTSC_Mask: u32 = 7u32;
            pub const KS_AnalogVideo_PAL_Mask: u32 = 1052656u32;
            pub const KS_AnalogVideo_SECAM_Mask: u32 = 1044480u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_BITMAPINFOHEADER {
                pub biSize: u32,
                pub biWidth: i32,
                pub biHeight: i32,
                pub biPlanes: u16,
                pub biBitCount: u16,
                pub biCompression: u32,
                pub biSizeImage: u32,
                pub biXPelsPerMeter: i32,
                pub biYPelsPerMeter: i32,
                pub biClrUsed: u32,
                pub biClrImportant: u32,
            }
            impl KS_BITMAPINFOHEADER {}
            impl ::std::default::Default for KS_BITMAPINFOHEADER {
                fn default() -> Self {
                    Self {
                        biSize: 0,
                        biWidth: 0,
                        biHeight: 0,
                        biPlanes: 0,
                        biBitCount: 0,
                        biCompression: 0,
                        biSizeImage: 0,
                        biXPelsPerMeter: 0,
                        biYPelsPerMeter: 0,
                        biClrUsed: 0,
                        biClrImportant: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KS_BITMAPINFOHEADER {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_BITMAPINFOHEADER")
                        .field("biSize", &format_args!("{:?}", self.biSize))
                        .field("biWidth", &format_args!("{:?}", self.biWidth))
                        .field("biHeight", &format_args!("{:?}", self.biHeight))
                        .field("biPlanes", &format_args!("{:?}", self.biPlanes))
                        .field("biBitCount", &format_args!("{:?}", self.biBitCount))
                        .field("biCompression", &format_args!("{:?}", self.biCompression))
                        .field("biSizeImage", &format_args!("{:?}", self.biSizeImage))
                        .field(
                            "biXPelsPerMeter",
                            &format_args!("{:?}", self.biXPelsPerMeter),
                        )
                        .field(
                            "biYPelsPerMeter",
                            &format_args!("{:?}", self.biYPelsPerMeter),
                        )
                        .field("biClrUsed", &format_args!("{:?}", self.biClrUsed))
                        .field("biClrImportant", &format_args!("{:?}", self.biClrImportant))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_BITMAPINFOHEADER {
                fn eq(&self, other: &Self) -> bool {
                    self.biSize == other.biSize
                        && self.biWidth == other.biWidth
                        && self.biHeight == other.biHeight
                        && self.biPlanes == other.biPlanes
                        && self.biBitCount == other.biBitCount
                        && self.biCompression == other.biCompression
                        && self.biSizeImage == other.biSizeImage
                        && self.biXPelsPerMeter == other.biXPelsPerMeter
                        && self.biYPelsPerMeter == other.biYPelsPerMeter
                        && self.biClrUsed == other.biClrUsed
                        && self.biClrImportant == other.biClrImportant
                }
            }
            impl ::std::cmp::Eq for KS_BITMAPINFOHEADER {}
            unsafe impl ::windows::Abi for KS_BITMAPINFOHEADER {
                type Abi = Self;
            }
            pub const KS_BI_BITFIELDS: i32 = 3i32;
            pub const KS_BI_JPEG: i32 = 4i32;
            pub const KS_BI_RGB: i32 = 0i32;
            pub const KS_BI_RLE4: i32 = 2i32;
            pub const KS_BI_RLE8: i32 = 1i32;
            pub const KS_CC_SUBSTREAM_EVEN: i32 = 2i32;
            pub const KS_CC_SUBSTREAM_FIELD1_MASK: i32 = 240i32;
            pub const KS_CC_SUBSTREAM_FIELD2_MASK: i32 = 7936i32;
            pub const KS_CC_SUBSTREAM_ODD: i32 = 1i32;
            pub const KS_CC_SUBSTREAM_SERVICE_CC1: i32 = 16i32;
            pub const KS_CC_SUBSTREAM_SERVICE_CC2: i32 = 32i32;
            pub const KS_CC_SUBSTREAM_SERVICE_CC3: i32 = 256i32;
            pub const KS_CC_SUBSTREAM_SERVICE_CC4: i32 = 512i32;
            pub const KS_CC_SUBSTREAM_SERVICE_T1: i32 = 64i32;
            pub const KS_CC_SUBSTREAM_SERVICE_T2: i32 = 128i32;
            pub const KS_CC_SUBSTREAM_SERVICE_T3: i32 = 1024i32;
            pub const KS_CC_SUBSTREAM_SERVICE_T4: i32 = 2048i32;
            pub const KS_CC_SUBSTREAM_SERVICE_XDS: i32 = 4096i32;
            pub const KS_COPYPROTECT_RestrictDuplication: u32 = 1u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_COPY_MACROVISION {
                pub MACROVISIONLevel: u32,
            }
            impl KS_COPY_MACROVISION {}
            impl ::std::default::Default for KS_COPY_MACROVISION {
                fn default() -> Self {
                    Self {
                        MACROVISIONLevel: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KS_COPY_MACROVISION {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_COPY_MACROVISION")
                        .field(
                            "MACROVISIONLevel",
                            &format_args!("{:?}", self.MACROVISIONLevel),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_COPY_MACROVISION {
                fn eq(&self, other: &Self) -> bool {
                    self.MACROVISIONLevel == other.MACROVISIONLevel
                }
            }
            impl ::std::cmp::Eq for KS_COPY_MACROVISION {}
            unsafe impl ::windows::Abi for KS_COPY_MACROVISION {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KS_COPY_MACROVISION_LEVEL(pub i32);
            impl KS_COPY_MACROVISION_LEVEL {
                pub const KS_MACROVISION_DISABLED: Self = Self(0i32);
                pub const KS_MACROVISION_LEVEL1: Self = Self(1i32);
                pub const KS_MACROVISION_LEVEL2: Self = Self(2i32);
                pub const KS_MACROVISION_LEVEL3: Self = Self(3i32);
            }
            impl ::std::convert::From<i32> for KS_COPY_MACROVISION_LEVEL {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KS_COPY_MACROVISION_LEVEL {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KS_CameraControlAsyncOperation(pub i32);
            impl KS_CameraControlAsyncOperation {
                pub const KS_CAMERACONTROL_ASYNC_START: Self = Self(1i32);
                pub const KS_CAMERACONTROL_ASYNC_STOP: Self = Self(2i32);
                pub const KS_CAMERACONTROL_ASYNC_RESET: Self = Self(3i32);
            }
            impl ::std::convert::From<i32> for KS_CameraControlAsyncOperation {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KS_CameraControlAsyncOperation {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KS_CompressionCaps(pub i32);
            impl KS_CompressionCaps {
                pub const KS_CompressionCaps_CanQuality: Self = Self(1i32);
                pub const KS_CompressionCaps_CanCrunch: Self = Self(2i32);
                pub const KS_CompressionCaps_CanKeyFrame: Self = Self(4i32);
                pub const KS_CompressionCaps_CanBFrame: Self = Self(8i32);
                pub const KS_CompressionCaps_CanWindow: Self = Self(16i32);
            }
            impl ::std::convert::From<i32> for KS_CompressionCaps {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KS_CompressionCaps {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_H264VIDEOINFO {
                pub wWidth: u16,
                pub wHeight: u16,
                pub wSARwidth: u16,
                pub wSARheight: u16,
                pub wProfile: u16,
                pub bLevelIDC: u8,
                pub wConstrainedToolset: u16,
                pub bmSupportedUsages: u32,
                pub bmCapabilities: u16,
                pub bmSVCCapabilities: u32,
                pub bmMVCCapabilities: u32,
                pub dwFrameInterval: u32,
                pub bMaxCodecConfigDelay: u8,
                pub bmSupportedSliceModes: u8,
                pub bmSupportedSyncFrameTypes: u8,
                pub bResolutionScaling: u8,
                pub bSimulcastSupport: u8,
                pub bmSupportedRateControlModes: u8,
                pub wMaxMBperSecOneResolutionNoScalability: u16,
                pub wMaxMBperSecTwoResolutionsNoScalability: u16,
                pub wMaxMBperSecThreeResolutionsNoScalability: u16,
                pub wMaxMBperSecFourResolutionsNoScalability: u16,
                pub wMaxMBperSecOneResolutionTemporalScalability: u16,
                pub wMaxMBperSecTwoResolutionsTemporalScalablility: u16,
                pub wMaxMBperSecThreeResolutionsTemporalScalability: u16,
                pub wMaxMBperSecFourResolutionsTemporalScalability: u16,
                pub wMaxMBperSecOneResolutionTemporalQualityScalability: u16,
                pub wMaxMBperSecTwoResolutionsTemporalQualityScalability: u16,
                pub wMaxMBperSecThreeResolutionsTemporalQualityScalablity: u16,
                pub wMaxMBperSecFourResolutionsTemporalQualityScalability: u16,
                pub wMaxMBperSecOneResolutionTemporalSpatialScalability: u16,
                pub wMaxMBperSecTwoResolutionsTemporalSpatialScalability: u16,
                pub wMaxMBperSecThreeResolutionsTemporalSpatialScalablity: u16,
                pub wMaxMBperSecFourResolutionsTemporalSpatialScalability: u16,
                pub wMaxMBperSecOneResolutionFullScalability: u16,
                pub wMaxMBperSecTwoResolutionsFullScalability: u16,
                pub wMaxMBperSecThreeResolutionsFullScalability: u16,
                pub wMaxMBperSecFourResolutionsFullScalability: u16,
            }
            impl KS_H264VIDEOINFO {}
            impl ::std::default::Default for KS_H264VIDEOINFO {
                fn default() -> Self {
                    Self {
                        wWidth: 0,
                        wHeight: 0,
                        wSARwidth: 0,
                        wSARheight: 0,
                        wProfile: 0,
                        bLevelIDC: 0,
                        wConstrainedToolset: 0,
                        bmSupportedUsages: 0,
                        bmCapabilities: 0,
                        bmSVCCapabilities: 0,
                        bmMVCCapabilities: 0,
                        dwFrameInterval: 0,
                        bMaxCodecConfigDelay: 0,
                        bmSupportedSliceModes: 0,
                        bmSupportedSyncFrameTypes: 0,
                        bResolutionScaling: 0,
                        bSimulcastSupport: 0,
                        bmSupportedRateControlModes: 0,
                        wMaxMBperSecOneResolutionNoScalability: 0,
                        wMaxMBperSecTwoResolutionsNoScalability: 0,
                        wMaxMBperSecThreeResolutionsNoScalability: 0,
                        wMaxMBperSecFourResolutionsNoScalability: 0,
                        wMaxMBperSecOneResolutionTemporalScalability: 0,
                        wMaxMBperSecTwoResolutionsTemporalScalablility: 0,
                        wMaxMBperSecThreeResolutionsTemporalScalability: 0,
                        wMaxMBperSecFourResolutionsTemporalScalability: 0,
                        wMaxMBperSecOneResolutionTemporalQualityScalability: 0,
                        wMaxMBperSecTwoResolutionsTemporalQualityScalability: 0,
                        wMaxMBperSecThreeResolutionsTemporalQualityScalablity: 0,
                        wMaxMBperSecFourResolutionsTemporalQualityScalability: 0,
                        wMaxMBperSecOneResolutionTemporalSpatialScalability: 0,
                        wMaxMBperSecTwoResolutionsTemporalSpatialScalability: 0,
                        wMaxMBperSecThreeResolutionsTemporalSpatialScalablity: 0,
                        wMaxMBperSecFourResolutionsTemporalSpatialScalability: 0,
                        wMaxMBperSecOneResolutionFullScalability: 0,
                        wMaxMBperSecTwoResolutionsFullScalability: 0,
                        wMaxMBperSecThreeResolutionsFullScalability: 0,
                        wMaxMBperSecFourResolutionsFullScalability: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KS_H264VIDEOINFO {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_H264VIDEOINFO")
                        .field("wWidth", &format_args!("{:?}", self.wWidth))
                        .field("wHeight", &format_args!("{:?}", self.wHeight))
                        .field("wSARwidth", &format_args!("{:?}", self.wSARwidth))
                        .field("wSARheight", &format_args!("{:?}", self.wSARheight))
                        .field("wProfile", &format_args!("{:?}", self.wProfile))
                        .field("bLevelIDC", &format_args!("{:?}", self.bLevelIDC))
                        .field(
                            "wConstrainedToolset",
                            &format_args!("{:?}", self.wConstrainedToolset),
                        )
                        .field(
                            "bmSupportedUsages",
                            &format_args!("{:?}", self.bmSupportedUsages),
                        )
                        .field("bmCapabilities", &format_args!("{:?}", self.bmCapabilities))
                        .field(
                            "bmSVCCapabilities",
                            &format_args!("{:?}", self.bmSVCCapabilities),
                        )
                        .field(
                            "bmMVCCapabilities",
                            &format_args!("{:?}", self.bmMVCCapabilities),
                        )
                        .field(
                            "dwFrameInterval",
                            &format_args!("{:?}", self.dwFrameInterval),
                        )
                        .field(
                            "bMaxCodecConfigDelay",
                            &format_args!("{:?}", self.bMaxCodecConfigDelay),
                        )
                        .field(
                            "bmSupportedSliceModes",
                            &format_args!("{:?}", self.bmSupportedSliceModes),
                        )
                        .field(
                            "bmSupportedSyncFrameTypes",
                            &format_args!("{:?}", self.bmSupportedSyncFrameTypes),
                        )
                        .field(
                            "bResolutionScaling",
                            &format_args!("{:?}", self.bResolutionScaling),
                        )
                        .field(
                            "bSimulcastSupport",
                            &format_args!("{:?}", self.bSimulcastSupport),
                        )
                        .field(
                            "bmSupportedRateControlModes",
                            &format_args!("{:?}", self.bmSupportedRateControlModes),
                        )
                        .field(
                            "wMaxMBperSecOneResolutionNoScalability",
                            &format_args!("{:?}", self.wMaxMBperSecOneResolutionNoScalability),
                        )
                        .field(
                            "wMaxMBperSecTwoResolutionsNoScalability",
                            &format_args!("{:?}", self.wMaxMBperSecTwoResolutionsNoScalability),
                        )
                        .field(
                            "wMaxMBperSecThreeResolutionsNoScalability",
                            &format_args!("{:?}", self.wMaxMBperSecThreeResolutionsNoScalability),
                        )
                        .field(
                            "wMaxMBperSecFourResolutionsNoScalability",
                            &format_args!("{:?}", self.wMaxMBperSecFourResolutionsNoScalability),
                        )
                        .field(
                            "wMaxMBperSecOneResolutionTemporalScalability",
                            &format_args!(
                                "{:?}",
                                self.wMaxMBperSecOneResolutionTemporalScalability
                            ),
                        )
                        .field(
                            "wMaxMBperSecTwoResolutionsTemporalScalablility",
                            &format_args!(
                                "{:?}",
                                self.wMaxMBperSecTwoResolutionsTemporalScalablility
                            ),
                        )
                        .field(
                            "wMaxMBperSecThreeResolutionsTemporalScalability",
                            &format_args!(
                                "{:?}",
                                self.wMaxMBperSecThreeResolutionsTemporalScalability
                            ),
                        )
                        .field(
                            "wMaxMBperSecFourResolutionsTemporalScalability",
                            &format_args!(
                                "{:?}",
                                self.wMaxMBperSecFourResolutionsTemporalScalability
                            ),
                        )
                        .field(
                            "wMaxMBperSecOneResolutionTemporalQualityScalability",
                            &format_args!(
                                "{:?}",
                                self.wMaxMBperSecOneResolutionTemporalQualityScalability
                            ),
                        )
                        .field(
                            "wMaxMBperSecTwoResolutionsTemporalQualityScalability",
                            &format_args!(
                                "{:?}",
                                self.wMaxMBperSecTwoResolutionsTemporalQualityScalability
                            ),
                        )
                        .field(
                            "wMaxMBperSecThreeResolutionsTemporalQualityScalablity",
                            &format_args!(
                                "{:?}",
                                self.wMaxMBperSecThreeResolutionsTemporalQualityScalablity
                            ),
                        )
                        .field(
                            "wMaxMBperSecFourResolutionsTemporalQualityScalability",
                            &format_args!(
                                "{:?}",
                                self.wMaxMBperSecFourResolutionsTemporalQualityScalability
                            ),
                        )
                        .field(
                            "wMaxMBperSecOneResolutionTemporalSpatialScalability",
                            &format_args!(
                                "{:?}",
                                self.wMaxMBperSecOneResolutionTemporalSpatialScalability
                            ),
                        )
                        .field(
                            "wMaxMBperSecTwoResolutionsTemporalSpatialScalability",
                            &format_args!(
                                "{:?}",
                                self.wMaxMBperSecTwoResolutionsTemporalSpatialScalability
                            ),
                        )
                        .field(
                            "wMaxMBperSecThreeResolutionsTemporalSpatialScalablity",
                            &format_args!(
                                "{:?}",
                                self.wMaxMBperSecThreeResolutionsTemporalSpatialScalablity
                            ),
                        )
                        .field(
                            "wMaxMBperSecFourResolutionsTemporalSpatialScalability",
                            &format_args!(
                                "{:?}",
                                self.wMaxMBperSecFourResolutionsTemporalSpatialScalability
                            ),
                        )
                        .field(
                            "wMaxMBperSecOneResolutionFullScalability",
                            &format_args!("{:?}", self.wMaxMBperSecOneResolutionFullScalability),
                        )
                        .field(
                            "wMaxMBperSecTwoResolutionsFullScalability",
                            &format_args!("{:?}", self.wMaxMBperSecTwoResolutionsFullScalability),
                        )
                        .field(
                            "wMaxMBperSecThreeResolutionsFullScalability",
                            &format_args!("{:?}", self.wMaxMBperSecThreeResolutionsFullScalability),
                        )
                        .field(
                            "wMaxMBperSecFourResolutionsFullScalability",
                            &format_args!("{:?}", self.wMaxMBperSecFourResolutionsFullScalability),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_H264VIDEOINFO {
                fn eq(&self, other: &Self) -> bool {
                    self.wWidth == other.wWidth
                        && self.wHeight == other.wHeight
                        && self.wSARwidth == other.wSARwidth
                        && self.wSARheight == other.wSARheight
                        && self.wProfile == other.wProfile
                        && self.bLevelIDC == other.bLevelIDC
                        && self.wConstrainedToolset == other.wConstrainedToolset
                        && self.bmSupportedUsages == other.bmSupportedUsages
                        && self.bmCapabilities == other.bmCapabilities
                        && self.bmSVCCapabilities == other.bmSVCCapabilities
                        && self.bmMVCCapabilities == other.bmMVCCapabilities
                        && self.dwFrameInterval == other.dwFrameInterval
                        && self.bMaxCodecConfigDelay == other.bMaxCodecConfigDelay
                        && self.bmSupportedSliceModes == other.bmSupportedSliceModes
                        && self.bmSupportedSyncFrameTypes == other.bmSupportedSyncFrameTypes
                        && self.bResolutionScaling == other.bResolutionScaling
                        && self.bSimulcastSupport == other.bSimulcastSupport
                        && self.bmSupportedRateControlModes == other.bmSupportedRateControlModes
                        && self.wMaxMBperSecOneResolutionNoScalability
                            == other.wMaxMBperSecOneResolutionNoScalability
                        && self.wMaxMBperSecTwoResolutionsNoScalability
                            == other.wMaxMBperSecTwoResolutionsNoScalability
                        && self.wMaxMBperSecThreeResolutionsNoScalability
                            == other.wMaxMBperSecThreeResolutionsNoScalability
                        && self.wMaxMBperSecFourResolutionsNoScalability
                            == other.wMaxMBperSecFourResolutionsNoScalability
                        && self.wMaxMBperSecOneResolutionTemporalScalability
                            == other.wMaxMBperSecOneResolutionTemporalScalability
                        && self.wMaxMBperSecTwoResolutionsTemporalScalablility
                            == other.wMaxMBperSecTwoResolutionsTemporalScalablility
                        && self.wMaxMBperSecThreeResolutionsTemporalScalability
                            == other.wMaxMBperSecThreeResolutionsTemporalScalability
                        && self.wMaxMBperSecFourResolutionsTemporalScalability
                            == other.wMaxMBperSecFourResolutionsTemporalScalability
                        && self.wMaxMBperSecOneResolutionTemporalQualityScalability
                            == other.wMaxMBperSecOneResolutionTemporalQualityScalability
                        && self.wMaxMBperSecTwoResolutionsTemporalQualityScalability
                            == other.wMaxMBperSecTwoResolutionsTemporalQualityScalability
                        && self.wMaxMBperSecThreeResolutionsTemporalQualityScalablity
                            == other.wMaxMBperSecThreeResolutionsTemporalQualityScalablity
                        && self.wMaxMBperSecFourResolutionsTemporalQualityScalability
                            == other.wMaxMBperSecFourResolutionsTemporalQualityScalability
                        && self.wMaxMBperSecOneResolutionTemporalSpatialScalability
                            == other.wMaxMBperSecOneResolutionTemporalSpatialScalability
                        && self.wMaxMBperSecTwoResolutionsTemporalSpatialScalability
                            == other.wMaxMBperSecTwoResolutionsTemporalSpatialScalability
                        && self.wMaxMBperSecThreeResolutionsTemporalSpatialScalablity
                            == other.wMaxMBperSecThreeResolutionsTemporalSpatialScalablity
                        && self.wMaxMBperSecFourResolutionsTemporalSpatialScalability
                            == other.wMaxMBperSecFourResolutionsTemporalSpatialScalability
                        && self.wMaxMBperSecOneResolutionFullScalability
                            == other.wMaxMBperSecOneResolutionFullScalability
                        && self.wMaxMBperSecTwoResolutionsFullScalability
                            == other.wMaxMBperSecTwoResolutionsFullScalability
                        && self.wMaxMBperSecThreeResolutionsFullScalability
                            == other.wMaxMBperSecThreeResolutionsFullScalability
                        && self.wMaxMBperSecFourResolutionsFullScalability
                            == other.wMaxMBperSecFourResolutionsFullScalability
                }
            }
            impl ::std::cmp::Eq for KS_H264VIDEOINFO {}
            unsafe impl ::windows::Abi for KS_H264VIDEOINFO {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_DATAFORMAT_H264VIDEOINFO {
                pub DataFormat: KSDATAFORMAT,
                pub H264VideoInfoHeader: KS_H264VIDEOINFO,
            }
            impl KS_DATAFORMAT_H264VIDEOINFO {}
            unsafe impl ::windows::Abi for KS_DATAFORMAT_H264VIDEOINFO {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_DATAFORMAT_IMAGEINFO {
                pub DataFormat: KSDATAFORMAT,
                pub ImageInfoHeader: KS_BITMAPINFOHEADER,
            }
            impl KS_DATAFORMAT_IMAGEINFO {}
            unsafe impl ::windows::Abi for KS_DATAFORMAT_IMAGEINFO {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_VIDEOINFOHEADER2 {
                pub rcSource: super::DisplayDevices::RECT,
                pub rcTarget: super::DisplayDevices::RECT,
                pub dwBitRate: u32,
                pub dwBitErrorRate: u32,
                pub AvgTimePerFrame: i64,
                pub dwInterlaceFlags: u32,
                pub dwCopyProtectFlags: u32,
                pub dwPictAspectRatioX: u32,
                pub dwPictAspectRatioY: u32,
                pub Anonymous: KS_VIDEOINFOHEADER2_0,
                pub dwReserved2: u32,
                pub bmiHeader: KS_BITMAPINFOHEADER,
            }
            impl KS_VIDEOINFOHEADER2 {}
            unsafe impl ::windows::Abi for KS_VIDEOINFOHEADER2 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union KS_VIDEOINFOHEADER2_0 {
                pub dwControlFlags: u32,
                pub dwReserved1: u32,
            }
            impl KS_VIDEOINFOHEADER2_0 {}
            unsafe impl ::windows::Abi for KS_VIDEOINFOHEADER2_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_MPEGVIDEOINFO2 {
                pub hdr: KS_VIDEOINFOHEADER2,
                pub dwStartTimeCode: u32,
                pub cbSequenceHeader: u32,
                pub dwProfile: u32,
                pub dwLevel: u32,
                pub dwFlags: u32,
                pub bSequenceHeader: [u32; 1],
            }
            impl KS_MPEGVIDEOINFO2 {}
            unsafe impl ::windows::Abi for KS_MPEGVIDEOINFO2 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_DATAFORMAT_MPEGVIDEOINFO2 {
                pub DataFormat: KSDATAFORMAT,
                pub MpegVideoInfoHeader2: KS_MPEGVIDEOINFO2,
            }
            impl KS_DATAFORMAT_MPEGVIDEOINFO2 {}
            unsafe impl ::windows::Abi for KS_DATAFORMAT_MPEGVIDEOINFO2 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_VBIINFOHEADER {
                pub StartLine: u32,
                pub EndLine: u32,
                pub SamplingFrequency: u32,
                pub MinLineStartTime: u32,
                pub MaxLineStartTime: u32,
                pub ActualLineStartTime: u32,
                pub ActualLineEndTime: u32,
                pub VideoStandard: u32,
                pub SamplesPerLine: u32,
                pub StrideInBytes: u32,
                pub BufferSize: u32,
            }
            impl KS_VBIINFOHEADER {}
            impl ::std::default::Default for KS_VBIINFOHEADER {
                fn default() -> Self {
                    Self {
                        StartLine: 0,
                        EndLine: 0,
                        SamplingFrequency: 0,
                        MinLineStartTime: 0,
                        MaxLineStartTime: 0,
                        ActualLineStartTime: 0,
                        ActualLineEndTime: 0,
                        VideoStandard: 0,
                        SamplesPerLine: 0,
                        StrideInBytes: 0,
                        BufferSize: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KS_VBIINFOHEADER {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_VBIINFOHEADER")
                        .field("StartLine", &format_args!("{:?}", self.StartLine))
                        .field("EndLine", &format_args!("{:?}", self.EndLine))
                        .field(
                            "SamplingFrequency",
                            &format_args!("{:?}", self.SamplingFrequency),
                        )
                        .field(
                            "MinLineStartTime",
                            &format_args!("{:?}", self.MinLineStartTime),
                        )
                        .field(
                            "MaxLineStartTime",
                            &format_args!("{:?}", self.MaxLineStartTime),
                        )
                        .field(
                            "ActualLineStartTime",
                            &format_args!("{:?}", self.ActualLineStartTime),
                        )
                        .field(
                            "ActualLineEndTime",
                            &format_args!("{:?}", self.ActualLineEndTime),
                        )
                        .field("VideoStandard", &format_args!("{:?}", self.VideoStandard))
                        .field("SamplesPerLine", &format_args!("{:?}", self.SamplesPerLine))
                        .field("StrideInBytes", &format_args!("{:?}", self.StrideInBytes))
                        .field("BufferSize", &format_args!("{:?}", self.BufferSize))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_VBIINFOHEADER {
                fn eq(&self, other: &Self) -> bool {
                    self.StartLine == other.StartLine
                        && self.EndLine == other.EndLine
                        && self.SamplingFrequency == other.SamplingFrequency
                        && self.MinLineStartTime == other.MinLineStartTime
                        && self.MaxLineStartTime == other.MaxLineStartTime
                        && self.ActualLineStartTime == other.ActualLineStartTime
                        && self.ActualLineEndTime == other.ActualLineEndTime
                        && self.VideoStandard == other.VideoStandard
                        && self.SamplesPerLine == other.SamplesPerLine
                        && self.StrideInBytes == other.StrideInBytes
                        && self.BufferSize == other.BufferSize
                }
            }
            impl ::std::cmp::Eq for KS_VBIINFOHEADER {}
            unsafe impl ::windows::Abi for KS_VBIINFOHEADER {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_DATAFORMAT_VBIINFOHEADER {
                pub DataFormat: KSDATAFORMAT,
                pub VBIInfoHeader: KS_VBIINFOHEADER,
            }
            impl KS_DATAFORMAT_VBIINFOHEADER {}
            unsafe impl ::windows::Abi for KS_DATAFORMAT_VBIINFOHEADER {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_VIDEOINFOHEADER {
                pub rcSource: super::DisplayDevices::RECT,
                pub rcTarget: super::DisplayDevices::RECT,
                pub dwBitRate: u32,
                pub dwBitErrorRate: u32,
                pub AvgTimePerFrame: i64,
                pub bmiHeader: KS_BITMAPINFOHEADER,
            }
            impl KS_VIDEOINFOHEADER {}
            impl ::std::default::Default for KS_VIDEOINFOHEADER {
                fn default() -> Self {
                    Self {
                        rcSource: ::std::default::Default::default(),
                        rcTarget: ::std::default::Default::default(),
                        dwBitRate: 0,
                        dwBitErrorRate: 0,
                        AvgTimePerFrame: 0,
                        bmiHeader: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for KS_VIDEOINFOHEADER {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_VIDEOINFOHEADER")
                        .field("rcSource", &format_args!("{:?}", self.rcSource))
                        .field("rcTarget", &format_args!("{:?}", self.rcTarget))
                        .field("dwBitRate", &format_args!("{:?}", self.dwBitRate))
                        .field("dwBitErrorRate", &format_args!("{:?}", self.dwBitErrorRate))
                        .field(
                            "AvgTimePerFrame",
                            &format_args!("{:?}", self.AvgTimePerFrame),
                        )
                        .field("bmiHeader", &format_args!("{:?}", self.bmiHeader))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_VIDEOINFOHEADER {
                fn eq(&self, other: &Self) -> bool {
                    self.rcSource == other.rcSource
                        && self.rcTarget == other.rcTarget
                        && self.dwBitRate == other.dwBitRate
                        && self.dwBitErrorRate == other.dwBitErrorRate
                        && self.AvgTimePerFrame == other.AvgTimePerFrame
                        && self.bmiHeader == other.bmiHeader
                }
            }
            impl ::std::cmp::Eq for KS_VIDEOINFOHEADER {}
            unsafe impl ::windows::Abi for KS_VIDEOINFOHEADER {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_DATAFORMAT_VIDEOINFOHEADER {
                pub DataFormat: KSDATAFORMAT,
                pub VideoInfoHeader: KS_VIDEOINFOHEADER,
            }
            impl KS_DATAFORMAT_VIDEOINFOHEADER {}
            unsafe impl ::windows::Abi for KS_DATAFORMAT_VIDEOINFOHEADER {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_DATAFORMAT_VIDEOINFOHEADER2 {
                pub DataFormat: KSDATAFORMAT,
                pub VideoInfoHeader2: KS_VIDEOINFOHEADER2,
            }
            impl KS_DATAFORMAT_VIDEOINFOHEADER2 {}
            unsafe impl ::windows::Abi for KS_DATAFORMAT_VIDEOINFOHEADER2 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_RGBQUAD {
                pub rgbBlue: u8,
                pub rgbGreen: u8,
                pub rgbRed: u8,
                pub rgbReserved: u8,
            }
            impl KS_RGBQUAD {}
            impl ::std::default::Default for KS_RGBQUAD {
                fn default() -> Self {
                    Self {
                        rgbBlue: 0,
                        rgbGreen: 0,
                        rgbRed: 0,
                        rgbReserved: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KS_RGBQUAD {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_RGBQUAD")
                        .field("rgbBlue", &format_args!("{:?}", self.rgbBlue))
                        .field("rgbGreen", &format_args!("{:?}", self.rgbGreen))
                        .field("rgbRed", &format_args!("{:?}", self.rgbRed))
                        .field("rgbReserved", &format_args!("{:?}", self.rgbReserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_RGBQUAD {
                fn eq(&self, other: &Self) -> bool {
                    self.rgbBlue == other.rgbBlue
                        && self.rgbGreen == other.rgbGreen
                        && self.rgbRed == other.rgbRed
                        && self.rgbReserved == other.rgbReserved
                }
            }
            impl ::std::cmp::Eq for KS_RGBQUAD {}
            unsafe impl ::windows::Abi for KS_RGBQUAD {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_TRUECOLORINFO {
                pub dwBitMasks: [u32; 3],
                pub bmiColors: [KS_RGBQUAD; 256],
            }
            impl KS_TRUECOLORINFO {}
            impl ::std::default::Default for KS_TRUECOLORINFO {
                fn default() -> Self {
                    Self {
                        dwBitMasks: [0; 3],
                        bmiColors: [::std::default::Default::default(); 256],
                    }
                }
            }
            impl ::std::fmt::Debug for KS_TRUECOLORINFO {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_TRUECOLORINFO")
                        .field("dwBitMasks", &format_args!("{:?}", self.dwBitMasks))
                        .field("bmiColors", &format_args!("{:?}", self.bmiColors))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_TRUECOLORINFO {
                fn eq(&self, other: &Self) -> bool {
                    self.dwBitMasks == other.dwBitMasks && self.bmiColors == other.bmiColors
                }
            }
            impl ::std::cmp::Eq for KS_TRUECOLORINFO {}
            unsafe impl ::windows::Abi for KS_TRUECOLORINFO {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_VIDEOINFO {
                pub rcSource: super::DisplayDevices::RECT,
                pub rcTarget: super::DisplayDevices::RECT,
                pub dwBitRate: u32,
                pub dwBitErrorRate: u32,
                pub AvgTimePerFrame: i64,
                pub bmiHeader: KS_BITMAPINFOHEADER,
                pub Anonymous: KS_VIDEOINFO_0,
            }
            impl KS_VIDEOINFO {}
            unsafe impl ::windows::Abi for KS_VIDEOINFO {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union KS_VIDEOINFO_0 {
                pub bmiColors: [KS_RGBQUAD; 256],
                pub dwBitMasks: [u32; 3],
                pub TrueColorInfo: KS_TRUECOLORINFO,
            }
            impl KS_VIDEOINFO_0 {}
            unsafe impl ::windows::Abi for KS_VIDEOINFO_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_DATAFORMAT_VIDEOINFO_PALETTE {
                pub DataFormat: KSDATAFORMAT,
                pub VideoInfo: KS_VIDEOINFO,
            }
            impl KS_DATAFORMAT_VIDEOINFO_PALETTE {}
            unsafe impl ::windows::Abi for KS_DATAFORMAT_VIDEOINFO_PALETTE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_DATARANGE_ANALOGVIDEO {
                pub DataRange: KSDATAFORMAT,
                pub AnalogVideoInfo: KS_AnalogVideoInfo,
            }
            impl KS_DATARANGE_ANALOGVIDEO {}
            unsafe impl ::windows::Abi for KS_DATARANGE_ANALOGVIDEO {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_VIDEO_STREAM_CONFIG_CAPS {
                pub guid: ::windows::Guid,
                pub VideoStandard: u32,
                pub InputSize: super::DisplayDevices::SIZE,
                pub MinCroppingSize: super::DisplayDevices::SIZE,
                pub MaxCroppingSize: super::DisplayDevices::SIZE,
                pub CropGranularityX: i32,
                pub CropGranularityY: i32,
                pub CropAlignX: i32,
                pub CropAlignY: i32,
                pub MinOutputSize: super::DisplayDevices::SIZE,
                pub MaxOutputSize: super::DisplayDevices::SIZE,
                pub OutputGranularityX: i32,
                pub OutputGranularityY: i32,
                pub StretchTapsX: i32,
                pub StretchTapsY: i32,
                pub ShrinkTapsX: i32,
                pub ShrinkTapsY: i32,
                pub MinFrameInterval: i64,
                pub MaxFrameInterval: i64,
                pub MinBitsPerSecond: i32,
                pub MaxBitsPerSecond: i32,
            }
            impl KS_VIDEO_STREAM_CONFIG_CAPS {}
            impl ::std::default::Default for KS_VIDEO_STREAM_CONFIG_CAPS {
                fn default() -> Self {
                    Self {
                        guid: ::std::default::Default::default(),
                        VideoStandard: 0,
                        InputSize: ::std::default::Default::default(),
                        MinCroppingSize: ::std::default::Default::default(),
                        MaxCroppingSize: ::std::default::Default::default(),
                        CropGranularityX: 0,
                        CropGranularityY: 0,
                        CropAlignX: 0,
                        CropAlignY: 0,
                        MinOutputSize: ::std::default::Default::default(),
                        MaxOutputSize: ::std::default::Default::default(),
                        OutputGranularityX: 0,
                        OutputGranularityY: 0,
                        StretchTapsX: 0,
                        StretchTapsY: 0,
                        ShrinkTapsX: 0,
                        ShrinkTapsY: 0,
                        MinFrameInterval: 0,
                        MaxFrameInterval: 0,
                        MinBitsPerSecond: 0,
                        MaxBitsPerSecond: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KS_VIDEO_STREAM_CONFIG_CAPS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_VIDEO_STREAM_CONFIG_CAPS")
                        .field("guid", &format_args!("{:?}", self.guid))
                        .field("VideoStandard", &format_args!("{:?}", self.VideoStandard))
                        .field("InputSize", &format_args!("{:?}", self.InputSize))
                        .field(
                            "MinCroppingSize",
                            &format_args!("{:?}", self.MinCroppingSize),
                        )
                        .field(
                            "MaxCroppingSize",
                            &format_args!("{:?}", self.MaxCroppingSize),
                        )
                        .field(
                            "CropGranularityX",
                            &format_args!("{:?}", self.CropGranularityX),
                        )
                        .field(
                            "CropGranularityY",
                            &format_args!("{:?}", self.CropGranularityY),
                        )
                        .field("CropAlignX", &format_args!("{:?}", self.CropAlignX))
                        .field("CropAlignY", &format_args!("{:?}", self.CropAlignY))
                        .field("MinOutputSize", &format_args!("{:?}", self.MinOutputSize))
                        .field("MaxOutputSize", &format_args!("{:?}", self.MaxOutputSize))
                        .field(
                            "OutputGranularityX",
                            &format_args!("{:?}", self.OutputGranularityX),
                        )
                        .field(
                            "OutputGranularityY",
                            &format_args!("{:?}", self.OutputGranularityY),
                        )
                        .field("StretchTapsX", &format_args!("{:?}", self.StretchTapsX))
                        .field("StretchTapsY", &format_args!("{:?}", self.StretchTapsY))
                        .field("ShrinkTapsX", &format_args!("{:?}", self.ShrinkTapsX))
                        .field("ShrinkTapsY", &format_args!("{:?}", self.ShrinkTapsY))
                        .field(
                            "MinFrameInterval",
                            &format_args!("{:?}", self.MinFrameInterval),
                        )
                        .field(
                            "MaxFrameInterval",
                            &format_args!("{:?}", self.MaxFrameInterval),
                        )
                        .field(
                            "MinBitsPerSecond",
                            &format_args!("{:?}", self.MinBitsPerSecond),
                        )
                        .field(
                            "MaxBitsPerSecond",
                            &format_args!("{:?}", self.MaxBitsPerSecond),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_VIDEO_STREAM_CONFIG_CAPS {
                fn eq(&self, other: &Self) -> bool {
                    self.guid == other.guid
                        && self.VideoStandard == other.VideoStandard
                        && self.InputSize == other.InputSize
                        && self.MinCroppingSize == other.MinCroppingSize
                        && self.MaxCroppingSize == other.MaxCroppingSize
                        && self.CropGranularityX == other.CropGranularityX
                        && self.CropGranularityY == other.CropGranularityY
                        && self.CropAlignX == other.CropAlignX
                        && self.CropAlignY == other.CropAlignY
                        && self.MinOutputSize == other.MinOutputSize
                        && self.MaxOutputSize == other.MaxOutputSize
                        && self.OutputGranularityX == other.OutputGranularityX
                        && self.OutputGranularityY == other.OutputGranularityY
                        && self.StretchTapsX == other.StretchTapsX
                        && self.StretchTapsY == other.StretchTapsY
                        && self.ShrinkTapsX == other.ShrinkTapsX
                        && self.ShrinkTapsY == other.ShrinkTapsY
                        && self.MinFrameInterval == other.MinFrameInterval
                        && self.MaxFrameInterval == other.MaxFrameInterval
                        && self.MinBitsPerSecond == other.MinBitsPerSecond
                        && self.MaxBitsPerSecond == other.MaxBitsPerSecond
                }
            }
            impl ::std::cmp::Eq for KS_VIDEO_STREAM_CONFIG_CAPS {}
            unsafe impl ::windows::Abi for KS_VIDEO_STREAM_CONFIG_CAPS {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_DATARANGE_H264_VIDEO {
                pub DataRange: KSDATAFORMAT,
                pub bFixedSizeSamples: super::SystemServices::BOOL,
                pub bTemporalCompression: super::SystemServices::BOOL,
                pub StreamDescriptionFlags: u32,
                pub MemoryAllocationFlags: u32,
                pub ConfigCaps: KS_VIDEO_STREAM_CONFIG_CAPS,
                pub VideoInfoHeader: KS_H264VIDEOINFO,
            }
            impl KS_DATARANGE_H264_VIDEO {}
            unsafe impl ::windows::Abi for KS_DATARANGE_H264_VIDEO {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_DATARANGE_IMAGE {
                pub DataRange: KSDATAFORMAT,
                pub ConfigCaps: KS_VIDEO_STREAM_CONFIG_CAPS,
                pub ImageInfoHeader: KS_BITMAPINFOHEADER,
            }
            impl KS_DATARANGE_IMAGE {}
            unsafe impl ::windows::Abi for KS_DATARANGE_IMAGE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_MPEG1VIDEOINFO {
                pub hdr: KS_VIDEOINFOHEADER,
                pub dwStartTimeCode: u32,
                pub cbSequenceHeader: u32,
                pub bSequenceHeader: [u8; 1],
            }
            impl KS_MPEG1VIDEOINFO {}
            impl ::std::default::Default for KS_MPEG1VIDEOINFO {
                fn default() -> Self {
                    Self {
                        hdr: ::std::default::Default::default(),
                        dwStartTimeCode: 0,
                        cbSequenceHeader: 0,
                        bSequenceHeader: [0; 1],
                    }
                }
            }
            impl ::std::fmt::Debug for KS_MPEG1VIDEOINFO {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_MPEG1VIDEOINFO")
                        .field("hdr", &format_args!("{:?}", self.hdr))
                        .field(
                            "dwStartTimeCode",
                            &format_args!("{:?}", self.dwStartTimeCode),
                        )
                        .field(
                            "cbSequenceHeader",
                            &format_args!("{:?}", self.cbSequenceHeader),
                        )
                        .field(
                            "bSequenceHeader",
                            &format_args!("{:?}", self.bSequenceHeader),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_MPEG1VIDEOINFO {
                fn eq(&self, other: &Self) -> bool {
                    self.hdr == other.hdr
                        && self.dwStartTimeCode == other.dwStartTimeCode
                        && self.cbSequenceHeader == other.cbSequenceHeader
                        && self.bSequenceHeader == other.bSequenceHeader
                }
            }
            impl ::std::cmp::Eq for KS_MPEG1VIDEOINFO {}
            unsafe impl ::windows::Abi for KS_MPEG1VIDEOINFO {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_DATARANGE_MPEG1_VIDEO {
                pub DataRange: KSDATAFORMAT,
                pub bFixedSizeSamples: super::SystemServices::BOOL,
                pub bTemporalCompression: super::SystemServices::BOOL,
                pub StreamDescriptionFlags: u32,
                pub MemoryAllocationFlags: u32,
                pub ConfigCaps: KS_VIDEO_STREAM_CONFIG_CAPS,
                pub VideoInfoHeader: KS_MPEG1VIDEOINFO,
            }
            impl KS_DATARANGE_MPEG1_VIDEO {}
            unsafe impl ::windows::Abi for KS_DATARANGE_MPEG1_VIDEO {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_DATARANGE_MPEG2_VIDEO {
                pub DataRange: KSDATAFORMAT,
                pub bFixedSizeSamples: super::SystemServices::BOOL,
                pub bTemporalCompression: super::SystemServices::BOOL,
                pub StreamDescriptionFlags: u32,
                pub MemoryAllocationFlags: u32,
                pub ConfigCaps: KS_VIDEO_STREAM_CONFIG_CAPS,
                pub VideoInfoHeader: KS_MPEGVIDEOINFO2,
            }
            impl KS_DATARANGE_MPEG2_VIDEO {}
            unsafe impl ::windows::Abi for KS_DATARANGE_MPEG2_VIDEO {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_DATARANGE_VIDEO {
                pub DataRange: KSDATAFORMAT,
                pub bFixedSizeSamples: super::SystemServices::BOOL,
                pub bTemporalCompression: super::SystemServices::BOOL,
                pub StreamDescriptionFlags: u32,
                pub MemoryAllocationFlags: u32,
                pub ConfigCaps: KS_VIDEO_STREAM_CONFIG_CAPS,
                pub VideoInfoHeader: KS_VIDEOINFOHEADER,
            }
            impl KS_DATARANGE_VIDEO {}
            unsafe impl ::windows::Abi for KS_DATARANGE_VIDEO {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_DATARANGE_VIDEO2 {
                pub DataRange: KSDATAFORMAT,
                pub bFixedSizeSamples: super::SystemServices::BOOL,
                pub bTemporalCompression: super::SystemServices::BOOL,
                pub StreamDescriptionFlags: u32,
                pub MemoryAllocationFlags: u32,
                pub ConfigCaps: KS_VIDEO_STREAM_CONFIG_CAPS,
                pub VideoInfoHeader: KS_VIDEOINFOHEADER2,
            }
            impl KS_DATARANGE_VIDEO2 {}
            unsafe impl ::windows::Abi for KS_DATARANGE_VIDEO2 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_DATARANGE_VIDEO_PALETTE {
                pub DataRange: KSDATAFORMAT,
                pub bFixedSizeSamples: super::SystemServices::BOOL,
                pub bTemporalCompression: super::SystemServices::BOOL,
                pub StreamDescriptionFlags: u32,
                pub MemoryAllocationFlags: u32,
                pub ConfigCaps: KS_VIDEO_STREAM_CONFIG_CAPS,
                pub VideoInfo: KS_VIDEOINFO,
            }
            impl KS_DATARANGE_VIDEO_PALETTE {}
            unsafe impl ::windows::Abi for KS_DATARANGE_VIDEO_PALETTE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_DATARANGE_VIDEO_VBI {
                pub DataRange: KSDATAFORMAT,
                pub bFixedSizeSamples: super::SystemServices::BOOL,
                pub bTemporalCompression: super::SystemServices::BOOL,
                pub StreamDescriptionFlags: u32,
                pub MemoryAllocationFlags: u32,
                pub ConfigCaps: KS_VIDEO_STREAM_CONFIG_CAPS,
                pub VBIInfoHeader: KS_VBIINFOHEADER,
            }
            impl KS_DATARANGE_VIDEO_VBI {}
            unsafe impl ::windows::Abi for KS_DATARANGE_VIDEO_VBI {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KS_DVDCOPYSTATE(pub i32);
            impl KS_DVDCOPYSTATE {
                pub const KS_DVDCOPYSTATE_INITIALIZE: Self = Self(0i32);
                pub const KS_DVDCOPYSTATE_INITIALIZE_TITLE: Self = Self(1i32);
                pub const KS_DVDCOPYSTATE_AUTHENTICATION_NOT_REQUIRED: Self = Self(2i32);
                pub const KS_DVDCOPYSTATE_AUTHENTICATION_REQUIRED: Self = Self(3i32);
                pub const KS_DVDCOPYSTATE_DONE: Self = Self(4i32);
            }
            impl ::std::convert::From<i32> for KS_DVDCOPYSTATE {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KS_DVDCOPYSTATE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_DVDCOPY_BUSKEY {
                pub BusKey: [u8; 5],
                pub Reserved: [u8; 1],
            }
            impl KS_DVDCOPY_BUSKEY {}
            impl ::std::default::Default for KS_DVDCOPY_BUSKEY {
                fn default() -> Self {
                    Self {
                        BusKey: [0; 5],
                        Reserved: [0; 1],
                    }
                }
            }
            impl ::std::fmt::Debug for KS_DVDCOPY_BUSKEY {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_DVDCOPY_BUSKEY")
                        .field("BusKey", &format_args!("{:?}", self.BusKey))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_DVDCOPY_BUSKEY {
                fn eq(&self, other: &Self) -> bool {
                    self.BusKey == other.BusKey && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for KS_DVDCOPY_BUSKEY {}
            unsafe impl ::windows::Abi for KS_DVDCOPY_BUSKEY {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_DVDCOPY_CHLGKEY {
                pub ChlgKey: [u8; 10],
                pub Reserved: [u8; 2],
            }
            impl KS_DVDCOPY_CHLGKEY {}
            impl ::std::default::Default for KS_DVDCOPY_CHLGKEY {
                fn default() -> Self {
                    Self {
                        ChlgKey: [0; 10],
                        Reserved: [0; 2],
                    }
                }
            }
            impl ::std::fmt::Debug for KS_DVDCOPY_CHLGKEY {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_DVDCOPY_CHLGKEY")
                        .field("ChlgKey", &format_args!("{:?}", self.ChlgKey))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_DVDCOPY_CHLGKEY {
                fn eq(&self, other: &Self) -> bool {
                    self.ChlgKey == other.ChlgKey && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for KS_DVDCOPY_CHLGKEY {}
            unsafe impl ::windows::Abi for KS_DVDCOPY_CHLGKEY {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_DVDCOPY_DISCKEY {
                pub DiscKey: [u8; 2048],
            }
            impl KS_DVDCOPY_DISCKEY {}
            impl ::std::default::Default for KS_DVDCOPY_DISCKEY {
                fn default() -> Self {
                    Self { DiscKey: [0; 2048] }
                }
            }
            impl ::std::fmt::Debug for KS_DVDCOPY_DISCKEY {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_DVDCOPY_DISCKEY")
                        .field("DiscKey", &format_args!("{:?}", self.DiscKey))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_DVDCOPY_DISCKEY {
                fn eq(&self, other: &Self) -> bool {
                    self.DiscKey == other.DiscKey
                }
            }
            impl ::std::cmp::Eq for KS_DVDCOPY_DISCKEY {}
            unsafe impl ::windows::Abi for KS_DVDCOPY_DISCKEY {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_DVDCOPY_REGION {
                pub Reserved: u8,
                pub RegionData: u8,
                pub Reserved2: [u8; 2],
            }
            impl KS_DVDCOPY_REGION {}
            impl ::std::default::Default for KS_DVDCOPY_REGION {
                fn default() -> Self {
                    Self {
                        Reserved: 0,
                        RegionData: 0,
                        Reserved2: [0; 2],
                    }
                }
            }
            impl ::std::fmt::Debug for KS_DVDCOPY_REGION {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_DVDCOPY_REGION")
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .field("RegionData", &format_args!("{:?}", self.RegionData))
                        .field("Reserved2", &format_args!("{:?}", self.Reserved2))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_DVDCOPY_REGION {
                fn eq(&self, other: &Self) -> bool {
                    self.Reserved == other.Reserved
                        && self.RegionData == other.RegionData
                        && self.Reserved2 == other.Reserved2
                }
            }
            impl ::std::cmp::Eq for KS_DVDCOPY_REGION {}
            unsafe impl ::windows::Abi for KS_DVDCOPY_REGION {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_DVDCOPY_SET_COPY_STATE {
                pub DVDCopyState: u32,
            }
            impl KS_DVDCOPY_SET_COPY_STATE {}
            impl ::std::default::Default for KS_DVDCOPY_SET_COPY_STATE {
                fn default() -> Self {
                    Self { DVDCopyState: 0 }
                }
            }
            impl ::std::fmt::Debug for KS_DVDCOPY_SET_COPY_STATE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_DVDCOPY_SET_COPY_STATE")
                        .field("DVDCopyState", &format_args!("{:?}", self.DVDCopyState))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_DVDCOPY_SET_COPY_STATE {
                fn eq(&self, other: &Self) -> bool {
                    self.DVDCopyState == other.DVDCopyState
                }
            }
            impl ::std::cmp::Eq for KS_DVDCOPY_SET_COPY_STATE {}
            unsafe impl ::windows::Abi for KS_DVDCOPY_SET_COPY_STATE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_DVDCOPY_TITLEKEY {
                pub KeyFlags: u32,
                pub ReservedNT: [u32; 2],
                pub TitleKey: [u8; 6],
                pub Reserved: [u8; 2],
            }
            impl KS_DVDCOPY_TITLEKEY {}
            impl ::std::default::Default for KS_DVDCOPY_TITLEKEY {
                fn default() -> Self {
                    Self {
                        KeyFlags: 0,
                        ReservedNT: [0; 2],
                        TitleKey: [0; 6],
                        Reserved: [0; 2],
                    }
                }
            }
            impl ::std::fmt::Debug for KS_DVDCOPY_TITLEKEY {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_DVDCOPY_TITLEKEY")
                        .field("KeyFlags", &format_args!("{:?}", self.KeyFlags))
                        .field("ReservedNT", &format_args!("{:?}", self.ReservedNT))
                        .field("TitleKey", &format_args!("{:?}", self.TitleKey))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_DVDCOPY_TITLEKEY {
                fn eq(&self, other: &Self) -> bool {
                    self.KeyFlags == other.KeyFlags
                        && self.ReservedNT == other.ReservedNT
                        && self.TitleKey == other.TitleKey
                        && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for KS_DVDCOPY_TITLEKEY {}
            unsafe impl ::windows::Abi for KS_DVDCOPY_TITLEKEY {
                type Abi = Self;
            }
            pub const KS_DVD_CGMS_COPY_ONCE: u32 = 16u32;
            pub const KS_DVD_CGMS_COPY_PERMITTED: u32 = 0u32;
            pub const KS_DVD_CGMS_COPY_PROTECT_MASK: u32 = 24u32;
            pub const KS_DVD_CGMS_NO_COPY: u32 = 24u32;
            pub const KS_DVD_CGMS_RESERVED_MASK: u32 = 120u32;
            pub const KS_DVD_COPYRIGHTED: u32 = 64u32;
            pub const KS_DVD_COPYRIGHT_MASK: u32 = 64u32;
            pub const KS_DVD_NOT_COPYRIGHTED: u32 = 0u32;
            pub const KS_DVD_SECTOR_NOT_PROTECTED: u32 = 0u32;
            pub const KS_DVD_SECTOR_PROTECTED: u32 = 32u32;
            pub const KS_DVD_SECTOR_PROTECT_MASK: u32 = 32u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_DVD_YCrCb {
                pub Reserved: u8,
                pub Y: u8,
                pub Cr: u8,
                pub Cb: u8,
            }
            impl KS_DVD_YCrCb {}
            impl ::std::default::Default for KS_DVD_YCrCb {
                fn default() -> Self {
                    Self {
                        Reserved: 0,
                        Y: 0,
                        Cr: 0,
                        Cb: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KS_DVD_YCrCb {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_DVD_YCrCb")
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .field("Y", &format_args!("{:?}", self.Y))
                        .field("Cr", &format_args!("{:?}", self.Cr))
                        .field("Cb", &format_args!("{:?}", self.Cb))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_DVD_YCrCb {
                fn eq(&self, other: &Self) -> bool {
                    self.Reserved == other.Reserved
                        && self.Y == other.Y
                        && self.Cr == other.Cr
                        && self.Cb == other.Cb
                }
            }
            impl ::std::cmp::Eq for KS_DVD_YCrCb {}
            unsafe impl ::windows::Abi for KS_DVD_YCrCb {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_FRAME_INFO {
                pub ExtendedHeaderSize: u32,
                pub dwFrameFlags: u32,
                pub PictureNumber: i64,
                pub DropCount: i64,
                pub hDirectDraw: super::SystemServices::HANDLE,
                pub hSurfaceHandle: super::SystemServices::HANDLE,
                pub DirectDrawRect: super::DisplayDevices::RECT,
                pub Anonymous1: KS_FRAME_INFO_0,
                pub Reserved2: u32,
                pub Anonymous2: KS_FRAME_INFO_1,
            }
            impl KS_FRAME_INFO {}
            unsafe impl ::windows::Abi for KS_FRAME_INFO {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union KS_FRAME_INFO_0 {
                pub lSurfacePitch: i32,
                pub Reserved1: u32,
            }
            impl KS_FRAME_INFO_0 {}
            unsafe impl ::windows::Abi for KS_FRAME_INFO_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union KS_FRAME_INFO_1 {
                pub Anonymous: KS_FRAME_INFO_1_0,
                pub FrameCompletionNumber: u64,
            }
            impl KS_FRAME_INFO_1 {}
            unsafe impl ::windows::Abi for KS_FRAME_INFO_1 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_FRAME_INFO_1_0 {
                pub Reserved3: u32,
                pub Reserved4: u32,
            }
            impl KS_FRAME_INFO_1_0 {}
            impl ::std::default::Default for KS_FRAME_INFO_1_0 {
                fn default() -> Self {
                    Self {
                        Reserved3: 0,
                        Reserved4: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KS_FRAME_INFO_1_0 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_Anonymous_e__Struct")
                        .field("Reserved3", &format_args!("{:?}", self.Reserved3))
                        .field("Reserved4", &format_args!("{:?}", self.Reserved4))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_FRAME_INFO_1_0 {
                fn eq(&self, other: &Self) -> bool {
                    self.Reserved3 == other.Reserved3 && self.Reserved4 == other.Reserved4
                }
            }
            impl ::std::cmp::Eq for KS_FRAME_INFO_1_0 {}
            unsafe impl ::windows::Abi for KS_FRAME_INFO_1_0 {
                type Abi = Self;
            }
            pub const KS_INTERLACE_1FieldPerSample: u32 = 2u32;
            pub const KS_INTERLACE_DisplayModeBobOnly: u32 = 0u32;
            pub const KS_INTERLACE_DisplayModeBobOrWeave: u32 = 128u32;
            pub const KS_INTERLACE_DisplayModeMask: u32 = 192u32;
            pub const KS_INTERLACE_DisplayModeWeaveOnly: u32 = 64u32;
            pub const KS_INTERLACE_Field1First: u32 = 4u32;
            pub const KS_INTERLACE_FieldPatBothIrregular: u32 = 48u32;
            pub const KS_INTERLACE_FieldPatBothRegular: u32 = 32u32;
            pub const KS_INTERLACE_FieldPatField1Only: u32 = 0u32;
            pub const KS_INTERLACE_FieldPatField2Only: u32 = 16u32;
            pub const KS_INTERLACE_FieldPatternMask: u32 = 48u32;
            pub const KS_INTERLACE_IsInterlaced: u32 = 1u32;
            pub const KS_INTERLACE_UNUSED: u32 = 8u32;
            pub const KS_MAX_SIZE_MPEG1_SEQUENCE_INFO: u32 = 140u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_MPEAUDIOINFO {
                pub dwFlags: u32,
                pub dwReserved1: u32,
                pub dwReserved2: u32,
                pub dwReserved3: u32,
            }
            impl KS_MPEAUDIOINFO {}
            impl ::std::default::Default for KS_MPEAUDIOINFO {
                fn default() -> Self {
                    Self {
                        dwFlags: 0,
                        dwReserved1: 0,
                        dwReserved2: 0,
                        dwReserved3: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KS_MPEAUDIOINFO {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_MPEAUDIOINFO")
                        .field("dwFlags", &format_args!("{:?}", self.dwFlags))
                        .field("dwReserved1", &format_args!("{:?}", self.dwReserved1))
                        .field("dwReserved2", &format_args!("{:?}", self.dwReserved2))
                        .field("dwReserved3", &format_args!("{:?}", self.dwReserved3))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_MPEAUDIOINFO {
                fn eq(&self, other: &Self) -> bool {
                    self.dwFlags == other.dwFlags
                        && self.dwReserved1 == other.dwReserved1
                        && self.dwReserved2 == other.dwReserved2
                        && self.dwReserved3 == other.dwReserved3
                }
            }
            impl ::std::cmp::Eq for KS_MPEAUDIOINFO {}
            unsafe impl ::windows::Abi for KS_MPEAUDIOINFO {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KS_MPEG2Level(pub i32);
            impl KS_MPEG2Level {
                pub const KS_MPEG2Level_Low: Self = Self(0i32);
                pub const KS_MPEG2Level_Main: Self = Self(1i32);
                pub const KS_MPEG2Level_High1440: Self = Self(2i32);
                pub const KS_MPEG2Level_High: Self = Self(3i32);
            }
            impl ::std::convert::From<i32> for KS_MPEG2Level {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KS_MPEG2Level {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KS_MPEG2Profile(pub i32);
            impl KS_MPEG2Profile {
                pub const KS_MPEG2Profile_Simple: Self = Self(0i32);
                pub const KS_MPEG2Profile_Main: Self = Self(1i32);
                pub const KS_MPEG2Profile_SNRScalable: Self = Self(2i32);
                pub const KS_MPEG2Profile_SpatiallyScalable: Self = Self(3i32);
                pub const KS_MPEG2Profile_High: Self = Self(4i32);
            }
            impl ::std::convert::From<i32> for KS_MPEG2Profile {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KS_MPEG2Profile {
                type Abi = Self;
            }
            pub const KS_MPEG2_27MhzTimebase: u32 = 256u32;
            pub const KS_MPEG2_DSS_UserData: u32 = 64u32;
            pub const KS_MPEG2_DVB_UserData: u32 = 128u32;
            pub const KS_MPEG2_DVDLine21Field1: u32 = 2u32;
            pub const KS_MPEG2_DVDLine21Field2: u32 = 4u32;
            pub const KS_MPEG2_DoPanScan: u32 = 1u32;
            pub const KS_MPEG2_FilmCameraMode: u32 = 16u32;
            pub const KS_MPEG2_LetterboxAnalogOut: u32 = 32u32;
            pub const KS_MPEG2_SourceIsLetterboxed: u32 = 8u32;
            pub const KS_MPEG2_WidescreenAnalogOut: u32 = 512u32;
            pub const KS_MPEGAUDIOINFO_27MhzTimebase: u32 = 1u32;
            pub const KS_NABTS_GROUPID_LOCAL_CABLE_SYSTEM_ADVERTISER_BASE: u32 = 2224u32;
            pub const KS_NABTS_GROUPID_LOCAL_CABLE_SYSTEM_CONTENT_BASE: u32 = 2208u32;
            pub const KS_NABTS_GROUPID_MICROSOFT_RESERVED_TEST_DATA_BASE: u32 = 2288u32;
            pub const KS_NABTS_GROUPID_NETWORK_WIDE_ADVERTISER_BASE: u32 = 2160u32;
            pub const KS_NABTS_GROUPID_NETWORK_WIDE_CONTENT_BASE: u32 = 2144u32;
            pub const KS_NABTS_GROUPID_ORIGINAL_CONTENT_ADVERTISER_BASE: u32 = 2064u32;
            pub const KS_NABTS_GROUPID_ORIGINAL_CONTENT_BASE: u32 = 2048u32;
            pub const KS_NABTS_GROUPID_PRODUCTION_COMPANY_ADVERTISER_BASE: u32 = 2096u32;
            pub const KS_NABTS_GROUPID_PRODUCTION_COMPANY_CONTENT_BASE: u32 = 2080u32;
            pub const KS_NABTS_GROUPID_SYNDICATED_SHOW_ADVERTISER_BASE: u32 = 2128u32;
            pub const KS_NABTS_GROUPID_SYNDICATED_SHOW_CONTENT_BASE: u32 = 2112u32;
            pub const KS_NABTS_GROUPID_TELEVISION_STATION_ADVERTISER_BASE: u32 = 2192u32;
            pub const KS_NABTS_GROUPID_TELEVISION_STATION_CONTENT_BASE: u32 = 2176u32;
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KS_PhysicalConnectorType(pub i32);
            impl KS_PhysicalConnectorType {
                pub const KS_PhysConn_Video_Tuner: Self = Self(1i32);
                pub const KS_PhysConn_Video_Composite: Self = Self(2i32);
                pub const KS_PhysConn_Video_SVideo: Self = Self(3i32);
                pub const KS_PhysConn_Video_RGB: Self = Self(4i32);
                pub const KS_PhysConn_Video_YRYBY: Self = Self(5i32);
                pub const KS_PhysConn_Video_SerialDigital: Self = Self(6i32);
                pub const KS_PhysConn_Video_ParallelDigital: Self = Self(7i32);
                pub const KS_PhysConn_Video_SCSI: Self = Self(8i32);
                pub const KS_PhysConn_Video_AUX: Self = Self(9i32);
                pub const KS_PhysConn_Video_1394: Self = Self(10i32);
                pub const KS_PhysConn_Video_USB: Self = Self(11i32);
                pub const KS_PhysConn_Video_VideoDecoder: Self = Self(12i32);
                pub const KS_PhysConn_Video_VideoEncoder: Self = Self(13i32);
                pub const KS_PhysConn_Video_SCART: Self = Self(14i32);
                pub const KS_PhysConn_Audio_Tuner: Self = Self(4096i32);
                pub const KS_PhysConn_Audio_Line: Self = Self(4097i32);
                pub const KS_PhysConn_Audio_Mic: Self = Self(4098i32);
                pub const KS_PhysConn_Audio_AESDigital: Self = Self(4099i32);
                pub const KS_PhysConn_Audio_SPDIFDigital: Self = Self(4100i32);
                pub const KS_PhysConn_Audio_SCSI: Self = Self(4101i32);
                pub const KS_PhysConn_Audio_AUX: Self = Self(4102i32);
                pub const KS_PhysConn_Audio_1394: Self = Self(4103i32);
                pub const KS_PhysConn_Audio_USB: Self = Self(4104i32);
                pub const KS_PhysConn_Audio_AudioDecoder: Self = Self(4105i32);
            }
            impl ::std::convert::From<i32> for KS_PhysicalConnectorType {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KS_PhysicalConnectorType {
                type Abi = Self;
            }
            pub const KS_SECURE_CAMERA_SCENARIO_ID: ::windows::Guid = ::windows::Guid::from_values(
                2924739694,
                36233,
                17544,
                [157, 46, 77, 0, 135, 49, 197, 253],
            );
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KS_SEEKING_CAPABILITIES(pub i32);
            impl KS_SEEKING_CAPABILITIES {
                pub const KS_SEEKING_CanSeekAbsolute: Self = Self(1i32);
                pub const KS_SEEKING_CanSeekForwards: Self = Self(2i32);
                pub const KS_SEEKING_CanSeekBackwards: Self = Self(4i32);
                pub const KS_SEEKING_CanGetCurrentPos: Self = Self(8i32);
                pub const KS_SEEKING_CanGetStopPos: Self = Self(16i32);
                pub const KS_SEEKING_CanGetDuration: Self = Self(32i32);
                pub const KS_SEEKING_CanPlayBackwards: Self = Self(64i32);
            }
            impl ::std::convert::From<i32> for KS_SEEKING_CAPABILITIES {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KS_SEEKING_CAPABILITIES {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KS_TUNER_STRATEGY(pub i32);
            impl KS_TUNER_STRATEGY {
                pub const KS_TUNER_STRATEGY_PLL: Self = Self(1i32);
                pub const KS_TUNER_STRATEGY_SIGNAL_STRENGTH: Self = Self(2i32);
                pub const KS_TUNER_STRATEGY_DRIVER_TUNES: Self = Self(4i32);
            }
            impl ::std::convert::From<i32> for KS_TUNER_STRATEGY {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KS_TUNER_STRATEGY {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KS_TUNER_TUNING_FLAGS(pub i32);
            impl KS_TUNER_TUNING_FLAGS {
                pub const KS_TUNER_TUNING_EXACT: Self = Self(1i32);
                pub const KS_TUNER_TUNING_FINE: Self = Self(2i32);
                pub const KS_TUNER_TUNING_COARSE: Self = Self(3i32);
            }
            impl ::std::convert::From<i32> for KS_TUNER_TUNING_FLAGS {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KS_TUNER_TUNING_FLAGS {
                type Abi = Self;
            }
            pub const KS_TVAUDIO_MODE_LANG_A: u32 = 16u32;
            pub const KS_TVAUDIO_MODE_LANG_B: u32 = 32u32;
            pub const KS_TVAUDIO_MODE_LANG_C: u32 = 64u32;
            pub const KS_TVAUDIO_MODE_MONO: u32 = 1u32;
            pub const KS_TVAUDIO_MODE_STEREO: u32 = 2u32;
            pub const KS_TVAUDIO_PRESET_LANG_A: u32 = 4096u32;
            pub const KS_TVAUDIO_PRESET_LANG_B: u32 = 8192u32;
            pub const KS_TVAUDIO_PRESET_LANG_C: u32 = 16384u32;
            pub const KS_TVAUDIO_PRESET_STEREO: u32 = 512u32;
            pub const KS_TVTUNER_CHANGE_BEGIN_TUNE: i32 = 1i32;
            pub const KS_TVTUNER_CHANGE_END_TUNE: i32 = 2i32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_TVTUNER_CHANGE_INFO {
                pub dwFlags: u32,
                pub dwCountryCode: u32,
                pub dwAnalogVideoStandard: u32,
                pub dwChannel: u32,
            }
            impl KS_TVTUNER_CHANGE_INFO {}
            impl ::std::default::Default for KS_TVTUNER_CHANGE_INFO {
                fn default() -> Self {
                    Self {
                        dwFlags: 0,
                        dwCountryCode: 0,
                        dwAnalogVideoStandard: 0,
                        dwChannel: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KS_TVTUNER_CHANGE_INFO {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_TVTUNER_CHANGE_INFO")
                        .field("dwFlags", &format_args!("{:?}", self.dwFlags))
                        .field("dwCountryCode", &format_args!("{:?}", self.dwCountryCode))
                        .field(
                            "dwAnalogVideoStandard",
                            &format_args!("{:?}", self.dwAnalogVideoStandard),
                        )
                        .field("dwChannel", &format_args!("{:?}", self.dwChannel))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_TVTUNER_CHANGE_INFO {
                fn eq(&self, other: &Self) -> bool {
                    self.dwFlags == other.dwFlags
                        && self.dwCountryCode == other.dwCountryCode
                        && self.dwAnalogVideoStandard == other.dwAnalogVideoStandard
                        && self.dwChannel == other.dwChannel
                }
            }
            impl ::std::cmp::Eq for KS_TVTUNER_CHANGE_INFO {}
            unsafe impl ::windows::Abi for KS_TVTUNER_CHANGE_INFO {
                type Abi = Self;
            }
            pub const KS_VBICAP_PROTECTION_MV_DETECTED: i32 = 4i32;
            pub const KS_VBICAP_PROTECTION_MV_HARDWARE: i32 = 2i32;
            pub const KS_VBICAP_PROTECTION_MV_PRESENT: i32 = 1i32;
            pub const KS_VBIDATARATE_CC: i32 = 503493i32;
            pub const KS_VBIDATARATE_NABTS: i32 = 5727272i32;
            pub const KS_VBI_FLAG_FIELD1: i32 = 1i32;
            pub const KS_VBI_FLAG_FIELD2: i32 = 2i32;
            pub const KS_VBI_FLAG_FRAME: i32 = 0i32;
            pub const KS_VBI_FLAG_MV_DETECTED: i32 = 1024i32;
            pub const KS_VBI_FLAG_MV_HARDWARE: i32 = 512i32;
            pub const KS_VBI_FLAG_MV_PRESENT: i32 = 256i32;
            pub const KS_VBI_FLAG_TVTUNER_CHANGE: i32 = 16i32;
            pub const KS_VBI_FLAG_VBIINFOHEADER_CHANGE: i32 = 32i32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KS_VBI_FRAME_INFO {
                pub ExtendedHeaderSize: u32,
                pub dwFrameFlags: u32,
                pub PictureNumber: i64,
                pub DropCount: i64,
                pub dwSamplingFrequency: u32,
                pub TvTunerChangeInfo: KS_TVTUNER_CHANGE_INFO,
                pub VBIInfoHeader: KS_VBIINFOHEADER,
            }
            impl KS_VBI_FRAME_INFO {}
            impl ::std::default::Default for KS_VBI_FRAME_INFO {
                fn default() -> Self {
                    Self {
                        ExtendedHeaderSize: 0,
                        dwFrameFlags: 0,
                        PictureNumber: 0,
                        DropCount: 0,
                        dwSamplingFrequency: 0,
                        TvTunerChangeInfo: ::std::default::Default::default(),
                        VBIInfoHeader: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for KS_VBI_FRAME_INFO {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KS_VBI_FRAME_INFO")
                        .field(
                            "ExtendedHeaderSize",
                            &format_args!("{:?}", self.ExtendedHeaderSize),
                        )
                        .field("dwFrameFlags", &format_args!("{:?}", self.dwFrameFlags))
                        .field("PictureNumber", &format_args!("{:?}", self.PictureNumber))
                        .field("DropCount", &format_args!("{:?}", self.DropCount))
                        .field(
                            "dwSamplingFrequency",
                            &format_args!("{:?}", self.dwSamplingFrequency),
                        )
                        .field(
                            "TvTunerChangeInfo",
                            &format_args!("{:?}", self.TvTunerChangeInfo),
                        )
                        .field("VBIInfoHeader", &format_args!("{:?}", self.VBIInfoHeader))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KS_VBI_FRAME_INFO {
                fn eq(&self, other: &Self) -> bool {
                    self.ExtendedHeaderSize == other.ExtendedHeaderSize
                        && self.dwFrameFlags == other.dwFrameFlags
                        && self.PictureNumber == other.PictureNumber
                        && self.DropCount == other.DropCount
                        && self.dwSamplingFrequency == other.dwSamplingFrequency
                        && self.TvTunerChangeInfo == other.TvTunerChangeInfo
                        && self.VBIInfoHeader == other.VBIInfoHeader
                }
            }
            impl ::std::cmp::Eq for KS_VBI_FRAME_INFO {}
            unsafe impl ::windows::Abi for KS_VBI_FRAME_INFO {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KS_VIDEODECODER_FLAGS(pub i32);
            impl KS_VIDEODECODER_FLAGS {
                pub const KS_VIDEODECODER_FLAGS_CAN_DISABLE_OUTPUT: Self = Self(1i32);
                pub const KS_VIDEODECODER_FLAGS_CAN_USE_VCR_LOCKING: Self = Self(2i32);
                pub const KS_VIDEODECODER_FLAGS_CAN_INDICATE_LOCKED: Self = Self(4i32);
            }
            impl ::std::convert::From<i32> for KS_VIDEODECODER_FLAGS {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KS_VIDEODECODER_FLAGS {
                type Abi = Self;
            }
            pub const KS_VIDEOSTREAM_CAPTURE: u32 = 2u32;
            pub const KS_VIDEOSTREAM_CC: u32 = 256u32;
            pub const KS_VIDEOSTREAM_EDS: u32 = 512u32;
            pub const KS_VIDEOSTREAM_IS_VPE: u32 = 32768u32;
            pub const KS_VIDEOSTREAM_NABTS: u32 = 32u32;
            pub const KS_VIDEOSTREAM_PREVIEW: u32 = 1u32;
            pub const KS_VIDEOSTREAM_STILL: u32 = 4096u32;
            pub const KS_VIDEOSTREAM_TELETEXT: u32 = 1024u32;
            pub const KS_VIDEOSTREAM_VBI: u32 = 16u32;
            pub const KS_VIDEO_ALLOC_VPE_AGP: u32 = 4u32;
            pub const KS_VIDEO_ALLOC_VPE_DISPLAY: u32 = 2u32;
            pub const KS_VIDEO_ALLOC_VPE_SYSTEM: u32 = 1u32;
            pub const KS_VIDEO_FLAG_B_FRAME: i32 = 32i32;
            pub const KS_VIDEO_FLAG_FIELD1: i32 = 1i32;
            pub const KS_VIDEO_FLAG_FIELD1FIRST: i32 = 4i32;
            pub const KS_VIDEO_FLAG_FIELD2: i32 = 2i32;
            pub const KS_VIDEO_FLAG_FIELD_MASK: i32 = 3i32;
            pub const KS_VIDEO_FLAG_FRAME: i32 = 0i32;
            pub const KS_VIDEO_FLAG_IPB_MASK: i32 = 48i32;
            pub const KS_VIDEO_FLAG_I_FRAME: i32 = 0i32;
            pub const KS_VIDEO_FLAG_P_FRAME: i32 = 16i32;
            pub const KS_VIDEO_FLAG_REPEAT_FIELD: i32 = 64i32;
            pub const KS_VIDEO_FLAG_WEAVE: i32 = 8i32;
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KS_VideoControlFlags(pub i32);
            impl KS_VideoControlFlags {
                pub const KS_VideoControlFlag_FlipHorizontal: Self = Self(1i32);
                pub const KS_VideoControlFlag_FlipVertical: Self = Self(2i32);
                pub const KS_Obsolete_VideoControlFlag_ExternalTriggerEnable: Self = Self(16i32);
                pub const KS_Obsolete_VideoControlFlag_Trigger: Self = Self(32i32);
                pub const KS_VideoControlFlag_ExternalTriggerEnable: Self = Self(4i32);
                pub const KS_VideoControlFlag_Trigger: Self = Self(8i32);
                pub const KS_VideoControlFlag_IndependentImagePin: Self = Self(64i32);
                pub const KS_VideoControlFlag_StillCapturePreviewFrame: Self = Self(128i32);
                pub const KS_VideoControlFlag_StartPhotoSequenceCapture: Self = Self(256i32);
                pub const KS_VideoControlFlag_StopPhotoSequenceCapture: Self = Self(512i32);
            }
            impl ::std::convert::From<i32> for KS_VideoControlFlags {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KS_VideoControlFlags {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct KS_VideoStreamingHints(pub i32);
            impl KS_VideoStreamingHints {
                pub const KS_StreamingHint_FrameInterval: Self = Self(256i32);
                pub const KS_StreamingHint_KeyFrameRate: Self = Self(512i32);
                pub const KS_StreamingHint_PFrameRate: Self = Self(1024i32);
                pub const KS_StreamingHint_CompQuality: Self = Self(2048i32);
                pub const KS_StreamingHint_CompWindowSize: Self = Self(4096i32);
            }
            impl ::std::convert::From<i32> for KS_VideoStreamingHints {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for KS_VideoStreamingHints {
                type Abi = Self;
            }
            pub const KS_iBLUE: u32 = 2u32;
            pub const KS_iEGA_COLORS: u32 = 16u32;
            pub const KS_iGREEN: u32 = 1u32;
            pub const KS_iMASK_COLORS: u32 = 3u32;
            pub const KS_iMAXBITS: u32 = 8u32;
            pub const KS_iPALETTE: u32 = 8u32;
            pub const KS_iPALETTE_COLORS: u32 = 256u32;
            pub const KS_iRED: u32 = 0u32;
            pub const KS_iTRUECOLOR: u32 = 16u32;
            pub unsafe fn KsCreateAllocator<'a>(
                connectionhandle: impl ::windows::IntoParam<'a, super::SystemServices::HANDLE>,
                allocatorframing: *mut KSALLOCATOR_FRAMING,
                allocatorhandle: *mut super::SystemServices::HANDLE,
            ) -> u32 {
                panic!("Unsupported target OS");
            }
            pub unsafe fn KsCreateAllocator2<'a>(
                connectionhandle: impl ::windows::IntoParam<'a, super::SystemServices::HANDLE>,
                allocatorframing: *mut KSALLOCATOR_FRAMING,
                allocatorhandle: *mut super::SystemServices::HANDLE,
            ) -> ::windows::HRESULT {
                panic!("Unsupported target OS");
            }
            pub unsafe fn KsCreateClock<'a>(
                connectionhandle: impl ::windows::IntoParam<'a, super::SystemServices::HANDLE>,
                clockcreate: *mut KSCLOCK_CREATE,
                clockhandle: *mut super::SystemServices::HANDLE,
            ) -> u32 {
                panic!("Unsupported target OS");
            }
            pub unsafe fn KsCreateClock2<'a>(
                connectionhandle: impl ::windows::IntoParam<'a, super::SystemServices::HANDLE>,
                clockcreate: *mut KSCLOCK_CREATE,
                clockhandle: *mut super::SystemServices::HANDLE,
            ) -> ::windows::HRESULT {
                panic!("Unsupported target OS");
            }
            pub unsafe fn KsCreatePin<'a>(
                filterhandle: impl ::windows::IntoParam<'a, super::SystemServices::HANDLE>,
                connect: *mut KSPIN_CONNECT,
                desiredaccess: u32,
                connectionhandle: *mut super::SystemServices::HANDLE,
            ) -> u32 {
                panic!("Unsupported target OS");
            }
            pub unsafe fn KsCreatePin2<'a>(
                filterhandle: impl ::windows::IntoParam<'a, super::SystemServices::HANDLE>,
                connect: *mut KSPIN_CONNECT,
                desiredaccess: u32,
                connectionhandle: *mut super::SystemServices::HANDLE,
            ) -> ::windows::HRESULT {
                panic!("Unsupported target OS");
            }
            pub unsafe fn KsCreateTopologyNode<'a>(
                parenthandle: impl ::windows::IntoParam<'a, super::SystemServices::HANDLE>,
                nodecreate: *mut KSNODE_CREATE,
                desiredaccess: u32,
                nodehandle: *mut super::SystemServices::HANDLE,
            ) -> u32 {
                panic!("Unsupported target OS");
            }
            pub unsafe fn KsCreateTopologyNode2<'a>(
                parenthandle: impl ::windows::IntoParam<'a, super::SystemServices::HANDLE>,
                nodecreate: *mut KSNODE_CREATE,
                desiredaccess: u32,
                nodehandle: *mut super::SystemServices::HANDLE,
            ) -> ::windows::HRESULT {
                panic!("Unsupported target OS");
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct LOOPEDSTREAMING_POSITION_EVENT_DATA {
                pub KsEventData: KSEVENTDATA,
                pub Position: u64,
            }
            impl LOOPEDSTREAMING_POSITION_EVENT_DATA {}
            unsafe impl ::windows::Abi for LOOPEDSTREAMING_POSITION_EVENT_DATA {
                type Abi = Self;
            }
            pub const MAX_NABTS_VBI_LINES_PER_FIELD: u32 = 11u32;
            pub const MAX_SINK_DESCRIPTION_NAME_LENGTH: u32 = 32u32;
            pub const MAX_WST_VBI_LINES_PER_FIELD: u32 = 17u32;
            pub const MCIERR_BAD_CONSTANT: u32 = 290u32;
            pub const MCIERR_BAD_INTEGER: u32 = 270u32;
            pub const MCIERR_BAD_TIME_FORMAT: u32 = 293u32;
            pub const MCIERR_CANNOT_LOAD_DRIVER: u32 = 266u32;
            pub const MCIERR_CANNOT_USE_ALL: u32 = 279u32;
            pub const MCIERR_CREATEWINDOW: u32 = 347u32;
            pub const MCIERR_CUSTOM_DRIVER_BASE: u32 = 512u32;
            pub const MCIERR_DEVICE_LENGTH: u32 = 310u32;
            pub const MCIERR_DEVICE_LOCKED: u32 = 288u32;
            pub const MCIERR_DEVICE_NOT_INSTALLED: u32 = 306u32;
            pub const MCIERR_DEVICE_NOT_READY: u32 = 276u32;
            pub const MCIERR_DEVICE_OPEN: u32 = 265u32;
            pub const MCIERR_DEVICE_ORD_LENGTH: u32 = 311u32;
            pub const MCIERR_DEVICE_TYPE_REQUIRED: u32 = 287u32;
            pub const MCIERR_DRIVER: u32 = 278u32;
            pub const MCIERR_DRIVER_INTERNAL: u32 = 272u32;
            pub const MCIERR_DUPLICATE_ALIAS: u32 = 289u32;
            pub const MCIERR_DUPLICATE_FLAGS: u32 = 295u32;
            pub const MCIERR_EXTENSION_NOT_FOUND: u32 = 281u32;
            pub const MCIERR_EXTRA_CHARACTERS: u32 = 305u32;
            pub const MCIERR_FILENAME_REQUIRED: u32 = 304u32;
            pub const MCIERR_FILE_NOT_FOUND: u32 = 275u32;
            pub const MCIERR_FILE_NOT_SAVED: u32 = 286u32;
            pub const MCIERR_FILE_READ: u32 = 348u32;
            pub const MCIERR_FILE_WRITE: u32 = 349u32;
            pub const MCIERR_FLAGS_NOT_COMPATIBLE: u32 = 284u32;
            pub const MCIERR_GET_CD: u32 = 307u32;
            pub const MCIERR_HARDWARE: u32 = 262u32;
            pub const MCIERR_ILLEGAL_FOR_AUTO_OPEN: u32 = 303u32;
            pub const MCIERR_INTERNAL: u32 = 277u32;
            pub const MCIERR_INVALID_DEVICE_ID: u32 = 257u32;
            pub const MCIERR_INVALID_DEVICE_NAME: u32 = 263u32;
            pub const MCIERR_INVALID_FILE: u32 = 296u32;
            pub const MCIERR_MISSING_COMMAND_STRING: u32 = 267u32;
            pub const MCIERR_MISSING_DEVICE_NAME: u32 = 292u32;
            pub const MCIERR_MISSING_PARAMETER: u32 = 273u32;
            pub const MCIERR_MISSING_STRING_ARGUMENT: u32 = 269u32;
            pub const MCIERR_MULTIPLE: u32 = 280u32;
            pub const MCIERR_MUST_USE_SHAREABLE: u32 = 291u32;
            pub const MCIERR_NEW_REQUIRES_ALIAS: u32 = 299u32;
            pub const MCIERR_NONAPPLICABLE_FUNCTION: u32 = 302u32;
            pub const MCIERR_NOTIFY_ON_AUTO_OPEN: u32 = 300u32;
            pub const MCIERR_NO_CLOSING_QUOTE: u32 = 294u32;
            pub const MCIERR_NO_ELEMENT_ALLOWED: u32 = 301u32;
            pub const MCIERR_NO_IDENTITY: u32 = 350u32;
            pub const MCIERR_NO_INTEGER: u32 = 312u32;
            pub const MCIERR_NO_WINDOW: u32 = 346u32;
            pub const MCIERR_NULL_PARAMETER_BLOCK: u32 = 297u32;
            pub const MCIERR_OUTOFRANGE: u32 = 282u32;
            pub const MCIERR_OUT_OF_MEMORY: u32 = 264u32;
            pub const MCIERR_PARAM_OVERFLOW: u32 = 268u32;
            pub const MCIERR_PARSER_INTERNAL: u32 = 271u32;
            pub const MCIERR_SEQ_DIV_INCOMPATIBLE: u32 = 336u32;
            pub const MCIERR_SEQ_NOMIDIPRESENT: u32 = 343u32;
            pub const MCIERR_SEQ_PORTUNSPECIFIED: u32 = 342u32;
            pub const MCIERR_SEQ_PORT_INUSE: u32 = 337u32;
            pub const MCIERR_SEQ_PORT_MAPNODEVICE: u32 = 339u32;
            pub const MCIERR_SEQ_PORT_MISCERROR: u32 = 340u32;
            pub const MCIERR_SEQ_PORT_NONEXISTENT: u32 = 338u32;
            pub const MCIERR_SEQ_TIMER: u32 = 341u32;
            pub const MCIERR_SET_CD: u32 = 308u32;
            pub const MCIERR_SET_DRIVE: u32 = 309u32;
            pub const MCIERR_UNNAMED_RESOURCE: u32 = 298u32;
            pub const MCIERR_UNRECOGNIZED_COMMAND: u32 = 261u32;
            pub const MCIERR_UNRECOGNIZED_KEYWORD: u32 = 259u32;
            pub const MCIERR_UNSUPPORTED_FUNCTION: u32 = 274u32;
            pub const MCIERR_WAVE_INPUTSINUSE: u32 = 322u32;
            pub const MCIERR_WAVE_INPUTSUNSUITABLE: u32 = 328u32;
            pub const MCIERR_WAVE_INPUTUNSPECIFIED: u32 = 325u32;
            pub const MCIERR_WAVE_OUTPUTSINUSE: u32 = 320u32;
            pub const MCIERR_WAVE_OUTPUTSUNSUITABLE: u32 = 326u32;
            pub const MCIERR_WAVE_OUTPUTUNSPECIFIED: u32 = 324u32;
            pub const MCIERR_WAVE_SETINPUTINUSE: u32 = 323u32;
            pub const MCIERR_WAVE_SETINPUTUNSUITABLE: u32 = 329u32;
            pub const MCIERR_WAVE_SETOUTPUTINUSE: u32 = 321u32;
            pub const MCIERR_WAVE_SETOUTPUTUNSUITABLE: u32 = 327u32;
            pub const MCI_ANIM_GETDEVCAPS_CAN_REVERSE: i32 = 16385i32;
            pub const MCI_ANIM_GETDEVCAPS_CAN_STRETCH: i32 = 16391i32;
            pub const MCI_ANIM_GETDEVCAPS_FAST_RATE: i32 = 16386i32;
            pub const MCI_ANIM_GETDEVCAPS_MAX_WINDOWS: i32 = 16392i32;
            pub const MCI_ANIM_GETDEVCAPS_NORMAL_RATE: i32 = 16388i32;
            pub const MCI_ANIM_GETDEVCAPS_PALETTES: i32 = 16390i32;
            pub const MCI_ANIM_GETDEVCAPS_SLOW_RATE: i32 = 16387i32;
            pub const MCI_ANIM_INFO_TEXT: i32 = 65536i32;
            pub const MCI_ANIM_OPEN_NOSTATIC: i32 = 262144i32;
            pub const MCI_ANIM_OPEN_PARENT: i32 = 131072i32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_ANIM_OPEN_PARMSA {
                pub dwCallback: usize,
                pub wDeviceID: u32,
                pub lpstrDeviceType: super::SystemServices::PSTR,
                pub lpstrElementName: super::SystemServices::PSTR,
                pub lpstrAlias: super::SystemServices::PSTR,
                pub dwStyle: u32,
                pub hWndParent: super::WindowsAndMessaging::HWND,
            }
            impl MCI_ANIM_OPEN_PARMSA {}
            unsafe impl ::windows::Abi for MCI_ANIM_OPEN_PARMSA {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_ANIM_OPEN_PARMSW {
                pub dwCallback: usize,
                pub wDeviceID: u32,
                pub lpstrDeviceType: super::SystemServices::PWSTR,
                pub lpstrElementName: super::SystemServices::PWSTR,
                pub lpstrAlias: super::SystemServices::PWSTR,
                pub dwStyle: u32,
                pub hWndParent: super::WindowsAndMessaging::HWND,
            }
            impl MCI_ANIM_OPEN_PARMSW {}
            unsafe impl ::windows::Abi for MCI_ANIM_OPEN_PARMSW {
                type Abi = Self;
            }
            pub const MCI_ANIM_OPEN_WS: i32 = 65536i32;
            pub const MCI_ANIM_PLAY_FAST: i32 = 262144i32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_ANIM_PLAY_PARMS {
                pub dwCallback: usize,
                pub dwFrom: u32,
                pub dwTo: u32,
                pub dwSpeed: u32,
            }
            impl MCI_ANIM_PLAY_PARMS {}
            unsafe impl ::windows::Abi for MCI_ANIM_PLAY_PARMS {
                type Abi = Self;
            }
            pub const MCI_ANIM_PLAY_REVERSE: i32 = 131072i32;
            pub const MCI_ANIM_PLAY_SCAN: i32 = 1048576i32;
            pub const MCI_ANIM_PLAY_SLOW: i32 = 524288i32;
            pub const MCI_ANIM_PLAY_SPEED: i32 = 65536i32;
            pub const MCI_ANIM_PUT_DESTINATION: i32 = 262144i32;
            pub const MCI_ANIM_PUT_SOURCE: i32 = 131072i32;
            pub const MCI_ANIM_REALIZE_BKGD: i32 = 131072i32;
            pub const MCI_ANIM_REALIZE_NORM: i32 = 65536i32;
            pub const MCI_ANIM_RECT: i32 = 65536i32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_ANIM_RECT_PARMS {
                pub dwCallback: usize,
                pub rc: super::DisplayDevices::RECT,
            }
            impl MCI_ANIM_RECT_PARMS {}
            unsafe impl ::windows::Abi for MCI_ANIM_RECT_PARMS {
                type Abi = Self;
            }
            pub const MCI_ANIM_STATUS_FORWARD: i32 = 16386i32;
            pub const MCI_ANIM_STATUS_HPAL: i32 = 16388i32;
            pub const MCI_ANIM_STATUS_HWND: i32 = 16387i32;
            pub const MCI_ANIM_STATUS_SPEED: i32 = 16385i32;
            pub const MCI_ANIM_STATUS_STRETCH: i32 = 16389i32;
            pub const MCI_ANIM_STEP_FRAMES: i32 = 131072i32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_ANIM_STEP_PARMS {
                pub dwCallback: usize,
                pub dwFrames: u32,
            }
            impl MCI_ANIM_STEP_PARMS {}
            unsafe impl ::windows::Abi for MCI_ANIM_STEP_PARMS {
                type Abi = Self;
            }
            pub const MCI_ANIM_STEP_REVERSE: i32 = 65536i32;
            pub const MCI_ANIM_UPDATE_HDC: i32 = 131072i32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_ANIM_UPDATE_PARMS {
                pub dwCallback: usize,
                pub rc: super::DisplayDevices::RECT,
                pub hDC: super::Gdi::HDC,
            }
            impl MCI_ANIM_UPDATE_PARMS {}
            unsafe impl ::windows::Abi for MCI_ANIM_UPDATE_PARMS {
                type Abi = Self;
            }
            pub const MCI_ANIM_WHERE_DESTINATION: i32 = 262144i32;
            pub const MCI_ANIM_WHERE_SOURCE: i32 = 131072i32;
            pub const MCI_ANIM_WINDOW_DEFAULT: i32 = 0i32;
            pub const MCI_ANIM_WINDOW_DISABLE_STRETCH: i32 = 2097152i32;
            pub const MCI_ANIM_WINDOW_ENABLE_STRETCH: i32 = 1048576i32;
            pub const MCI_ANIM_WINDOW_HWND: i32 = 65536i32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_ANIM_WINDOW_PARMSA {
                pub dwCallback: usize,
                pub hWnd: super::WindowsAndMessaging::HWND,
                pub nCmdShow: u32,
                pub lpstrText: super::SystemServices::PSTR,
            }
            impl MCI_ANIM_WINDOW_PARMSA {}
            unsafe impl ::windows::Abi for MCI_ANIM_WINDOW_PARMSA {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_ANIM_WINDOW_PARMSW {
                pub dwCallback: usize,
                pub hWnd: super::WindowsAndMessaging::HWND,
                pub nCmdShow: u32,
                pub lpstrText: super::SystemServices::PWSTR,
            }
            impl MCI_ANIM_WINDOW_PARMSW {}
            unsafe impl ::windows::Abi for MCI_ANIM_WINDOW_PARMSW {
                type Abi = Self;
            }
            pub const MCI_ANIM_WINDOW_STATE: i32 = 262144i32;
            pub const MCI_ANIM_WINDOW_TEXT: i32 = 524288i32;
            pub const MCI_BREAK: u32 = 2065u32;
            pub const MCI_BREAK_HWND: i32 = 512i32;
            pub const MCI_BREAK_KEY: i32 = 256i32;
            pub const MCI_BREAK_OFF: i32 = 1024i32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_BREAK_PARMS {
                pub dwCallback: usize,
                pub nVirtKey: i32,
                pub hwndBreak: super::WindowsAndMessaging::HWND,
            }
            impl MCI_BREAK_PARMS {}
            unsafe impl ::windows::Abi for MCI_BREAK_PARMS {
                type Abi = Self;
            }
            pub const MCI_CDA_STATUS_TYPE_TRACK: i32 = 16385i32;
            pub const MCI_CDA_TRACK_AUDIO: u32 = 1088u32;
            pub const MCI_CDA_TRACK_OTHER: u32 = 1089u32;
            pub const MCI_CLOSE: u32 = 2052u32;
            pub const MCI_COPY: u32 = 2130u32;
            pub const MCI_CUE: u32 = 2096u32;
            pub const MCI_CUT: u32 = 2129u32;
            pub const MCI_DELETE: u32 = 2134u32;
            pub const MCI_DEVTYPE_ANIMATION: u32 = 519u32;
            pub const MCI_DEVTYPE_CD_AUDIO: u32 = 516u32;
            pub const MCI_DEVTYPE_DAT: u32 = 517u32;
            pub const MCI_DEVTYPE_DIGITAL_VIDEO: u32 = 520u32;
            pub const MCI_DEVTYPE_FIRST_USER: u32 = 4096u32;
            pub const MCI_DEVTYPE_OTHER: u32 = 521u32;
            pub const MCI_DEVTYPE_OVERLAY: u32 = 515u32;
            pub const MCI_DEVTYPE_SCANNER: u32 = 518u32;
            pub const MCI_DEVTYPE_SEQUENCER: u32 = 523u32;
            pub const MCI_DEVTYPE_VCR: u32 = 513u32;
            pub const MCI_DEVTYPE_VIDEODISC: u32 = 514u32;
            pub const MCI_DEVTYPE_WAVEFORM_AUDIO: u32 = 522u32;
            pub const MCI_ESCAPE: u32 = 2053u32;
            pub const MCI_FORMAT_BYTES: u32 = 8u32;
            pub const MCI_FORMAT_FRAMES: u32 = 3u32;
            pub const MCI_FORMAT_HMS: u32 = 1u32;
            pub const MCI_FORMAT_MILLISECONDS: u32 = 0u32;
            pub const MCI_FORMAT_MSF: u32 = 2u32;
            pub const MCI_FORMAT_SAMPLES: u32 = 9u32;
            pub const MCI_FORMAT_SMPTE_24: u32 = 4u32;
            pub const MCI_FORMAT_SMPTE_25: u32 = 5u32;
            pub const MCI_FORMAT_SMPTE_30: u32 = 6u32;
            pub const MCI_FORMAT_SMPTE_30DROP: u32 = 7u32;
            pub const MCI_FORMAT_TMSF: u32 = 10u32;
            pub const MCI_FREEZE: u32 = 2116u32;
            pub const MCI_FROM: i32 = 4i32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_GENERIC_PARMS {
                pub dwCallback: usize,
            }
            impl MCI_GENERIC_PARMS {}
            unsafe impl ::windows::Abi for MCI_GENERIC_PARMS {
                type Abi = Self;
            }
            pub const MCI_GETDEVCAPS: u32 = 2059u32;
            pub const MCI_GETDEVCAPS_CAN_EJECT: i32 = 7i32;
            pub const MCI_GETDEVCAPS_CAN_PLAY: i32 = 8i32;
            pub const MCI_GETDEVCAPS_CAN_RECORD: i32 = 1i32;
            pub const MCI_GETDEVCAPS_CAN_SAVE: i32 = 9i32;
            pub const MCI_GETDEVCAPS_COMPOUND_DEVICE: i32 = 6i32;
            pub const MCI_GETDEVCAPS_DEVICE_TYPE: i32 = 4i32;
            pub const MCI_GETDEVCAPS_HAS_AUDIO: i32 = 2i32;
            pub const MCI_GETDEVCAPS_HAS_VIDEO: i32 = 3i32;
            pub const MCI_GETDEVCAPS_ITEM: i32 = 256i32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_GETDEVCAPS_PARMS {
                pub dwCallback: usize,
                pub dwReturn: u32,
                pub dwItem: u32,
            }
            impl MCI_GETDEVCAPS_PARMS {}
            unsafe impl ::windows::Abi for MCI_GETDEVCAPS_PARMS {
                type Abi = Self;
            }
            pub const MCI_GETDEVCAPS_USES_FILES: i32 = 5i32;
            pub const MCI_INFO: u32 = 2058u32;
            pub const MCI_INFO_COPYRIGHT: i32 = 8192i32;
            pub const MCI_INFO_FILE: i32 = 512i32;
            pub const MCI_INFO_MEDIA_IDENTITY: i32 = 2048i32;
            pub const MCI_INFO_MEDIA_UPC: i32 = 1024i32;
            pub const MCI_INFO_NAME: i32 = 4096i32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_INFO_PARMSA {
                pub dwCallback: usize,
                pub lpstrReturn: super::SystemServices::PSTR,
                pub dwRetSize: u32,
            }
            impl MCI_INFO_PARMSA {}
            unsafe impl ::windows::Abi for MCI_INFO_PARMSA {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_INFO_PARMSW {
                pub dwCallback: usize,
                pub lpstrReturn: super::SystemServices::PWSTR,
                pub dwRetSize: u32,
            }
            impl MCI_INFO_PARMSW {}
            unsafe impl ::windows::Abi for MCI_INFO_PARMSW {
                type Abi = Self;
            }
            pub const MCI_INFO_PRODUCT: i32 = 256i32;
            pub const MCI_LAST: u32 = 4095u32;
            pub const MCI_LOAD: u32 = 2128u32;
            pub const MCI_LOAD_FILE: i32 = 256i32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_LOAD_PARMSA {
                pub dwCallback: usize,
                pub lpfilename: super::SystemServices::PSTR,
            }
            impl MCI_LOAD_PARMSA {}
            unsafe impl ::windows::Abi for MCI_LOAD_PARMSA {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_LOAD_PARMSW {
                pub dwCallback: usize,
                pub lpfilename: super::SystemServices::PWSTR,
            }
            impl MCI_LOAD_PARMSW {}
            unsafe impl ::windows::Abi for MCI_LOAD_PARMSW {
                type Abi = Self;
            }
            pub const MCI_MODE_NOT_READY: u32 = 524u32;
            pub const MCI_MODE_OPEN: u32 = 530u32;
            pub const MCI_MODE_PAUSE: u32 = 529u32;
            pub const MCI_MODE_PLAY: u32 = 526u32;
            pub const MCI_MODE_RECORD: u32 = 527u32;
            pub const MCI_MODE_SEEK: u32 = 528u32;
            pub const MCI_MODE_STOP: u32 = 525u32;
            pub const MCI_NOTIFY: i32 = 1i32;
            pub const MCI_NOTIFY_ABORTED: u32 = 4u32;
            pub const MCI_NOTIFY_FAILURE: u32 = 8u32;
            pub const MCI_NOTIFY_SUCCESSFUL: u32 = 1u32;
            pub const MCI_NOTIFY_SUPERSEDED: u32 = 2u32;
            pub const MCI_OPEN: u32 = 2051u32;
            pub const MCI_OPEN_ALIAS: i32 = 1024i32;
            pub const MCI_OPEN_ELEMENT: i32 = 512i32;
            pub const MCI_OPEN_ELEMENT_ID: i32 = 2048i32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_OPEN_PARMSA {
                pub dwCallback: usize,
                pub wDeviceID: u32,
                pub lpstrDeviceType: super::SystemServices::PSTR,
                pub lpstrElementName: super::SystemServices::PSTR,
                pub lpstrAlias: super::SystemServices::PSTR,
            }
            impl MCI_OPEN_PARMSA {}
            unsafe impl ::windows::Abi for MCI_OPEN_PARMSA {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_OPEN_PARMSW {
                pub dwCallback: usize,
                pub wDeviceID: u32,
                pub lpstrDeviceType: super::SystemServices::PWSTR,
                pub lpstrElementName: super::SystemServices::PWSTR,
                pub lpstrAlias: super::SystemServices::PWSTR,
            }
            impl MCI_OPEN_PARMSW {}
            unsafe impl ::windows::Abi for MCI_OPEN_PARMSW {
                type Abi = Self;
            }
            pub const MCI_OPEN_SHAREABLE: i32 = 256i32;
            pub const MCI_OPEN_TYPE: i32 = 8192i32;
            pub const MCI_OPEN_TYPE_ID: i32 = 4096i32;
            pub const MCI_OVLY_GETDEVCAPS_CAN_FREEZE: i32 = 16386i32;
            pub const MCI_OVLY_GETDEVCAPS_CAN_STRETCH: i32 = 16385i32;
            pub const MCI_OVLY_GETDEVCAPS_MAX_WINDOWS: i32 = 16387i32;
            pub const MCI_OVLY_INFO_TEXT: i32 = 65536i32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_OVLY_LOAD_PARMSA {
                pub dwCallback: usize,
                pub lpfilename: super::SystemServices::PSTR,
                pub rc: super::DisplayDevices::RECT,
            }
            impl MCI_OVLY_LOAD_PARMSA {}
            unsafe impl ::windows::Abi for MCI_OVLY_LOAD_PARMSA {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_OVLY_LOAD_PARMSW {
                pub dwCallback: usize,
                pub lpfilename: super::SystemServices::PWSTR,
                pub rc: super::DisplayDevices::RECT,
            }
            impl MCI_OVLY_LOAD_PARMSW {}
            unsafe impl ::windows::Abi for MCI_OVLY_LOAD_PARMSW {
                type Abi = Self;
            }
            pub const MCI_OVLY_OPEN_PARENT: i32 = 131072i32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_OVLY_OPEN_PARMSA {
                pub dwCallback: usize,
                pub wDeviceID: u32,
                pub lpstrDeviceType: super::SystemServices::PSTR,
                pub lpstrElementName: super::SystemServices::PSTR,
                pub lpstrAlias: super::SystemServices::PSTR,
                pub dwStyle: u32,
                pub hWndParent: super::WindowsAndMessaging::HWND,
            }
            impl MCI_OVLY_OPEN_PARMSA {}
            unsafe impl ::windows::Abi for MCI_OVLY_OPEN_PARMSA {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_OVLY_OPEN_PARMSW {
                pub dwCallback: usize,
                pub wDeviceID: u32,
                pub lpstrDeviceType: super::SystemServices::PWSTR,
                pub lpstrElementName: super::SystemServices::PWSTR,
                pub lpstrAlias: super::SystemServices::PWSTR,
                pub dwStyle: u32,
                pub hWndParent: super::WindowsAndMessaging::HWND,
            }
            impl MCI_OVLY_OPEN_PARMSW {}
            unsafe impl ::windows::Abi for MCI_OVLY_OPEN_PARMSW {
                type Abi = Self;
            }
            pub const MCI_OVLY_OPEN_WS: i32 = 65536i32;
            pub const MCI_OVLY_PUT_DESTINATION: i32 = 262144i32;
            pub const MCI_OVLY_PUT_FRAME: i32 = 524288i32;
            pub const MCI_OVLY_PUT_SOURCE: i32 = 131072i32;
            pub const MCI_OVLY_PUT_VIDEO: i32 = 1048576i32;
            pub const MCI_OVLY_RECT: i32 = 65536i32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_OVLY_RECT_PARMS {
                pub dwCallback: usize,
                pub rc: super::DisplayDevices::RECT,
            }
            impl MCI_OVLY_RECT_PARMS {}
            unsafe impl ::windows::Abi for MCI_OVLY_RECT_PARMS {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_OVLY_SAVE_PARMSA {
                pub dwCallback: usize,
                pub lpfilename: super::SystemServices::PSTR,
                pub rc: super::DisplayDevices::RECT,
            }
            impl MCI_OVLY_SAVE_PARMSA {}
            unsafe impl ::windows::Abi for MCI_OVLY_SAVE_PARMSA {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_OVLY_SAVE_PARMSW {
                pub dwCallback: usize,
                pub lpfilename: super::SystemServices::PWSTR,
                pub rc: super::DisplayDevices::RECT,
            }
            impl MCI_OVLY_SAVE_PARMSW {}
            unsafe impl ::windows::Abi for MCI_OVLY_SAVE_PARMSW {
                type Abi = Self;
            }
            pub const MCI_OVLY_STATUS_HWND: i32 = 16385i32;
            pub const MCI_OVLY_STATUS_STRETCH: i32 = 16386i32;
            pub const MCI_OVLY_WHERE_DESTINATION: i32 = 262144i32;
            pub const MCI_OVLY_WHERE_FRAME: i32 = 524288i32;
            pub const MCI_OVLY_WHERE_SOURCE: i32 = 131072i32;
            pub const MCI_OVLY_WHERE_VIDEO: i32 = 1048576i32;
            pub const MCI_OVLY_WINDOW_DEFAULT: i32 = 0i32;
            pub const MCI_OVLY_WINDOW_DISABLE_STRETCH: i32 = 2097152i32;
            pub const MCI_OVLY_WINDOW_ENABLE_STRETCH: i32 = 1048576i32;
            pub const MCI_OVLY_WINDOW_HWND: i32 = 65536i32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_OVLY_WINDOW_PARMSA {
                pub dwCallback: usize,
                pub hWnd: super::WindowsAndMessaging::HWND,
                pub nCmdShow: u32,
                pub lpstrText: super::SystemServices::PSTR,
            }
            impl MCI_OVLY_WINDOW_PARMSA {}
            unsafe impl ::windows::Abi for MCI_OVLY_WINDOW_PARMSA {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_OVLY_WINDOW_PARMSW {
                pub dwCallback: usize,
                pub hWnd: super::WindowsAndMessaging::HWND,
                pub nCmdShow: u32,
                pub lpstrText: super::SystemServices::PWSTR,
            }
            impl MCI_OVLY_WINDOW_PARMSW {}
            unsafe impl ::windows::Abi for MCI_OVLY_WINDOW_PARMSW {
                type Abi = Self;
            }
            pub const MCI_OVLY_WINDOW_STATE: i32 = 262144i32;
            pub const MCI_OVLY_WINDOW_TEXT: i32 = 524288i32;
            pub const MCI_PASTE: u32 = 2131u32;
            pub const MCI_PAUSE: u32 = 2057u32;
            pub const MCI_PLAY: u32 = 2054u32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_PLAY_PARMS {
                pub dwCallback: usize,
                pub dwFrom: u32,
                pub dwTo: u32,
            }
            impl MCI_PLAY_PARMS {}
            unsafe impl ::windows::Abi for MCI_PLAY_PARMS {
                type Abi = Self;
            }
            pub const MCI_PUT: u32 = 2114u32;
            pub const MCI_REALIZE: u32 = 2112u32;
            pub const MCI_RECORD: u32 = 2063u32;
            pub const MCI_RECORD_INSERT: i32 = 256i32;
            pub const MCI_RECORD_OVERWRITE: i32 = 512i32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_RECORD_PARMS {
                pub dwCallback: usize,
                pub dwFrom: u32,
                pub dwTo: u32,
            }
            impl MCI_RECORD_PARMS {}
            unsafe impl ::windows::Abi for MCI_RECORD_PARMS {
                type Abi = Self;
            }
            pub const MCI_RESUME: u32 = 2133u32;
            pub const MCI_SAVE: u32 = 2067u32;
            pub const MCI_SAVE_FILE: i32 = 256i32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_SAVE_PARMSA {
                pub dwCallback: usize,
                pub lpfilename: super::SystemServices::PSTR,
            }
            impl MCI_SAVE_PARMSA {}
            unsafe impl ::windows::Abi for MCI_SAVE_PARMSA {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_SAVE_PARMSW {
                pub dwCallback: usize,
                pub lpfilename: super::SystemServices::PWSTR,
            }
            impl MCI_SAVE_PARMSW {}
            unsafe impl ::windows::Abi for MCI_SAVE_PARMSW {
                type Abi = Self;
            }
            pub const MCI_SEEK: u32 = 2055u32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_SEEK_PARMS {
                pub dwCallback: usize,
                pub dwTo: u32,
            }
            impl MCI_SEEK_PARMS {}
            unsafe impl ::windows::Abi for MCI_SEEK_PARMS {
                type Abi = Self;
            }
            pub const MCI_SEEK_TO_END: i32 = 512i32;
            pub const MCI_SEEK_TO_START: i32 = 256i32;
            pub const MCI_SEQ_FILE: u32 = 16386u32;
            pub const MCI_SEQ_FORMAT_SONGPTR: u32 = 16385u32;
            pub const MCI_SEQ_MAPPER: u32 = 65535u32;
            pub const MCI_SEQ_MIDI: u32 = 16387u32;
            pub const MCI_SEQ_NONE: u32 = 65533u32;
            pub const MCI_SEQ_SET_MASTER: i32 = 524288i32;
            pub const MCI_SEQ_SET_OFFSET: i32 = 16777216i32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_SEQ_SET_PARMS {
                pub dwCallback: usize,
                pub dwTimeFormat: u32,
                pub dwAudio: u32,
                pub dwTempo: u32,
                pub dwPort: u32,
                pub dwSlave: u32,
                pub dwMaster: u32,
                pub dwOffset: u32,
            }
            impl MCI_SEQ_SET_PARMS {}
            unsafe impl ::windows::Abi for MCI_SEQ_SET_PARMS {
                type Abi = Self;
            }
            pub const MCI_SEQ_SET_PORT: i32 = 131072i32;
            pub const MCI_SEQ_SET_SLAVE: i32 = 262144i32;
            pub const MCI_SEQ_SET_TEMPO: i32 = 65536i32;
            pub const MCI_SEQ_SMPTE: u32 = 16388u32;
            pub const MCI_SEQ_STATUS_COPYRIGHT: i32 = 16396i32;
            pub const MCI_SEQ_STATUS_DIVTYPE: i32 = 16394i32;
            pub const MCI_SEQ_STATUS_MASTER: i32 = 16392i32;
            pub const MCI_SEQ_STATUS_NAME: i32 = 16395i32;
            pub const MCI_SEQ_STATUS_OFFSET: i32 = 16393i32;
            pub const MCI_SEQ_STATUS_PORT: i32 = 16387i32;
            pub const MCI_SEQ_STATUS_SLAVE: i32 = 16391i32;
            pub const MCI_SEQ_STATUS_TEMPO: i32 = 16386i32;
            pub const MCI_SET: u32 = 2061u32;
            pub const MCI_SET_AUDIO: i32 = 2048i32;
            pub const MCI_SET_AUDIO_ALL: i32 = 0i32;
            pub const MCI_SET_AUDIO_LEFT: i32 = 1i32;
            pub const MCI_SET_AUDIO_RIGHT: i32 = 2i32;
            pub const MCI_SET_DOOR_CLOSED: i32 = 512i32;
            pub const MCI_SET_DOOR_OPEN: i32 = 256i32;
            pub const MCI_SET_OFF: i32 = 16384i32;
            pub const MCI_SET_ON: i32 = 8192i32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_SET_PARMS {
                pub dwCallback: usize,
                pub dwTimeFormat: u32,
                pub dwAudio: u32,
            }
            impl MCI_SET_PARMS {}
            unsafe impl ::windows::Abi for MCI_SET_PARMS {
                type Abi = Self;
            }
            pub const MCI_SET_TIME_FORMAT: i32 = 1024i32;
            pub const MCI_SET_VIDEO: i32 = 4096i32;
            pub const MCI_SPIN: u32 = 2060u32;
            pub const MCI_STATUS: u32 = 2068u32;
            pub const MCI_STATUS_CURRENT_TRACK: i32 = 8i32;
            pub const MCI_STATUS_ITEM: i32 = 256i32;
            pub const MCI_STATUS_LENGTH: i32 = 1i32;
            pub const MCI_STATUS_MEDIA_PRESENT: i32 = 5i32;
            pub const MCI_STATUS_MODE: i32 = 4i32;
            pub const MCI_STATUS_NUMBER_OF_TRACKS: i32 = 3i32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_STATUS_PARMS {
                pub dwCallback: usize,
                pub dwReturn: usize,
                pub dwItem: u32,
                pub dwTrack: u32,
            }
            impl MCI_STATUS_PARMS {}
            unsafe impl ::windows::Abi for MCI_STATUS_PARMS {
                type Abi = Self;
            }
            pub const MCI_STATUS_POSITION: i32 = 2i32;
            pub const MCI_STATUS_READY: i32 = 7i32;
            pub const MCI_STATUS_START: i32 = 512i32;
            pub const MCI_STATUS_TIME_FORMAT: i32 = 6i32;
            pub const MCI_STEP: u32 = 2062u32;
            pub const MCI_STOP: u32 = 2056u32;
            pub const MCI_SYSINFO: u32 = 2064u32;
            pub const MCI_SYSINFO_INSTALLNAME: i32 = 2048i32;
            pub const MCI_SYSINFO_NAME: i32 = 1024i32;
            pub const MCI_SYSINFO_OPEN: i32 = 512i32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_SYSINFO_PARMSA {
                pub dwCallback: usize,
                pub lpstrReturn: super::SystemServices::PSTR,
                pub dwRetSize: u32,
                pub dwNumber: u32,
                pub wDeviceType: u32,
            }
            impl MCI_SYSINFO_PARMSA {}
            unsafe impl ::windows::Abi for MCI_SYSINFO_PARMSA {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_SYSINFO_PARMSW {
                pub dwCallback: usize,
                pub lpstrReturn: super::SystemServices::PWSTR,
                pub dwRetSize: u32,
                pub dwNumber: u32,
                pub wDeviceType: u32,
            }
            impl MCI_SYSINFO_PARMSW {}
            unsafe impl ::windows::Abi for MCI_SYSINFO_PARMSW {
                type Abi = Self;
            }
            pub const MCI_SYSINFO_QUANTITY: i32 = 256i32;
            pub const MCI_TO: i32 = 8i32;
            pub const MCI_TRACK: i32 = 16i32;
            pub const MCI_UNFREEZE: u32 = 2117u32;
            pub const MCI_UPDATE: u32 = 2132u32;
            pub const MCI_USER_MESSAGES: u32 = 3072u32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_VD_ESCAPE_PARMSA {
                pub dwCallback: usize,
                pub lpstrCommand: super::SystemServices::PSTR,
            }
            impl MCI_VD_ESCAPE_PARMSA {}
            unsafe impl ::windows::Abi for MCI_VD_ESCAPE_PARMSA {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_VD_ESCAPE_PARMSW {
                pub dwCallback: usize,
                pub lpstrCommand: super::SystemServices::PWSTR,
            }
            impl MCI_VD_ESCAPE_PARMSW {}
            unsafe impl ::windows::Abi for MCI_VD_ESCAPE_PARMSW {
                type Abi = Self;
            }
            pub const MCI_VD_ESCAPE_STRING: i32 = 256i32;
            pub const MCI_VD_FORMAT_TRACK: u32 = 16385u32;
            pub const MCI_VD_GETDEVCAPS_CAN_REVERSE: i32 = 16386i32;
            pub const MCI_VD_GETDEVCAPS_CAV: i32 = 131072i32;
            pub const MCI_VD_GETDEVCAPS_CLV: i32 = 65536i32;
            pub const MCI_VD_GETDEVCAPS_FAST_RATE: i32 = 16387i32;
            pub const MCI_VD_GETDEVCAPS_NORMAL_RATE: i32 = 16389i32;
            pub const MCI_VD_GETDEVCAPS_SLOW_RATE: i32 = 16388i32;
            pub const MCI_VD_MEDIA_CAV: u32 = 1027u32;
            pub const MCI_VD_MEDIA_CLV: u32 = 1026u32;
            pub const MCI_VD_MEDIA_OTHER: u32 = 1028u32;
            pub const MCI_VD_MODE_PARK: u32 = 1025u32;
            pub const MCI_VD_PLAY_FAST: i32 = 131072i32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_VD_PLAY_PARMS {
                pub dwCallback: usize,
                pub dwFrom: u32,
                pub dwTo: u32,
                pub dwSpeed: u32,
            }
            impl MCI_VD_PLAY_PARMS {}
            unsafe impl ::windows::Abi for MCI_VD_PLAY_PARMS {
                type Abi = Self;
            }
            pub const MCI_VD_PLAY_REVERSE: i32 = 65536i32;
            pub const MCI_VD_PLAY_SCAN: i32 = 524288i32;
            pub const MCI_VD_PLAY_SLOW: i32 = 1048576i32;
            pub const MCI_VD_PLAY_SPEED: i32 = 262144i32;
            pub const MCI_VD_SEEK_REVERSE: i32 = 65536i32;
            pub const MCI_VD_SPIN_DOWN: i32 = 131072i32;
            pub const MCI_VD_SPIN_UP: i32 = 65536i32;
            pub const MCI_VD_STATUS_DISC_SIZE: i32 = 16390i32;
            pub const MCI_VD_STATUS_FORWARD: i32 = 16387i32;
            pub const MCI_VD_STATUS_MEDIA_TYPE: i32 = 16388i32;
            pub const MCI_VD_STATUS_SIDE: i32 = 16389i32;
            pub const MCI_VD_STATUS_SPEED: i32 = 16386i32;
            pub const MCI_VD_STEP_FRAMES: i32 = 65536i32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_VD_STEP_PARMS {
                pub dwCallback: usize,
                pub dwFrames: u32,
            }
            impl MCI_VD_STEP_PARMS {}
            unsafe impl ::windows::Abi for MCI_VD_STEP_PARMS {
                type Abi = Self;
            }
            pub const MCI_VD_STEP_REVERSE: i32 = 131072i32;
            pub const MCI_WAIT: i32 = 2i32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_WAVE_DELETE_PARMS {
                pub dwCallback: usize,
                pub dwFrom: u32,
                pub dwTo: u32,
            }
            impl MCI_WAVE_DELETE_PARMS {}
            unsafe impl ::windows::Abi for MCI_WAVE_DELETE_PARMS {
                type Abi = Self;
            }
            pub const MCI_WAVE_GETDEVCAPS_INPUTS: i32 = 16385i32;
            pub const MCI_WAVE_GETDEVCAPS_OUTPUTS: i32 = 16386i32;
            pub const MCI_WAVE_INPUT: i32 = 4194304i32;
            pub const MCI_WAVE_MAPPER: u32 = 1153u32;
            pub const MCI_WAVE_OPEN_BUFFER: i32 = 65536i32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_WAVE_OPEN_PARMSA {
                pub dwCallback: usize,
                pub wDeviceID: u32,
                pub lpstrDeviceType: super::SystemServices::PSTR,
                pub lpstrElementName: super::SystemServices::PSTR,
                pub lpstrAlias: super::SystemServices::PSTR,
                pub dwBufferSeconds: u32,
            }
            impl MCI_WAVE_OPEN_PARMSA {}
            unsafe impl ::windows::Abi for MCI_WAVE_OPEN_PARMSA {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_WAVE_OPEN_PARMSW {
                pub dwCallback: usize,
                pub wDeviceID: u32,
                pub lpstrDeviceType: super::SystemServices::PWSTR,
                pub lpstrElementName: super::SystemServices::PWSTR,
                pub lpstrAlias: super::SystemServices::PWSTR,
                pub dwBufferSeconds: u32,
            }
            impl MCI_WAVE_OPEN_PARMSW {}
            unsafe impl ::windows::Abi for MCI_WAVE_OPEN_PARMSW {
                type Abi = Self;
            }
            pub const MCI_WAVE_OUTPUT: i32 = 8388608i32;
            pub const MCI_WAVE_PCM: u32 = 1152u32;
            pub const MCI_WAVE_SET_ANYINPUT: i32 = 67108864i32;
            pub const MCI_WAVE_SET_ANYOUTPUT: i32 = 134217728i32;
            pub const MCI_WAVE_SET_AVGBYTESPERSEC: i32 = 524288i32;
            pub const MCI_WAVE_SET_BITSPERSAMPLE: i32 = 2097152i32;
            pub const MCI_WAVE_SET_BLOCKALIGN: i32 = 1048576i32;
            pub const MCI_WAVE_SET_CHANNELS: i32 = 131072i32;
            pub const MCI_WAVE_SET_FORMATTAG: i32 = 65536i32;
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MCI_WAVE_SET_PARMS {
                pub dwCallback: usize,
                pub dwTimeFormat: u32,
                pub dwAudio: u32,
                pub wInput: u32,
                pub wOutput: u32,
                pub wFormatTag: u16,
                pub wReserved2: u16,
                pub nChannels: u16,
                pub wReserved3: u16,
                pub nSamplesPerSec: u32,
                pub nAvgBytesPerSec: u32,
                pub nBlockAlign: u16,
                pub wReserved4: u16,
                pub wBitsPerSample: u16,
                pub wReserved5: u16,
            }
            impl MCI_WAVE_SET_PARMS {}
            unsafe impl ::windows::Abi for MCI_WAVE_SET_PARMS {
                type Abi = Self;
            }
            pub const MCI_WAVE_SET_SAMPLESPERSEC: i32 = 262144i32;
            pub const MCI_WAVE_STATUS_AVGBYTESPERSEC: i32 = 16388i32;
            pub const MCI_WAVE_STATUS_BITSPERSAMPLE: i32 = 16390i32;
            pub const MCI_WAVE_STATUS_BLOCKALIGN: i32 = 16389i32;
            pub const MCI_WAVE_STATUS_CHANNELS: i32 = 16386i32;
            pub const MCI_WAVE_STATUS_FORMATTAG: i32 = 16385i32;
            pub const MCI_WAVE_STATUS_LEVEL: i32 = 16391i32;
            pub const MCI_WAVE_STATUS_SAMPLESPERSEC: i32 = 16387i32;
            pub const MCI_WHERE: u32 = 2115u32;
            pub const MCI_WINDOW: u32 = 2113u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union MF_MDL_SHARED_PAYLOAD_KEY {
                pub combined: MF_MDL_SHARED_PAYLOAD_KEY_0,
                pub GMDLHandle: ::windows::Guid,
            }
            impl MF_MDL_SHARED_PAYLOAD_KEY {}
            unsafe impl ::windows::Abi for MF_MDL_SHARED_PAYLOAD_KEY {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct MF_MDL_SHARED_PAYLOAD_KEY_0 {
                pub pHandle: u32,
                pub fHandle: u32,
                pub uPayload: u64,
            }
            impl MF_MDL_SHARED_PAYLOAD_KEY_0 {}
            impl ::std::default::Default for MF_MDL_SHARED_PAYLOAD_KEY_0 {
                fn default() -> Self {
                    Self {
                        pHandle: 0,
                        fHandle: 0,
                        uPayload: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for MF_MDL_SHARED_PAYLOAD_KEY_0 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_combined_e__Struct")
                        .field("pHandle", &format_args!("{:?}", self.pHandle))
                        .field("fHandle", &format_args!("{:?}", self.fHandle))
                        .field("uPayload", &format_args!("{:?}", self.uPayload))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for MF_MDL_SHARED_PAYLOAD_KEY_0 {
                fn eq(&self, other: &Self) -> bool {
                    self.pHandle == other.pHandle
                        && self.fHandle == other.fHandle
                        && self.uPayload == other.uPayload
                }
            }
            impl ::std::cmp::Eq for MF_MDL_SHARED_PAYLOAD_KEY_0 {}
            unsafe impl ::windows::Abi for MF_MDL_SHARED_PAYLOAD_KEY_0 {
                type Abi = Self;
            }
            pub const MIN_DEV_VER_FOR_FLAGS: u32 = 272u32;
            pub const MIN_DEV_VER_FOR_QI: u32 = 256u32;
            pub const MMDeviceEnumerator: ::windows::Guid = ::windows::Guid::from_values(
                3168666517,
                58671,
                18044,
                [142, 61, 196, 87, 146, 145, 105, 46],
            );
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct NABTSFEC_BUFFER {
                pub dataSize: u32,
                pub groupID: u16,
                pub Reserved: u16,
                pub data: [u8; 448],
            }
            impl NABTSFEC_BUFFER {}
            impl ::std::default::Default for NABTSFEC_BUFFER {
                fn default() -> Self {
                    Self {
                        dataSize: 0,
                        groupID: 0,
                        Reserved: 0,
                        data: [0; 448],
                    }
                }
            }
            impl ::std::fmt::Debug for NABTSFEC_BUFFER {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("NABTSFEC_BUFFER")
                        .field("dataSize", &format_args!("{:?}", self.dataSize))
                        .field("groupID", &format_args!("{:?}", self.groupID))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .field("data", &format_args!("{:?}", self.data))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for NABTSFEC_BUFFER {
                fn eq(&self, other: &Self) -> bool {
                    self.dataSize == other.dataSize
                        && self.groupID == other.groupID
                        && self.Reserved == other.Reserved
                        && self.data == other.data
                }
            }
            impl ::std::cmp::Eq for NABTSFEC_BUFFER {}
            unsafe impl ::windows::Abi for NABTSFEC_BUFFER {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct NABTS_BUFFER_LINE {
                pub Confidence: u8,
                pub Bytes: [u8; 36],
            }
            impl NABTS_BUFFER_LINE {}
            impl ::std::default::Default for NABTS_BUFFER_LINE {
                fn default() -> Self {
                    Self {
                        Confidence: 0,
                        Bytes: [0; 36],
                    }
                }
            }
            impl ::std::fmt::Debug for NABTS_BUFFER_LINE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("NABTS_BUFFER_LINE")
                        .field("Confidence", &format_args!("{:?}", self.Confidence))
                        .field("Bytes", &format_args!("{:?}", self.Bytes))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for NABTS_BUFFER_LINE {
                fn eq(&self, other: &Self) -> bool {
                    self.Confidence == other.Confidence && self.Bytes == other.Bytes
                }
            }
            impl ::std::cmp::Eq for NABTS_BUFFER_LINE {}
            unsafe impl ::windows::Abi for NABTS_BUFFER_LINE {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct NABTS_BUFFER {
                pub ScanlinesRequested: VBICODECFILTERING_SCANLINES,
                pub PictureNumber: i64,
                pub NabtsLines: [NABTS_BUFFER_LINE; 11],
            }
            impl NABTS_BUFFER {}
            unsafe impl ::windows::Abi for NABTS_BUFFER {
                type Abi = Self;
            }
            pub const NABTS_BUFFER_PICTURENUMBER_SUPPORT: u32 = 1u32;
            pub const NABTS_BYTES_PER_LINE: u32 = 36u32;
            pub const NABTS_LINES_PER_BUNDLE: u32 = 16u32;
            pub const NABTS_PAYLOAD_PER_LINE: u32 = 28u32;
            pub const NANOSECONDS: u32 = 10000000u32;
            pub const PINNAME_DISPLAYPORT_OUT: ::windows::Guid = ::windows::Guid::from_values(
                570143529,
                6730,
                18650,
                [160, 118, 35, 24, 163, 197, 155, 38],
            );
            pub const PINNAME_HDMI_OUT: ::windows::Guid = ::windows::Guid::from_values(
                947649539,
                59375,
                18689,
                [134, 224, 53, 183, 195, 43, 0, 239],
            );
            pub const PINNAME_IMAGE: ::windows::Guid = ::windows::Guid::from_values(
                950062488,
                54427,
                19688,
                [180, 138, 52, 70, 103, 161, 120, 48],
            );
            pub const PINNAME_SPDIF_IN: ::windows::Guid = ::windows::Guid::from_values(
                366776357,
                8877,
                16819,
                [136, 117, 244, 206, 176, 41, 158, 32],
            );
            pub const PINNAME_SPDIF_OUT: ::windows::Guid = ::windows::Guid::from_values(
                975586433,
                58668,
                19330,
                [142, 122, 200, 226, 249, 29, 195, 128],
            );
            pub const PINNAME_VIDEO_ANALOGVIDEOIN: ::windows::Guid = ::windows::Guid::from_values(
                4218176131,
                851,
                4561,
                [144, 95, 0, 0, 192, 204, 22, 186],
            );
            pub const PINNAME_VIDEO_CAPTURE: ::windows::Guid = ::windows::Guid::from_values(
                4218176129,
                851,
                4561,
                [144, 95, 0, 0, 192, 204, 22, 186],
            );
            pub const PINNAME_VIDEO_CC: ::windows::Guid = ::windows::Guid::from_values(
                4218176137,
                851,
                4561,
                [144, 95, 0, 0, 192, 204, 22, 186],
            );
            pub const PINNAME_VIDEO_CC_CAPTURE: ::windows::Guid = ::windows::Guid::from_values(
                447578209,
                301,
                4562,
                [180, 177, 0, 160, 209, 2, 207, 190],
            );
            pub const PINNAME_VIDEO_EDS: ::windows::Guid = ::windows::Guid::from_values(
                4218176135,
                851,
                4561,
                [144, 95, 0, 0, 192, 204, 22, 186],
            );
            pub const PINNAME_VIDEO_NABTS: ::windows::Guid = ::windows::Guid::from_values(
                4218176134,
                851,
                4561,
                [144, 95, 0, 0, 192, 204, 22, 186],
            );
            pub const PINNAME_VIDEO_NABTS_CAPTURE: ::windows::Guid = ::windows::Guid::from_values(
                695219808,
                18826,
                4562,
                [180, 177, 0, 160, 209, 2, 207, 190],
            );
            pub const PINNAME_VIDEO_PREVIEW: ::windows::Guid = ::windows::Guid::from_values(
                4218176130,
                851,
                4561,
                [144, 95, 0, 0, 192, 204, 22, 186],
            );
            pub const PINNAME_VIDEO_STILL: ::windows::Guid = ::windows::Guid::from_values(
                4218176138,
                851,
                4561,
                [144, 95, 0, 0, 192, 204, 22, 186],
            );
            pub const PINNAME_VIDEO_TELETEXT: ::windows::Guid = ::windows::Guid::from_values(
                4218176136,
                851,
                4561,
                [144, 95, 0, 0, 192, 204, 22, 186],
            );
            pub const PINNAME_VIDEO_TIMECODE: ::windows::Guid = ::windows::Guid::from_values(
                4218176139,
                851,
                4561,
                [144, 95, 0, 0, 192, 204, 22, 186],
            );
            pub const PINNAME_VIDEO_VBI: ::windows::Guid = ::windows::Guid::from_values(
                4218176132,
                851,
                4561,
                [144, 95, 0, 0, 192, 204, 22, 186],
            );
            pub const PINNAME_VIDEO_VIDEOPORT: ::windows::Guid = ::windows::Guid::from_values(
                4218176133,
                851,
                4561,
                [144, 95, 0, 0, 192, 204, 22, 186],
            );
            pub const PINNAME_VIDEO_VIDEOPORT_VBI: ::windows::Guid = ::windows::Guid::from_values(
                4218176140,
                851,
                4561,
                [144, 95, 0, 0, 192, 204, 22, 186],
            );
            pub const PROPSETID_ALLOCATOR_CONTROL: ::windows::Guid = ::windows::Guid::from_values(
                1394022752,
                5262,
                4562,
                [153, 121, 0, 0, 192, 204, 22, 186],
            );
            pub const PROPSETID_EXT_DEVICE: ::windows::Guid = ::windows::Guid::from_values(
                3044215440,
                6700,
                4559,
                [140, 35, 0, 170, 0, 107, 104, 20],
            );
            pub const PROPSETID_EXT_TRANSPORT: ::windows::Guid = ::windows::Guid::from_values(
                2688341488,
                12357,
                4559,
                [140, 68, 0, 170, 0, 107, 104, 20],
            );
            pub const PROPSETID_TIMECODE_READER: ::windows::Guid = ::windows::Guid::from_values(
                2605280481,
                33051,
                4559,
                [140, 119, 0, 170, 0, 107, 104, 20],
            );
            pub const PROPSETID_TUNER: ::windows::Guid = ::windows::Guid::from_values(
                1781401093,
                10468,
                4560,
                [161, 140, 0, 160, 201, 17, 137, 86],
            );
            pub const PROPSETID_VIDCAP_CAMERACONTROL: ::windows::Guid =
                ::windows::Guid::from_values(
                    3336647536,
                    12460,
                    4560,
                    [161, 140, 0, 160, 201, 17, 137, 86],
                );
            pub const PROPSETID_VIDCAP_CAMERACONTROL_FLASH: ::windows::Guid =
                ::windows::Guid::from_values(
                    2019462985,
                    25506,
                    16708,
                    [171, 112, 255, 178, 120, 250, 38, 206],
                );
            pub const PROPSETID_VIDCAP_CAMERACONTROL_IMAGE_PIN_CAPABILITY: ::windows::Guid =
                ::windows::Guid::from_values(
                    2638052287,
                    23661,
                    16696,
                    [187, 0, 88, 78, 221, 32, 247, 197],
                );
            pub const PROPSETID_VIDCAP_CAMERACONTROL_REGION_OF_INTEREST: ::windows::Guid =
                ::windows::Guid::from_values(
                    2635256216,
                    63596,
                    20461,
                    [176, 35, 93, 135, 101, 61, 167, 147],
                );
            pub const PROPSETID_VIDCAP_CAMERACONTROL_VIDEO_STABILIZATION: ::windows::Guid =
                ::windows::Guid::from_values(
                    1133923283,
                    30486,
                    16462,
                    [139, 225, 210, 153, 178, 14, 80, 253],
                );
            pub const PROPSETID_VIDCAP_CROSSBAR: ::windows::Guid = ::windows::Guid::from_values(
                1781401152,
                10468,
                4560,
                [161, 140, 0, 160, 201, 17, 137, 86],
            );
            pub const PROPSETID_VIDCAP_DROPPEDFRAMES: ::windows::Guid =
                ::windows::Guid::from_values(
                    3336647492,
                    12460,
                    4560,
                    [161, 140, 0, 160, 201, 17, 137, 86],
                );
            pub const PROPSETID_VIDCAP_SELECTOR: ::windows::Guid = ::windows::Guid::from_values(
                448638666,
                26806,
                20355,
                [147, 113, 180, 19, 144, 124, 123, 159],
            );
            pub const PROPSETID_VIDCAP_TVAUDIO: ::windows::Guid = ::windows::Guid::from_values(
                1781401168,
                10468,
                4560,
                [161, 140, 0, 160, 201, 17, 137, 86],
            );
            pub const PROPSETID_VIDCAP_VIDEOCOMPRESSION: ::windows::Guid =
                ::windows::Guid::from_values(
                    3336647491,
                    12460,
                    4560,
                    [161, 140, 0, 160, 201, 17, 137, 86],
                );
            pub const PROPSETID_VIDCAP_VIDEOCONTROL: ::windows::Guid = ::windows::Guid::from_values(
                1781401200,
                10468,
                4560,
                [161, 140, 0, 160, 201, 17, 137, 86],
            );
            pub const PROPSETID_VIDCAP_VIDEODECODER: ::windows::Guid = ::windows::Guid::from_values(
                3336647504,
                12460,
                4560,
                [161, 140, 0, 160, 201, 17, 137, 86],
            );
            pub const PROPSETID_VIDCAP_VIDEOENCODER: ::windows::Guid = ::windows::Guid::from_values(
                1781401104,
                10468,
                4560,
                [161, 140, 0, 160, 201, 17, 137, 86],
            );
            pub const PROPSETID_VIDCAP_VIDEOPROCAMP: ::windows::Guid = ::windows::Guid::from_values(
                3336647520,
                12460,
                4560,
                [161, 140, 0, 160, 201, 17, 137, 86],
            );
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct PartType(pub i32);
            impl PartType {
                pub const Connector: Self = Self(0i32);
                pub const Subunit: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for PartType {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for PartType {
                type Abi = Self;
            }
            pub const RT_RCDATA: super::SystemServices::PWSTR =
                super::SystemServices::PWSTR(10i32 as _);
            pub const RT_STRING: super::SystemServices::PWSTR =
                super::SystemServices::PWSTR(6i32 as _);
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct SECURE_BUFFER_INFO {
                pub guidBufferIdentifier: ::windows::Guid,
                pub cbBufferSize: u32,
                pub cbCaptured: u32,
                pub ullReserved: [u64; 16],
            }
            impl SECURE_BUFFER_INFO {}
            impl ::std::default::Default for SECURE_BUFFER_INFO {
                fn default() -> Self {
                    Self {
                        guidBufferIdentifier: ::std::default::Default::default(),
                        cbBufferSize: 0,
                        cbCaptured: 0,
                        ullReserved: [0; 16],
                    }
                }
            }
            impl ::std::fmt::Debug for SECURE_BUFFER_INFO {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("SECURE_BUFFER_INFO")
                        .field(
                            "guidBufferIdentifier",
                            &format_args!("{:?}", self.guidBufferIdentifier),
                        )
                        .field("cbBufferSize", &format_args!("{:?}", self.cbBufferSize))
                        .field("cbCaptured", &format_args!("{:?}", self.cbCaptured))
                        .field("ullReserved", &format_args!("{:?}", self.ullReserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for SECURE_BUFFER_INFO {
                fn eq(&self, other: &Self) -> bool {
                    self.guidBufferIdentifier == other.guidBufferIdentifier
                        && self.cbBufferSize == other.cbBufferSize
                        && self.cbCaptured == other.cbCaptured
                        && self.ullReserved == other.ullReserved
                }
            }
            impl ::std::cmp::Eq for SECURE_BUFFER_INFO {}
            unsafe impl ::windows::Abi for SECURE_BUFFER_INFO {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct SOUNDDETECTOR_PATTERNHEADER {
                pub Size: u32,
                pub PatternType: ::windows::Guid,
            }
            impl SOUNDDETECTOR_PATTERNHEADER {}
            impl ::std::default::Default for SOUNDDETECTOR_PATTERNHEADER {
                fn default() -> Self {
                    Self {
                        Size: 0,
                        PatternType: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for SOUNDDETECTOR_PATTERNHEADER {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("SOUNDDETECTOR_PATTERNHEADER")
                        .field("Size", &format_args!("{:?}", self.Size))
                        .field("PatternType", &format_args!("{:?}", self.PatternType))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for SOUNDDETECTOR_PATTERNHEADER {
                fn eq(&self, other: &Self) -> bool {
                    self.Size == other.Size && self.PatternType == other.PatternType
                }
            }
            impl ::std::cmp::Eq for SOUNDDETECTOR_PATTERNHEADER {}
            unsafe impl ::windows::Abi for SOUNDDETECTOR_PATTERNHEADER {
                type Abi = Self;
            }
            pub const SPATIAL_AUDIO_STANDARD_COMMANDS_START: u32 = 200u32;
            pub const SPEAKER_ALL: u32 = 2147483648u32;
            pub const SPEAKER_BACK_CENTER: u32 = 256u32;
            pub const SPEAKER_BACK_LEFT: u32 = 16u32;
            pub const SPEAKER_BACK_RIGHT: u32 = 32u32;
            pub const SPEAKER_FRONT_CENTER: u32 = 4u32;
            pub const SPEAKER_FRONT_LEFT: u32 = 1u32;
            pub const SPEAKER_FRONT_LEFT_OF_CENTER: u32 = 64u32;
            pub const SPEAKER_FRONT_RIGHT: u32 = 2u32;
            pub const SPEAKER_FRONT_RIGHT_OF_CENTER: u32 = 128u32;
            pub const SPEAKER_LOW_FREQUENCY: u32 = 8u32;
            pub const SPEAKER_RESERVED: u32 = 2147221504u32;
            pub const SPEAKER_SIDE_LEFT: u32 = 512u32;
            pub const SPEAKER_SIDE_RIGHT: u32 = 1024u32;
            pub const SPEAKER_TOP_BACK_CENTER: u32 = 65536u32;
            pub const SPEAKER_TOP_BACK_LEFT: u32 = 32768u32;
            pub const SPEAKER_TOP_BACK_RIGHT: u32 = 131072u32;
            pub const SPEAKER_TOP_CENTER: u32 = 2048u32;
            pub const SPEAKER_TOP_FRONT_CENTER: u32 = 8192u32;
            pub const SPEAKER_TOP_FRONT_LEFT: u32 = 4096u32;
            pub const SPEAKER_TOP_FRONT_RIGHT: u32 = 16384u32;
            pub const SYSAUDIO_FLAGS_CLEAR_PREFERRED: u32 = 2u32;
            pub const SYSAUDIO_FLAGS_DONT_COMBINE_PINS: u32 = 1u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct SpatialAudioClientActivationParams {
                pub tracingContextId: ::windows::Guid,
                pub appId: ::windows::Guid,
                pub majorVersion: i32,
                pub minorVersion1: i32,
                pub minorVersion2: i32,
                pub minorVersion3: i32,
            }
            impl SpatialAudioClientActivationParams {}
            impl ::std::default::Default for SpatialAudioClientActivationParams {
                fn default() -> Self {
                    Self {
                        tracingContextId: ::std::default::Default::default(),
                        appId: ::std::default::Default::default(),
                        majorVersion: 0,
                        minorVersion1: 0,
                        minorVersion2: 0,
                        minorVersion3: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for SpatialAudioClientActivationParams {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("SpatialAudioClientActivationParams")
                        .field(
                            "tracingContextId",
                            &format_args!("{:?}", self.tracingContextId),
                        )
                        .field("appId", &format_args!("{:?}", self.appId))
                        .field("majorVersion", &format_args!("{:?}", self.majorVersion))
                        .field("minorVersion1", &format_args!("{:?}", self.minorVersion1))
                        .field("minorVersion2", &format_args!("{:?}", self.minorVersion2))
                        .field("minorVersion3", &format_args!("{:?}", self.minorVersion3))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for SpatialAudioClientActivationParams {
                fn eq(&self, other: &Self) -> bool {
                    self.tracingContextId == other.tracingContextId
                        && self.appId == other.appId
                        && self.majorVersion == other.majorVersion
                        && self.minorVersion1 == other.minorVersion1
                        && self.minorVersion2 == other.minorVersion2
                        && self.minorVersion3 == other.minorVersion3
                }
            }
            impl ::std::cmp::Eq for SpatialAudioClientActivationParams {}
            unsafe impl ::windows::Abi for SpatialAudioClientActivationParams {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct SpatialAudioHrtfDistanceDecayType(pub i32);
            impl SpatialAudioHrtfDistanceDecayType {
                pub const SpatialAudioHrtfDistanceDecay_NaturalDecay: Self = Self(0i32);
                pub const SpatialAudioHrtfDistanceDecay_CustomDecay: Self = Self(1i32);
            }
            impl ::std::convert::From<i32> for SpatialAudioHrtfDistanceDecayType {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for SpatialAudioHrtfDistanceDecayType {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct SpatialAudioHrtfDistanceDecay {
                pub Type: SpatialAudioHrtfDistanceDecayType,
                pub MaxGain: f32,
                pub MinGain: f32,
                pub UnityGainDistance: f32,
                pub CutoffDistance: f32,
            }
            impl SpatialAudioHrtfDistanceDecay {}
            unsafe impl ::windows::Abi for SpatialAudioHrtfDistanceDecay {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct SpatialAudioHrtfDirectivityType(pub i32);
            impl SpatialAudioHrtfDirectivityType {
                pub const SpatialAudioHrtfDirectivity_OmniDirectional: Self = Self(0i32);
                pub const SpatialAudioHrtfDirectivity_Cardioid: Self = Self(1i32);
                pub const SpatialAudioHrtfDirectivity_Cone: Self = Self(2i32);
            }
            impl ::std::convert::From<i32> for SpatialAudioHrtfDirectivityType {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for SpatialAudioHrtfDirectivityType {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct SpatialAudioHrtfDirectivity {
                pub Type: SpatialAudioHrtfDirectivityType,
                pub Scaling: f32,
            }
            impl SpatialAudioHrtfDirectivity {}
            unsafe impl ::windows::Abi for SpatialAudioHrtfDirectivity {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct SpatialAudioHrtfDirectivityCone {
                pub directivity: SpatialAudioHrtfDirectivity,
                pub InnerAngle: f32,
                pub OuterAngle: f32,
            }
            impl SpatialAudioHrtfDirectivityCone {}
            unsafe impl ::windows::Abi for SpatialAudioHrtfDirectivityCone {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct SpatialAudioHrtfDirectivityCardioid {
                pub directivity: SpatialAudioHrtfDirectivity,
                pub Order: f32,
            }
            impl SpatialAudioHrtfDirectivityCardioid {}
            unsafe impl ::windows::Abi for SpatialAudioHrtfDirectivityCardioid {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union SpatialAudioHrtfDirectivityUnion {
                pub Cone: SpatialAudioHrtfDirectivityCone,
                pub Cardiod: SpatialAudioHrtfDirectivityCardioid,
                pub Omni: SpatialAudioHrtfDirectivity,
            }
            impl SpatialAudioHrtfDirectivityUnion {}
            unsafe impl ::windows::Abi for SpatialAudioHrtfDirectivityUnion {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct SpatialAudioHrtfEnvironmentType(pub i32);
            impl SpatialAudioHrtfEnvironmentType {
                pub const SpatialAudioHrtfEnvironment_Small: Self = Self(0i32);
                pub const SpatialAudioHrtfEnvironment_Medium: Self = Self(1i32);
                pub const SpatialAudioHrtfEnvironment_Large: Self = Self(2i32);
                pub const SpatialAudioHrtfEnvironment_Outdoors: Self = Self(3i32);
                pub const SpatialAudioHrtfEnvironment_Average: Self = Self(4i32);
            }
            impl ::std::convert::From<i32> for SpatialAudioHrtfEnvironmentType {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for SpatialAudioHrtfEnvironmentType {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            pub struct SpatialAudioHrtfActivationParams {
                pub ObjectFormat: *mut super::Multimedia::WAVEFORMATEX,
                pub StaticObjectTypeMask: AudioObjectType,
                pub MinDynamicObjectCount: u32,
                pub MaxDynamicObjectCount: u32,
                pub Category: AUDIO_STREAM_CATEGORY,
                pub EventHandle: super::SystemServices::HANDLE,
                pub NotifyObject: ::std::option::Option<ISpatialAudioObjectRenderStreamNotify>,
                pub DistanceDecay: *mut SpatialAudioHrtfDistanceDecay,
                pub Directivity: *mut SpatialAudioHrtfDirectivityUnion,
                pub Environment: *mut SpatialAudioHrtfEnvironmentType,
                pub Orientation: *mut f32,
            }
            impl SpatialAudioHrtfActivationParams {}
            #[repr(C, packed(1))]
            #[doc(hidden)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct SpatialAudioHrtfActivationParams_abi {
                pub ObjectFormat: *mut super::Multimedia::WAVEFORMATEX,
                pub StaticObjectTypeMask: AudioObjectType,
                pub MinDynamicObjectCount: u32,
                pub MaxDynamicObjectCount: u32,
                pub Category: AUDIO_STREAM_CATEGORY,
                pub EventHandle: super::SystemServices::HANDLE,
                pub NotifyObject: ::windows::RawPtr,
                pub DistanceDecay: *mut SpatialAudioHrtfDistanceDecay,
                pub Directivity: *mut SpatialAudioHrtfDirectivityUnion,
                pub Environment: *mut SpatialAudioHrtfEnvironmentType,
                pub Orientation: *mut f32,
            }
            unsafe impl ::windows::Abi for SpatialAudioHrtfActivationParams {
                type Abi = SpatialAudioHrtfActivationParams_abi;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct SpatialAudioMetadataCopyMode(pub i32);
            impl SpatialAudioMetadataCopyMode {
                pub const SpatialAudioMetadataCopy_Overwrite: Self = Self(0i32);
                pub const SpatialAudioMetadataCopy_Append: Self = Self(1i32);
                pub const SpatialAudioMetadataCopy_AppendMergeWithLast: Self = Self(2i32);
                pub const SpatialAudioMetadataCopy_AppendMergeWithFirst: Self = Self(3i32);
            }
            impl ::std::convert::From<i32> for SpatialAudioMetadataCopyMode {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for SpatialAudioMetadataCopyMode {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct SpatialAudioMetadataItemsInfo {
                pub FrameCount: u16,
                pub ItemCount: u16,
                pub MaxItemCount: u16,
                pub MaxValueBufferLength: u32,
            }
            impl SpatialAudioMetadataItemsInfo {}
            unsafe impl ::windows::Abi for SpatialAudioMetadataItemsInfo {
                type Abi = Self;
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct SpatialAudioMetadataWriterOverflowMode(pub i32);
            impl SpatialAudioMetadataWriterOverflowMode {
                pub const SpatialAudioMetadataWriterOverflow_Fail: Self = Self(0i32);
                pub const SpatialAudioMetadataWriterOverflow_MergeWithNew: Self = Self(1i32);
                pub const SpatialAudioMetadataWriterOverflow_MergeWithLast: Self = Self(2i32);
            }
            impl ::std::convert::From<i32> for SpatialAudioMetadataWriterOverflowMode {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for SpatialAudioMetadataWriterOverflowMode {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            pub struct SpatialAudioObjectRenderStreamActivationParams {
                pub ObjectFormat: *mut super::Multimedia::WAVEFORMATEX,
                pub StaticObjectTypeMask: AudioObjectType,
                pub MinDynamicObjectCount: u32,
                pub MaxDynamicObjectCount: u32,
                pub Category: AUDIO_STREAM_CATEGORY,
                pub EventHandle: super::SystemServices::HANDLE,
                pub NotifyObject: ::std::option::Option<ISpatialAudioObjectRenderStreamNotify>,
            }
            impl SpatialAudioObjectRenderStreamActivationParams {}
            #[repr(C, packed(1))]
            #[doc(hidden)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct SpatialAudioObjectRenderStreamActivationParams_abi {
                pub ObjectFormat: *mut super::Multimedia::WAVEFORMATEX,
                pub StaticObjectTypeMask: AudioObjectType,
                pub MinDynamicObjectCount: u32,
                pub MaxDynamicObjectCount: u32,
                pub Category: AUDIO_STREAM_CATEGORY,
                pub EventHandle: super::SystemServices::HANDLE,
                pub NotifyObject: ::windows::RawPtr,
            }
            unsafe impl ::windows::Abi for SpatialAudioObjectRenderStreamActivationParams {
                type Abi = SpatialAudioObjectRenderStreamActivationParams_abi;
            }
            #[repr(C, packed(1))]
            pub struct SpatialAudioObjectRenderStreamForMetadataActivationParams {
                pub ObjectFormat: *mut super::Multimedia::WAVEFORMATEX,
                pub StaticObjectTypeMask: AudioObjectType,
                pub MinDynamicObjectCount: u32,
                pub MaxDynamicObjectCount: u32,
                pub Category: AUDIO_STREAM_CATEGORY,
                pub EventHandle: super::SystemServices::HANDLE,
                pub MetadataFormatId: ::windows::Guid,
                pub MaxMetadataItemCount: u16,
                pub MetadataActivationParams: *mut super::StructuredStorage::PROPVARIANT,
                pub NotifyObject: ::std::option::Option<ISpatialAudioObjectRenderStreamNotify>,
            }
            impl SpatialAudioObjectRenderStreamForMetadataActivationParams {}
            #[repr(C, packed(1))]
            #[doc(hidden)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct SpatialAudioObjectRenderStreamForMetadataActivationParams_abi {
                pub ObjectFormat: *mut super::Multimedia::WAVEFORMATEX,
                pub StaticObjectTypeMask: AudioObjectType,
                pub MinDynamicObjectCount: u32,
                pub MaxDynamicObjectCount: u32,
                pub Category: AUDIO_STREAM_CATEGORY,
                pub EventHandle: super::SystemServices::HANDLE,
                pub MetadataFormatId: ::windows::Guid,
                pub MaxMetadataItemCount: u16,
                pub MetadataActivationParams: *mut super::StructuredStorage::PROPVARIANT_abi,
                pub NotifyObject: ::windows::RawPtr,
            }
            unsafe impl ::windows::Abi for SpatialAudioObjectRenderStreamForMetadataActivationParams {
                type Abi = SpatialAudioObjectRenderStreamForMetadataActivationParams_abi;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct TRANSPORTAUDIOPARMS {
                pub EnableOutput: i32,
                pub EnableRecord: i32,
                pub EnableSelsync: i32,
                pub Input: i32,
                pub MonitorSource: i32,
            }
            impl TRANSPORTAUDIOPARMS {}
            impl ::std::default::Default for TRANSPORTAUDIOPARMS {
                fn default() -> Self {
                    Self {
                        EnableOutput: 0,
                        EnableRecord: 0,
                        EnableSelsync: 0,
                        Input: 0,
                        MonitorSource: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for TRANSPORTAUDIOPARMS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("TRANSPORTAUDIOPARMS")
                        .field("EnableOutput", &format_args!("{:?}", self.EnableOutput))
                        .field("EnableRecord", &format_args!("{:?}", self.EnableRecord))
                        .field("EnableSelsync", &format_args!("{:?}", self.EnableSelsync))
                        .field("Input", &format_args!("{:?}", self.Input))
                        .field("MonitorSource", &format_args!("{:?}", self.MonitorSource))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for TRANSPORTAUDIOPARMS {
                fn eq(&self, other: &Self) -> bool {
                    self.EnableOutput == other.EnableOutput
                        && self.EnableRecord == other.EnableRecord
                        && self.EnableSelsync == other.EnableSelsync
                        && self.Input == other.Input
                        && self.MonitorSource == other.MonitorSource
                }
            }
            impl ::std::cmp::Eq for TRANSPORTAUDIOPARMS {}
            unsafe impl ::windows::Abi for TRANSPORTAUDIOPARMS {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct TRANSPORTBASICPARMS {
                pub TimeFormat: i32,
                pub TimeReference: i32,
                pub Superimpose: i32,
                pub EndStopAction: i32,
                pub RecordFormat: i32,
                pub StepFrames: i32,
                pub SetpField: i32,
                pub Preroll: i32,
                pub RecPreroll: i32,
                pub Postroll: i32,
                pub EditDelay: i32,
                pub PlayTCDelay: i32,
                pub RecTCDelay: i32,
                pub EditField: i32,
                pub FrameServo: i32,
                pub ColorFrameServo: i32,
                pub ServoRef: i32,
                pub WarnGenlock: i32,
                pub SetTracking: i32,
                pub VolumeName: [i8; 40],
                pub Ballistic: [i32; 20],
                pub Speed: i32,
                pub CounterFormat: i32,
                pub TunerChannel: i32,
                pub TunerNumber: i32,
                pub TimerEvent: i32,
                pub TimerStartDay: i32,
                pub TimerStartTime: i32,
                pub TimerStopDay: i32,
                pub TimerStopTime: i32,
            }
            impl TRANSPORTBASICPARMS {}
            impl ::std::default::Default for TRANSPORTBASICPARMS {
                fn default() -> Self {
                    Self {
                        TimeFormat: 0,
                        TimeReference: 0,
                        Superimpose: 0,
                        EndStopAction: 0,
                        RecordFormat: 0,
                        StepFrames: 0,
                        SetpField: 0,
                        Preroll: 0,
                        RecPreroll: 0,
                        Postroll: 0,
                        EditDelay: 0,
                        PlayTCDelay: 0,
                        RecTCDelay: 0,
                        EditField: 0,
                        FrameServo: 0,
                        ColorFrameServo: 0,
                        ServoRef: 0,
                        WarnGenlock: 0,
                        SetTracking: 0,
                        VolumeName: [0; 40],
                        Ballistic: [0; 20],
                        Speed: 0,
                        CounterFormat: 0,
                        TunerChannel: 0,
                        TunerNumber: 0,
                        TimerEvent: 0,
                        TimerStartDay: 0,
                        TimerStartTime: 0,
                        TimerStopDay: 0,
                        TimerStopTime: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for TRANSPORTBASICPARMS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("TRANSPORTBASICPARMS")
                        .field("TimeFormat", &format_args!("{:?}", self.TimeFormat))
                        .field("TimeReference", &format_args!("{:?}", self.TimeReference))
                        .field("Superimpose", &format_args!("{:?}", self.Superimpose))
                        .field("EndStopAction", &format_args!("{:?}", self.EndStopAction))
                        .field("RecordFormat", &format_args!("{:?}", self.RecordFormat))
                        .field("StepFrames", &format_args!("{:?}", self.StepFrames))
                        .field("SetpField", &format_args!("{:?}", self.SetpField))
                        .field("Preroll", &format_args!("{:?}", self.Preroll))
                        .field("RecPreroll", &format_args!("{:?}", self.RecPreroll))
                        .field("Postroll", &format_args!("{:?}", self.Postroll))
                        .field("EditDelay", &format_args!("{:?}", self.EditDelay))
                        .field("PlayTCDelay", &format_args!("{:?}", self.PlayTCDelay))
                        .field("RecTCDelay", &format_args!("{:?}", self.RecTCDelay))
                        .field("EditField", &format_args!("{:?}", self.EditField))
                        .field("FrameServo", &format_args!("{:?}", self.FrameServo))
                        .field(
                            "ColorFrameServo",
                            &format_args!("{:?}", self.ColorFrameServo),
                        )
                        .field("ServoRef", &format_args!("{:?}", self.ServoRef))
                        .field("WarnGenlock", &format_args!("{:?}", self.WarnGenlock))
                        .field("SetTracking", &format_args!("{:?}", self.SetTracking))
                        .field("VolumeName", &format_args!("{:?}", self.VolumeName))
                        .field("Ballistic", &format_args!("{:?}", self.Ballistic))
                        .field("Speed", &format_args!("{:?}", self.Speed))
                        .field("CounterFormat", &format_args!("{:?}", self.CounterFormat))
                        .field("TunerChannel", &format_args!("{:?}", self.TunerChannel))
                        .field("TunerNumber", &format_args!("{:?}", self.TunerNumber))
                        .field("TimerEvent", &format_args!("{:?}", self.TimerEvent))
                        .field("TimerStartDay", &format_args!("{:?}", self.TimerStartDay))
                        .field("TimerStartTime", &format_args!("{:?}", self.TimerStartTime))
                        .field("TimerStopDay", &format_args!("{:?}", self.TimerStopDay))
                        .field("TimerStopTime", &format_args!("{:?}", self.TimerStopTime))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for TRANSPORTBASICPARMS {
                fn eq(&self, other: &Self) -> bool {
                    self.TimeFormat == other.TimeFormat
                        && self.TimeReference == other.TimeReference
                        && self.Superimpose == other.Superimpose
                        && self.EndStopAction == other.EndStopAction
                        && self.RecordFormat == other.RecordFormat
                        && self.StepFrames == other.StepFrames
                        && self.SetpField == other.SetpField
                        && self.Preroll == other.Preroll
                        && self.RecPreroll == other.RecPreroll
                        && self.Postroll == other.Postroll
                        && self.EditDelay == other.EditDelay
                        && self.PlayTCDelay == other.PlayTCDelay
                        && self.RecTCDelay == other.RecTCDelay
                        && self.EditField == other.EditField
                        && self.FrameServo == other.FrameServo
                        && self.ColorFrameServo == other.ColorFrameServo
                        && self.ServoRef == other.ServoRef
                        && self.WarnGenlock == other.WarnGenlock
                        && self.SetTracking == other.SetTracking
                        && self.VolumeName == other.VolumeName
                        && self.Ballistic == other.Ballistic
                        && self.Speed == other.Speed
                        && self.CounterFormat == other.CounterFormat
                        && self.TunerChannel == other.TunerChannel
                        && self.TunerNumber == other.TunerNumber
                        && self.TimerEvent == other.TimerEvent
                        && self.TimerStartDay == other.TimerStartDay
                        && self.TimerStartTime == other.TimerStartTime
                        && self.TimerStopDay == other.TimerStopDay
                        && self.TimerStopTime == other.TimerStopTime
                }
            }
            impl ::std::cmp::Eq for TRANSPORTBASICPARMS {}
            unsafe impl ::windows::Abi for TRANSPORTBASICPARMS {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct TRANSPORTSTATUS {
                pub Mode: i32,
                pub LastError: i32,
                pub RecordInhibit: i32,
                pub ServoLock: i32,
                pub MediaPresent: i32,
                pub MediaLength: i32,
                pub MediaSize: i32,
                pub MediaTrackCount: i32,
                pub MediaTrackLength: i32,
                pub MediaTrackSide: i32,
                pub MediaType: i32,
                pub LinkMode: i32,
                pub NotifyOn: i32,
            }
            impl TRANSPORTSTATUS {}
            impl ::std::default::Default for TRANSPORTSTATUS {
                fn default() -> Self {
                    Self {
                        Mode: 0,
                        LastError: 0,
                        RecordInhibit: 0,
                        ServoLock: 0,
                        MediaPresent: 0,
                        MediaLength: 0,
                        MediaSize: 0,
                        MediaTrackCount: 0,
                        MediaTrackLength: 0,
                        MediaTrackSide: 0,
                        MediaType: 0,
                        LinkMode: 0,
                        NotifyOn: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for TRANSPORTSTATUS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("TRANSPORTSTATUS")
                        .field("Mode", &format_args!("{:?}", self.Mode))
                        .field("LastError", &format_args!("{:?}", self.LastError))
                        .field("RecordInhibit", &format_args!("{:?}", self.RecordInhibit))
                        .field("ServoLock", &format_args!("{:?}", self.ServoLock))
                        .field("MediaPresent", &format_args!("{:?}", self.MediaPresent))
                        .field("MediaLength", &format_args!("{:?}", self.MediaLength))
                        .field("MediaSize", &format_args!("{:?}", self.MediaSize))
                        .field(
                            "MediaTrackCount",
                            &format_args!("{:?}", self.MediaTrackCount),
                        )
                        .field(
                            "MediaTrackLength",
                            &format_args!("{:?}", self.MediaTrackLength),
                        )
                        .field("MediaTrackSide", &format_args!("{:?}", self.MediaTrackSide))
                        .field("MediaType", &format_args!("{:?}", self.MediaType))
                        .field("LinkMode", &format_args!("{:?}", self.LinkMode))
                        .field("NotifyOn", &format_args!("{:?}", self.NotifyOn))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for TRANSPORTSTATUS {
                fn eq(&self, other: &Self) -> bool {
                    self.Mode == other.Mode
                        && self.LastError == other.LastError
                        && self.RecordInhibit == other.RecordInhibit
                        && self.ServoLock == other.ServoLock
                        && self.MediaPresent == other.MediaPresent
                        && self.MediaLength == other.MediaLength
                        && self.MediaSize == other.MediaSize
                        && self.MediaTrackCount == other.MediaTrackCount
                        && self.MediaTrackLength == other.MediaTrackLength
                        && self.MediaTrackSide == other.MediaTrackSide
                        && self.MediaType == other.MediaType
                        && self.LinkMode == other.LinkMode
                        && self.NotifyOn == other.NotifyOn
                }
            }
            impl ::std::cmp::Eq for TRANSPORTSTATUS {}
            unsafe impl ::windows::Abi for TRANSPORTSTATUS {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct TRANSPORTVIDEOPARMS {
                pub OutputMode: i32,
                pub Input: i32,
            }
            impl TRANSPORTVIDEOPARMS {}
            impl ::std::default::Default for TRANSPORTVIDEOPARMS {
                fn default() -> Self {
                    Self {
                        OutputMode: 0,
                        Input: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for TRANSPORTVIDEOPARMS {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("TRANSPORTVIDEOPARMS")
                        .field("OutputMode", &format_args!("{:?}", self.OutputMode))
                        .field("Input", &format_args!("{:?}", self.Input))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for TRANSPORTVIDEOPARMS {
                fn eq(&self, other: &Self) -> bool {
                    self.OutputMode == other.OutputMode && self.Input == other.Input
                }
            }
            impl ::std::cmp::Eq for TRANSPORTVIDEOPARMS {}
            unsafe impl ::windows::Abi for TRANSPORTVIDEOPARMS {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct TUNER_ANALOG_CAPS_S {
                pub Mode: u32,
                pub StandardsSupported: u32,
                pub MinFrequency: u32,
                pub MaxFrequency: u32,
                pub TuningGranularity: u32,
                pub SettlingTime: u32,
                pub ScanSensingRange: u32,
                pub FineTuneSensingRange: u32,
            }
            impl TUNER_ANALOG_CAPS_S {}
            impl ::std::default::Default for TUNER_ANALOG_CAPS_S {
                fn default() -> Self {
                    Self {
                        Mode: 0,
                        StandardsSupported: 0,
                        MinFrequency: 0,
                        MaxFrequency: 0,
                        TuningGranularity: 0,
                        SettlingTime: 0,
                        ScanSensingRange: 0,
                        FineTuneSensingRange: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for TUNER_ANALOG_CAPS_S {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("TUNER_ANALOG_CAPS_S")
                        .field("Mode", &format_args!("{:?}", self.Mode))
                        .field(
                            "StandardsSupported",
                            &format_args!("{:?}", self.StandardsSupported),
                        )
                        .field("MinFrequency", &format_args!("{:?}", self.MinFrequency))
                        .field("MaxFrequency", &format_args!("{:?}", self.MaxFrequency))
                        .field(
                            "TuningGranularity",
                            &format_args!("{:?}", self.TuningGranularity),
                        )
                        .field("SettlingTime", &format_args!("{:?}", self.SettlingTime))
                        .field(
                            "ScanSensingRange",
                            &format_args!("{:?}", self.ScanSensingRange),
                        )
                        .field(
                            "FineTuneSensingRange",
                            &format_args!("{:?}", self.FineTuneSensingRange),
                        )
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for TUNER_ANALOG_CAPS_S {
                fn eq(&self, other: &Self) -> bool {
                    self.Mode == other.Mode
                        && self.StandardsSupported == other.StandardsSupported
                        && self.MinFrequency == other.MinFrequency
                        && self.MaxFrequency == other.MaxFrequency
                        && self.TuningGranularity == other.TuningGranularity
                        && self.SettlingTime == other.SettlingTime
                        && self.ScanSensingRange == other.ScanSensingRange
                        && self.FineTuneSensingRange == other.FineTuneSensingRange
                }
            }
            impl ::std::cmp::Eq for TUNER_ANALOG_CAPS_S {}
            unsafe impl ::windows::Abi for TUNER_ANALOG_CAPS_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct VBICAP_PROPERTIES_PROTECTION_S {
                pub Property: KSIDENTIFIER,
                pub StreamIndex: u32,
                pub Status: u32,
            }
            impl VBICAP_PROPERTIES_PROTECTION_S {}
            unsafe impl ::windows::Abi for VBICAP_PROPERTIES_PROTECTION_S {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct VBICODECFILTERING_STATISTICS_TELETEXT {
                pub Common: VBICODECFILTERING_STATISTICS_COMMON,
            }
            impl VBICODECFILTERING_STATISTICS_TELETEXT {}
            impl ::std::default::Default for VBICODECFILTERING_STATISTICS_TELETEXT {
                fn default() -> Self {
                    Self {
                        Common: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for VBICODECFILTERING_STATISTICS_TELETEXT {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("VBICODECFILTERING_STATISTICS_TELETEXT")
                        .field("Common", &format_args!("{:?}", self.Common))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for VBICODECFILTERING_STATISTICS_TELETEXT {
                fn eq(&self, other: &Self) -> bool {
                    self.Common == other.Common
                }
            }
            impl ::std::cmp::Eq for VBICODECFILTERING_STATISTICS_TELETEXT {}
            unsafe impl ::windows::Abi for VBICODECFILTERING_STATISTICS_TELETEXT {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct VBICODECFILTERING_STATISTICS_TELETEXT_PIN {
                pub Common: VBICODECFILTERING_STATISTICS_COMMON_PIN,
            }
            impl VBICODECFILTERING_STATISTICS_TELETEXT_PIN {}
            impl ::std::default::Default for VBICODECFILTERING_STATISTICS_TELETEXT_PIN {
                fn default() -> Self {
                    Self {
                        Common: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for VBICODECFILTERING_STATISTICS_TELETEXT_PIN {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("VBICODECFILTERING_STATISTICS_TELETEXT_PIN")
                        .field("Common", &format_args!("{:?}", self.Common))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for VBICODECFILTERING_STATISTICS_TELETEXT_PIN {
                fn eq(&self, other: &Self) -> bool {
                    self.Common == other.Common
                }
            }
            impl ::std::cmp::Eq for VBICODECFILTERING_STATISTICS_TELETEXT_PIN {}
            unsafe impl ::windows::Abi for VBICODECFILTERING_STATISTICS_TELETEXT_PIN {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct VRAM_SURFACE_INFO {
                pub hSurface: usize,
                pub VramPhysicalAddress: i64,
                pub cbCaptured: u32,
                pub dwWidth: u32,
                pub dwHeight: u32,
                pub dwLinearSize: u32,
                pub lPitch: i32,
                pub ullReserved: [u64; 16],
            }
            impl VRAM_SURFACE_INFO {}
            impl ::std::default::Default for VRAM_SURFACE_INFO {
                fn default() -> Self {
                    Self {
                        hSurface: 0,
                        VramPhysicalAddress: 0,
                        cbCaptured: 0,
                        dwWidth: 0,
                        dwHeight: 0,
                        dwLinearSize: 0,
                        lPitch: 0,
                        ullReserved: [0; 16],
                    }
                }
            }
            impl ::std::fmt::Debug for VRAM_SURFACE_INFO {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("VRAM_SURFACE_INFO")
                        .field("hSurface", &format_args!("{:?}", self.hSurface))
                        .field(
                            "VramPhysicalAddress",
                            &format_args!("{:?}", self.VramPhysicalAddress),
                        )
                        .field("cbCaptured", &format_args!("{:?}", self.cbCaptured))
                        .field("dwWidth", &format_args!("{:?}", self.dwWidth))
                        .field("dwHeight", &format_args!("{:?}", self.dwHeight))
                        .field("dwLinearSize", &format_args!("{:?}", self.dwLinearSize))
                        .field("lPitch", &format_args!("{:?}", self.lPitch))
                        .field("ullReserved", &format_args!("{:?}", self.ullReserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for VRAM_SURFACE_INFO {
                fn eq(&self, other: &Self) -> bool {
                    self.hSurface == other.hSurface
                        && self.VramPhysicalAddress == other.VramPhysicalAddress
                        && self.cbCaptured == other.cbCaptured
                        && self.dwWidth == other.dwWidth
                        && self.dwHeight == other.dwHeight
                        && self.dwLinearSize == other.dwLinearSize
                        && self.lPitch == other.lPitch
                        && self.ullReserved == other.ullReserved
                }
            }
            impl ::std::cmp::Eq for VRAM_SURFACE_INFO {}
            unsafe impl ::windows::Abi for VRAM_SURFACE_INFO {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct VRAM_SURFACE_INFO_PROPERTY_S {
                pub Property: KSIDENTIFIER,
                pub pVramSurfaceInfo: *mut VRAM_SURFACE_INFO,
            }
            impl VRAM_SURFACE_INFO_PROPERTY_S {}
            unsafe impl ::windows::Abi for VRAM_SURFACE_INFO_PROPERTY_S {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct WAVEFORMATEXTENSIBLE_IEC61937 {
                pub FormatExt: super::Multimedia::WAVEFORMATEXTENSIBLE,
                pub dwEncodedSamplesPerSec: u32,
                pub dwEncodedChannelCount: u32,
                pub dwAverageBytesPerSec: u32,
            }
            impl WAVEFORMATEXTENSIBLE_IEC61937 {}
            unsafe impl ::windows::Abi for WAVEFORMATEXTENSIBLE_IEC61937 {
                type Abi = Self;
            }
            pub const WAVE_FORMAT_EXTENSIBLE: u32 = 65534u32;
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct WNF_KSCAMERA_STREAMSTATE_INFO {
                pub ProcessId: u32,
                pub SessionId: u32,
                pub StreamState: u32,
                pub Reserved: u32,
            }
            impl WNF_KSCAMERA_STREAMSTATE_INFO {}
            impl ::std::default::Default for WNF_KSCAMERA_STREAMSTATE_INFO {
                fn default() -> Self {
                    Self {
                        ProcessId: 0,
                        SessionId: 0,
                        StreamState: 0,
                        Reserved: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for WNF_KSCAMERA_STREAMSTATE_INFO {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("WNF_KSCAMERA_STREAMSTATE_INFO")
                        .field("ProcessId", &format_args!("{:?}", self.ProcessId))
                        .field("SessionId", &format_args!("{:?}", self.SessionId))
                        .field("StreamState", &format_args!("{:?}", self.StreamState))
                        .field("Reserved", &format_args!("{:?}", self.Reserved))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for WNF_KSCAMERA_STREAMSTATE_INFO {
                fn eq(&self, other: &Self) -> bool {
                    self.ProcessId == other.ProcessId
                        && self.SessionId == other.SessionId
                        && self.StreamState == other.StreamState
                        && self.Reserved == other.Reserved
                }
            }
            impl ::std::cmp::Eq for WNF_KSCAMERA_STREAMSTATE_INFO {}
            unsafe impl ::windows::Abi for WNF_KSCAMERA_STREAMSTATE_INFO {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct WST_BUFFER_LINE {
                pub Confidence: u8,
                pub Bytes: [u8; 42],
            }
            impl WST_BUFFER_LINE {}
            impl ::std::default::Default for WST_BUFFER_LINE {
                fn default() -> Self {
                    Self {
                        Confidence: 0,
                        Bytes: [0; 42],
                    }
                }
            }
            impl ::std::fmt::Debug for WST_BUFFER_LINE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("WST_BUFFER_LINE")
                        .field("Confidence", &format_args!("{:?}", self.Confidence))
                        .field("Bytes", &format_args!("{:?}", self.Bytes))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for WST_BUFFER_LINE {
                fn eq(&self, other: &Self) -> bool {
                    self.Confidence == other.Confidence && self.Bytes == other.Bytes
                }
            }
            impl ::std::cmp::Eq for WST_BUFFER_LINE {}
            unsafe impl ::windows::Abi for WST_BUFFER_LINE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct WST_BUFFER {
                pub ScanlinesRequested: VBICODECFILTERING_SCANLINES,
                pub WstLines: [WST_BUFFER_LINE; 17],
            }
            impl WST_BUFFER {}
            impl ::std::default::Default for WST_BUFFER {
                fn default() -> Self {
                    Self {
                        ScanlinesRequested: ::std::default::Default::default(),
                        WstLines: [::std::default::Default::default(); 17],
                    }
                }
            }
            impl ::std::fmt::Debug for WST_BUFFER {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("WST_BUFFER")
                        .field(
                            "ScanlinesRequested",
                            &format_args!("{:?}", self.ScanlinesRequested),
                        )
                        .field("WstLines", &format_args!("{:?}", self.WstLines))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for WST_BUFFER {
                fn eq(&self, other: &Self) -> bool {
                    self.ScanlinesRequested == other.ScanlinesRequested
                        && self.WstLines == other.WstLines
                }
            }
            impl ::std::cmp::Eq for WST_BUFFER {}
            unsafe impl ::windows::Abi for WST_BUFFER {
                type Abi = Self;
            }
            pub const WST_BYTES_PER_LINE: u32 = 42u32;
            pub const WST_TVTUNER_CHANGE_BEGIN_TUNE: i32 = 4096i32;
            pub const WST_TVTUNER_CHANGE_END_TUNE: i32 = 8192i32;
            pub type YIELDPROC = extern "system" fn(mciid: u32, dwyielddata: u32) -> u32;
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct _AUDCLNT_BUFFERFLAGS(pub i32);
            impl _AUDCLNT_BUFFERFLAGS {
                pub const AUDCLNT_BUFFERFLAGS_DATA_DISCONTINUITY: Self = Self(1i32);
                pub const AUDCLNT_BUFFERFLAGS_SILENT: Self = Self(2i32);
                pub const AUDCLNT_BUFFERFLAGS_TIMESTAMP_ERROR: Self = Self(4i32);
            }
            impl ::std::convert::From<i32> for _AUDCLNT_BUFFERFLAGS {
                fn from(value: i32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for _AUDCLNT_BUFFERFLAGS {
                type Abi = Self;
            }
            pub unsafe fn mciDriverNotify<'a>(
                hwndcallback: impl ::windows::IntoParam<'a, super::SystemServices::HANDLE>,
                wdeviceid: u32,
                ustatus: u32,
            ) -> super::SystemServices::BOOL {
                panic!("Unsupported target OS");
            }
            pub unsafe fn mciDriverYield(wdeviceid: u32) -> u32 {
                panic!("Unsupported target OS");
            }
            pub unsafe fn mciFreeCommandResource(wtable: u32) -> super::SystemServices::BOOL {
                panic!("Unsupported target OS");
            }
            pub unsafe fn mciGetCreatorTask(mciid: u32) -> HTASK {
                panic!("Unsupported target OS");
            }
            pub unsafe fn mciGetDeviceIDA<'a>(
                pszdevice: impl ::windows::IntoParam<'a, super::SystemServices::PSTR>,
            ) -> u32 {
                panic!("Unsupported target OS");
            }
            pub unsafe fn mciGetDeviceIDFromElementIDA<'a>(
                dwelementid: u32,
                lpstrtype: impl ::windows::IntoParam<'a, super::SystemServices::PSTR>,
            ) -> u32 {
                panic!("Unsupported target OS");
            }
            pub unsafe fn mciGetDeviceIDFromElementIDW<'a>(
                dwelementid: u32,
                lpstrtype: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
            ) -> u32 {
                panic!("Unsupported target OS");
            }
            pub unsafe fn mciGetDeviceIDW<'a>(
                pszdevice: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
            ) -> u32 {
                panic!("Unsupported target OS");
            }
            pub unsafe fn mciGetDriverData(wdeviceid: u32) -> usize {
                panic!("Unsupported target OS");
            }
            pub unsafe fn mciGetErrorStringA(
                mcierr: u32,
                psztext: super::SystemServices::PSTR,
                cchtext: u32,
            ) -> super::SystemServices::BOOL {
                panic!("Unsupported target OS");
            }
            pub unsafe fn mciGetErrorStringW(
                mcierr: u32,
                psztext: super::SystemServices::PWSTR,
                cchtext: u32,
            ) -> super::SystemServices::BOOL {
                panic!("Unsupported target OS");
            }
            pub unsafe fn mciGetYieldProc(
                mciid: u32,
                pdwyielddata: *mut u32,
            ) -> ::std::option::Option<YIELDPROC> {
                panic!("Unsupported target OS");
            }
            pub unsafe fn mciLoadCommandResource<'a>(
                hinstance: impl ::windows::IntoParam<'a, super::SystemServices::HANDLE>,
                lpresname: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                wtype: u32,
            ) -> u32 {
                panic!("Unsupported target OS");
            }
            pub unsafe fn mciSendCommandA(
                mciid: u32,
                umsg: u32,
                dwparam1: usize,
                dwparam2: usize,
            ) -> u32 {
                panic!("Unsupported target OS");
            }
            pub unsafe fn mciSendCommandW(
                mciid: u32,
                umsg: u32,
                dwparam1: usize,
                dwparam2: usize,
            ) -> u32 {
                panic!("Unsupported target OS");
            }
            pub unsafe fn mciSendStringA<'a>(
                lpstrcommand: impl ::windows::IntoParam<'a, super::SystemServices::PSTR>,
                lpstrreturnstring: super::SystemServices::PSTR,
                ureturnlength: u32,
                hwndcallback: impl ::windows::IntoParam<'a, super::WindowsAndMessaging::HWND>,
            ) -> u32 {
                panic!("Unsupported target OS");
            }
            pub unsafe fn mciSendStringW<'a>(
                lpstrcommand: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                lpstrreturnstring: super::SystemServices::PWSTR,
                ureturnlength: u32,
                hwndcallback: impl ::windows::IntoParam<'a, super::WindowsAndMessaging::HWND>,
            ) -> u32 {
                panic!("Unsupported target OS");
            }
            pub unsafe fn mciSetDriverData(
                wdeviceid: u32,
                dwdata: usize,
            ) -> super::SystemServices::BOOL {
                panic!("Unsupported target OS");
            }
            pub unsafe fn mciSetYieldProc(
                mciid: u32,
                fpyieldproc: ::std::option::Option<YIELDPROC>,
                dwyielddata: u32,
            ) -> super::SystemServices::BOOL {
                panic!("Unsupported target OS");
            }
        }
        #[allow(
            unused_variables,
            non_upper_case_globals,
            non_snake_case,
            unused_unsafe,
            non_camel_case_types,
            dead_code,
            clippy::all
        )]
        pub mod Direct3D9 {
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct D3DVECTOR {
                pub x: f32,
                pub y: f32,
                pub z: f32,
            }
            impl D3DVECTOR {}
            impl ::std::default::Default for D3DVECTOR {
                fn default() -> Self {
                    Self {
                        x: 0.0,
                        y: 0.0,
                        z: 0.0,
                    }
                }
            }
            impl ::std::fmt::Debug for D3DVECTOR {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("D3DVECTOR")
                        .field("x", &format_args!("{:?}", self.x))
                        .field("y", &format_args!("{:?}", self.y))
                        .field("z", &format_args!("{:?}", self.z))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for D3DVECTOR {
                fn eq(&self, other: &Self) -> bool {
                    self.x == other.x && self.y == other.y && self.z == other.z
                }
            }
            impl ::std::cmp::Eq for D3DVECTOR {}
            unsafe impl ::windows::Abi for D3DVECTOR {
                type Abi = Self;
            }
        }
        #[allow(
            unused_variables,
            non_upper_case_globals,
            non_snake_case,
            unused_unsafe,
            non_camel_case_types,
            dead_code,
            clippy::all
        )]
        pub mod DirectShow {
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union TIMECODE {
                pub Anonymous: TIMECODE_0,
                pub qw: u64,
            }
            impl TIMECODE {}
            unsafe impl ::windows::Abi for TIMECODE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct TIMECODE_0 {
                pub wFrameRate: u16,
                pub wFrameFract: u16,
                pub dwFrames: u32,
            }
            impl TIMECODE_0 {}
            impl ::std::default::Default for TIMECODE_0 {
                fn default() -> Self {
                    Self {
                        wFrameRate: 0,
                        wFrameFract: 0,
                        dwFrames: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for TIMECODE_0 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_Anonymous_e__Struct")
                        .field("wFrameRate", &format_args!("{:?}", self.wFrameRate))
                        .field("wFrameFract", &format_args!("{:?}", self.wFrameFract))
                        .field("dwFrames", &format_args!("{:?}", self.dwFrames))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for TIMECODE_0 {
                fn eq(&self, other: &Self) -> bool {
                    self.wFrameRate == other.wFrameRate
                        && self.wFrameFract == other.wFrameFract
                        && self.dwFrames == other.dwFrames
                }
            }
            impl ::std::cmp::Eq for TIMECODE_0 {}
            unsafe impl ::windows::Abi for TIMECODE_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct TIMECODE_SAMPLE {
                pub qwTick: i64,
                pub timecode: TIMECODE,
                pub dwUser: u32,
                pub dwFlags: u32,
            }
            impl TIMECODE_SAMPLE {}
            unsafe impl ::windows::Abi for TIMECODE_SAMPLE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct KSTOPOLOGY_CONNECTION {
                pub FromNode: u32,
                pub FromNodePin: u32,
                pub ToNode: u32,
                pub ToNodePin: u32,
            }
            impl KSTOPOLOGY_CONNECTION {}
            impl ::std::default::Default for KSTOPOLOGY_CONNECTION {
                fn default() -> Self {
                    Self {
                        FromNode: 0,
                        FromNodePin: 0,
                        ToNode: 0,
                        ToNodePin: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for KSTOPOLOGY_CONNECTION {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("KSTOPOLOGY_CONNECTION")
                        .field("FromNode", &format_args!("{:?}", self.FromNode))
                        .field("FromNodePin", &format_args!("{:?}", self.FromNodePin))
                        .field("ToNode", &format_args!("{:?}", self.ToNode))
                        .field("ToNodePin", &format_args!("{:?}", self.ToNodePin))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for KSTOPOLOGY_CONNECTION {
                fn eq(&self, other: &Self) -> bool {
                    self.FromNode == other.FromNode
                        && self.FromNodePin == other.FromNodePin
                        && self.ToNode == other.ToNode
                        && self.ToNodePin == other.ToNodePin
                }
            }
            impl ::std::cmp::Eq for KSTOPOLOGY_CONNECTION {}
            unsafe impl ::windows::Abi for KSTOPOLOGY_CONNECTION {
                type Abi = Self;
            }
        }
        #[allow(
            unused_variables,
            non_upper_case_globals,
            non_snake_case,
            unused_unsafe,
            non_camel_case_types,
            dead_code,
            clippy::all
        )]
        pub mod DisplayDevices {
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct RECT {
                pub left: i32,
                pub top: i32,
                pub right: i32,
                pub bottom: i32,
            }
            impl RECT {}
            impl ::std::default::Default for RECT {
                fn default() -> Self {
                    Self {
                        left: 0,
                        top: 0,
                        right: 0,
                        bottom: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for RECT {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("RECT")
                        .field("left", &format_args!("{:?}", self.left))
                        .field("top", &format_args!("{:?}", self.top))
                        .field("right", &format_args!("{:?}", self.right))
                        .field("bottom", &format_args!("{:?}", self.bottom))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for RECT {
                fn eq(&self, other: &Self) -> bool {
                    self.left == other.left
                        && self.top == other.top
                        && self.right == other.right
                        && self.bottom == other.bottom
                }
            }
            impl ::std::cmp::Eq for RECT {}
            unsafe impl ::windows::Abi for RECT {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct SIZE {
                pub cx: i32,
                pub cy: i32,
            }
            impl SIZE {}
            impl ::std::default::Default for SIZE {
                fn default() -> Self {
                    Self { cx: 0, cy: 0 }
                }
            }
            impl ::std::fmt::Debug for SIZE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("SIZE")
                        .field("cx", &format_args!("{:?}", self.cx))
                        .field("cy", &format_args!("{:?}", self.cy))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for SIZE {
                fn eq(&self, other: &Self) -> bool {
                    self.cx == other.cx && self.cy == other.cy
                }
            }
            impl ::std::cmp::Eq for SIZE {}
            unsafe impl ::windows::Abi for SIZE {
                type Abi = Self;
            }
        }
        #[allow(
            unused_variables,
            non_upper_case_globals,
            non_snake_case,
            unused_unsafe,
            non_camel_case_types,
            dead_code,
            clippy::all
        )]
        pub mod Gdi {
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct HDC(pub isize);
            impl HDC {}
            impl HDC {
                pub const NULL: Self = Self(0);
                pub fn is_null(&self) -> bool {
                    self == &Self::NULL
                }
            }
            impl ::std::default::Default for HDC {
                fn default() -> Self {
                    Self(0)
                }
            }
            impl ::std::fmt::Debug for HDC {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("HDC")
                        .field("Value", &format_args!("{:?}", self.0))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for HDC {
                fn eq(&self, other: &Self) -> bool {
                    self.0 == other.0
                }
            }
            impl ::std::cmp::Eq for HDC {}
            unsafe impl ::windows::Abi for HDC {
                type Abi = Self;
            }
        }
        #[allow(
            unused_variables,
            non_upper_case_globals,
            non_snake_case,
            unused_unsafe,
            non_camel_case_types,
            dead_code,
            clippy::all
        )]
        pub mod Kernel {
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct LUID {
                pub LowPart: u32,
                pub HighPart: i32,
            }
            impl LUID {}
            impl ::std::default::Default for LUID {
                fn default() -> Self {
                    Self {
                        LowPart: 0,
                        HighPart: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for LUID {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("LUID")
                        .field("LowPart", &format_args!("{:?}", self.LowPart))
                        .field("HighPart", &format_args!("{:?}", self.HighPart))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for LUID {
                fn eq(&self, other: &Self) -> bool {
                    self.LowPart == other.LowPart && self.HighPart == other.HighPart
                }
            }
            impl ::std::cmp::Eq for LUID {}
            unsafe impl ::windows::Abi for LUID {
                type Abi = Self;
            }
        }
        #[allow(
            unused_variables,
            non_upper_case_globals,
            non_snake_case,
            unused_unsafe,
            non_camel_case_types,
            dead_code,
            clippy::all
        )]
        pub mod Multimedia {
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct WAVEFORMATEX {
                pub wFormatTag: u16,
                pub nChannels: u16,
                pub nSamplesPerSec: u32,
                pub nAvgBytesPerSec: u32,
                pub nBlockAlign: u16,
                pub wBitsPerSample: u16,
                pub cbSize: u16,
            }
            impl WAVEFORMATEX {}
            unsafe impl ::windows::Abi for WAVEFORMATEX {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct HMIDI(pub isize);
            impl HMIDI {}
            impl HMIDI {
                pub const NULL: Self = Self(0);
                pub fn is_null(&self) -> bool {
                    self == &Self::NULL
                }
            }
            impl ::std::default::Default for HMIDI {
                fn default() -> Self {
                    Self(0)
                }
            }
            impl ::std::fmt::Debug for HMIDI {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("HMIDI")
                        .field("Value", &format_args!("{:?}", self.0))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for HMIDI {
                fn eq(&self, other: &Self) -> bool {
                    self.0 == other.0
                }
            }
            impl ::std::cmp::Eq for HMIDI {}
            unsafe impl ::windows::Abi for HMIDI {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct midiopenstrmid_tag {
                pub dwStreamID: u32,
                pub uDeviceID: u32,
            }
            impl midiopenstrmid_tag {}
            unsafe impl ::windows::Abi for midiopenstrmid_tag {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct WAVEFORMATEXTENSIBLE {
                pub Format: WAVEFORMATEX,
                pub Samples: WAVEFORMATEXTENSIBLE_0,
                pub dwChannelMask: u32,
                pub SubFormat: ::windows::Guid,
            }
            impl WAVEFORMATEXTENSIBLE {}
            unsafe impl ::windows::Abi for WAVEFORMATEXTENSIBLE {
                type Abi = Self;
            }
            #[repr(C, packed(1))]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union WAVEFORMATEXTENSIBLE_0 {
                pub wValidBitsPerSample: u16,
                pub wSamplesPerBlock: u16,
                pub wReserved: u16,
            }
            impl WAVEFORMATEXTENSIBLE_0 {}
            unsafe impl ::windows::Abi for WAVEFORMATEXTENSIBLE_0 {
                type Abi = Self;
            }
            pub const WAVE_FORMAT_PCM: u32 = 1u32;
            pub const WAVE_FORMAT_IEEE_FLOAT: u32 = 3u32;
            pub const KSDATAFORMAT_SUBTYPE_IEEE_FLOAT: ::windows::Guid =
                ::windows::Guid::from_values(3, 0, 16, [128, 0, 0, 170, 0, 56, 155, 113]);
        }
        #[allow(
            unused_variables,
            non_upper_case_globals,
            non_snake_case,
            unused_unsafe,
            non_camel_case_types,
            dead_code,
            clippy::all
        )]
        pub mod StructuredStorage {
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct ISequentialStream(::windows::IUnknown);
            impl ISequentialStream {}
            unsafe impl ::windows::Interface for ISequentialStream {
                type Vtable = ISequentialStream_abi;
                const IID: ::windows::Guid = ::windows::Guid::from_values(
                    208878128,
                    10780,
                    4558,
                    [173, 229, 0, 170, 0, 68, 119, 61],
                );
            }
            impl ISequentialStream {
                pub unsafe fn Read(
                    &self,
                    pv: *mut ::std::ffi::c_void,
                    cb: u32,
                    pcbread: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pv),
                        ::std::mem::transmute(cb),
                        ::std::mem::transmute(pcbread),
                    )
                }
                pub unsafe fn Write(
                    &self,
                    pv: *const ::std::ffi::c_void,
                    cb: u32,
                    pcbwritten: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pv),
                        ::std::mem::transmute(cb),
                        ::std::mem::transmute(pcbwritten),
                    )
                }
            }
            impl ::std::convert::From<ISequentialStream> for ::windows::IUnknown {
                fn from(value: ISequentialStream) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&ISequentialStream> for ::windows::IUnknown {
                fn from(value: &ISequentialStream) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for ISequentialStream {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a ISequentialStream {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct ISequentialStream_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pv: *mut ::std::ffi::c_void,
                    cb: u32,
                    pcbread: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pv: *const ::std::ffi::c_void,
                    cb: u32,
                    pcbwritten: *mut u32,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IStream(::windows::IUnknown);
            impl IStream {}
            unsafe impl ::windows::Interface for IStream {
                type Vtable = IStream_abi;
                const IID: ::windows::Guid =
                    ::windows::Guid::from_values(12, 0, 0, [192, 0, 0, 0, 0, 0, 0, 70]);
            }
            impl IStream {
                pub unsafe fn Read(
                    &self,
                    pv: *mut ::std::ffi::c_void,
                    cb: u32,
                    pcbread: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pv),
                        ::std::mem::transmute(cb),
                        ::std::mem::transmute(pcbread),
                    )
                }
                pub unsafe fn Write(
                    &self,
                    pv: *const ::std::ffi::c_void,
                    cb: u32,
                    pcbwritten: *mut u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(pv),
                        ::std::mem::transmute(cb),
                        ::std::mem::transmute(pcbwritten),
                    )
                }
                pub unsafe fn SetSize(&self, libnewsize: u64) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(libnewsize),
                    )
                }
                pub unsafe fn CopyTo<'a>(
                    &self,
                    pstm: impl ::windows::IntoParam<'a, IStream>,
                    cb: u64,
                    pcbread: *mut u64,
                    pcbwritten: *mut u64,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        pstm.into_param().abi(),
                        ::std::mem::transmute(cb),
                        ::std::mem::transmute(pcbread),
                        ::std::mem::transmute(pcbwritten),
                    )
                }
                pub unsafe fn Commit(&self, grfcommitflags: u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(grfcommitflags),
                    )
                }
                pub unsafe fn Revert(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(::windows::Abi::abi(self))
                }
                pub unsafe fn LockRegion(
                    &self,
                    liboffset: u64,
                    cb: u64,
                    dwlocktype: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(liboffset),
                        ::std::mem::transmute(cb),
                        ::std::mem::transmute(dwlocktype),
                    )
                }
                pub unsafe fn UnlockRegion(
                    &self,
                    liboffset: u64,
                    cb: u64,
                    dwlocktype: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).11)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(liboffset),
                        ::std::mem::transmute(cb),
                        ::std::mem::transmute(dwlocktype),
                    )
                }
                pub unsafe fn Clone(
                    &self,
                    ppstm: *mut ::std::option::Option<IStream>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).13)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(ppstm),
                    )
                }
            }
            impl ::std::convert::From<IStream> for ::windows::IUnknown {
                fn from(value: IStream) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IStream> for ::windows::IUnknown {
                fn from(value: &IStream) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IStream {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IStream {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            impl ::std::convert::From<IStream> for ISequentialStream {
                fn from(value: IStream) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IStream> for ISequentialStream {
                fn from(value: &IStream) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ISequentialStream> for IStream {
                fn into_param(self) -> ::windows::Param<'a, ISequentialStream> {
                    ::windows::Param::Owned(::std::convert::Into::<ISequentialStream>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ISequentialStream> for &'a IStream {
                fn into_param(self) -> ::windows::Param<'a, ISequentialStream> {
                    ::windows::Param::Owned(::std::convert::Into::<ISequentialStream>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IStream_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pv: *mut ::std::ffi::c_void,
                    cb: u32,
                    pcbread: *mut u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pv: *const ::std::ffi::c_void,
                    cb: u32,
                    pcbwritten: *mut u32,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(),
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    libnewsize: u64,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pstm: ::windows::RawPtr,
                    cb: u64,
                    pcbread: *mut u64,
                    pcbwritten: *mut u64,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    grfcommitflags: u32,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    liboffset: u64,
                    cb: u64,
                    dwlocktype: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    liboffset: u64,
                    cb: u64,
                    dwlocktype: u32,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(),
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    ppstm: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
            );
            #[repr(transparent)]
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: clone :: Clone,
                :: std :: fmt :: Debug,
            )]
            pub struct IStorage(::windows::IUnknown);
            impl IStorage {}
            unsafe impl ::windows::Interface for IStorage {
                type Vtable = IStorage_abi;
                const IID: ::windows::Guid =
                    ::windows::Guid::from_values(11, 0, 0, [192, 0, 0, 0, 0, 0, 0, 70]);
            }
            impl IStorage {
                pub unsafe fn CreateStream<'a>(
                    &self,
                    pwcsname: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                    grfmode: u32,
                    reserved1: u32,
                    reserved2: u32,
                    ppstm: *mut ::std::option::Option<IStream>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).3)(
                        ::windows::Abi::abi(self),
                        pwcsname.into_param().abi(),
                        ::std::mem::transmute(grfmode),
                        ::std::mem::transmute(reserved1),
                        ::std::mem::transmute(reserved2),
                        ::std::mem::transmute(ppstm),
                    )
                }
                pub unsafe fn OpenStream<'a>(
                    &self,
                    pwcsname: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                    reserved1: *mut ::std::ffi::c_void,
                    grfmode: u32,
                    reserved2: u32,
                    ppstm: *mut ::std::option::Option<IStream>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).4)(
                        ::windows::Abi::abi(self),
                        pwcsname.into_param().abi(),
                        ::std::mem::transmute(reserved1),
                        ::std::mem::transmute(grfmode),
                        ::std::mem::transmute(reserved2),
                        ::std::mem::transmute(ppstm),
                    )
                }
                pub unsafe fn CreateStorage<'a>(
                    &self,
                    pwcsname: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                    grfmode: u32,
                    reserved1: u32,
                    reserved2: u32,
                    ppstg: *mut ::std::option::Option<IStorage>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).5)(
                        ::windows::Abi::abi(self),
                        pwcsname.into_param().abi(),
                        ::std::mem::transmute(grfmode),
                        ::std::mem::transmute(reserved1),
                        ::std::mem::transmute(reserved2),
                        ::std::mem::transmute(ppstg),
                    )
                }
                pub unsafe fn OpenStorage<'a>(
                    &self,
                    pwcsname: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                    pstgpriority: impl ::windows::IntoParam<'a, IStorage>,
                    grfmode: u32,
                    snbexclude: *mut *mut u16,
                    reserved: u32,
                    ppstg: *mut ::std::option::Option<IStorage>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).6)(
                        ::windows::Abi::abi(self),
                        pwcsname.into_param().abi(),
                        pstgpriority.into_param().abi(),
                        ::std::mem::transmute(grfmode),
                        ::std::mem::transmute(snbexclude),
                        ::std::mem::transmute(reserved),
                        ::std::mem::transmute(ppstg),
                    )
                }
                pub unsafe fn CopyTo<'a>(
                    &self,
                    ciidexclude: u32,
                    rgiidexclude: *const ::windows::Guid,
                    snbexclude: *mut *mut u16,
                    pstgdest: impl ::windows::IntoParam<'a, IStorage>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).7)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(ciidexclude),
                        ::std::mem::transmute(rgiidexclude),
                        ::std::mem::transmute(snbexclude),
                        pstgdest.into_param().abi(),
                    )
                }
                pub unsafe fn MoveElementTo<'a>(
                    &self,
                    pwcsname: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                    pstgdest: impl ::windows::IntoParam<'a, IStorage>,
                    pwcsnewname: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                    grfflags: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).8)(
                        ::windows::Abi::abi(self),
                        pwcsname.into_param().abi(),
                        pstgdest.into_param().abi(),
                        pwcsnewname.into_param().abi(),
                        ::std::mem::transmute(grfflags),
                    )
                }
                pub unsafe fn Commit(&self, grfcommitflags: u32) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).9)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(grfcommitflags),
                    )
                }
                pub unsafe fn Revert(&self) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).10)(::windows::Abi::abi(self))
                }
                pub unsafe fn DestroyElement<'a>(
                    &self,
                    pwcsname: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).12)(
                        ::windows::Abi::abi(self),
                        pwcsname.into_param().abi(),
                    )
                }
                pub unsafe fn RenameElement<'a>(
                    &self,
                    pwcsoldname: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                    pwcsnewname: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).13)(
                        ::windows::Abi::abi(self),
                        pwcsoldname.into_param().abi(),
                        pwcsnewname.into_param().abi(),
                    )
                }
                pub unsafe fn SetElementTimes<'a>(
                    &self,
                    pwcsname: impl ::windows::IntoParam<'a, super::SystemServices::PWSTR>,
                    pctime: *const super::WindowsProgramming::FILETIME,
                    patime: *const super::WindowsProgramming::FILETIME,
                    pmtime: *const super::WindowsProgramming::FILETIME,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).14)(
                        ::windows::Abi::abi(self),
                        pwcsname.into_param().abi(),
                        ::std::mem::transmute(pctime),
                        ::std::mem::transmute(patime),
                        ::std::mem::transmute(pmtime),
                    )
                }
                pub unsafe fn SetClass(&self, clsid: *const ::windows::Guid) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).15)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(clsid),
                    )
                }
                pub unsafe fn SetStateBits(
                    &self,
                    grfstatebits: u32,
                    grfmask: u32,
                ) -> ::windows::HRESULT {
                    (::windows::Interface::vtable(self).16)(
                        ::windows::Abi::abi(self),
                        ::std::mem::transmute(grfstatebits),
                        ::std::mem::transmute(grfmask),
                    )
                }
            }
            impl ::std::convert::From<IStorage> for ::windows::IUnknown {
                fn from(value: IStorage) -> Self {
                    unsafe { ::std::mem::transmute(value) }
                }
            }
            impl ::std::convert::From<&IStorage> for ::windows::IUnknown {
                fn from(value: &IStorage) -> Self {
                    ::std::convert::From::from(::std::clone::Clone::clone(value))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for IStorage {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(self))
                }
            }
            impl<'a> ::windows::IntoParam<'a, ::windows::IUnknown> for &'a IStorage {
                fn into_param(self) -> ::windows::Param<'a, ::windows::IUnknown> {
                    ::windows::Param::Owned(::std::convert::Into::<::windows::IUnknown>::into(
                        ::std::clone::Clone::clone(self),
                    ))
                }
            }
            #[repr(C)]
            #[doc(hidden)]
            pub struct IStorage_abi(
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    iid: &::windows::Guid,
                    interface: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> u32,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pwcsname: super::SystemServices::PWSTR,
                    grfmode: u32,
                    reserved1: u32,
                    reserved2: u32,
                    ppstm: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pwcsname: super::SystemServices::PWSTR,
                    reserved1: *mut ::std::ffi::c_void,
                    grfmode: u32,
                    reserved2: u32,
                    ppstm: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pwcsname: super::SystemServices::PWSTR,
                    grfmode: u32,
                    reserved1: u32,
                    reserved2: u32,
                    ppstg: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pwcsname: super::SystemServices::PWSTR,
                    pstgpriority: ::windows::RawPtr,
                    grfmode: u32,
                    snbexclude: *mut *mut u16,
                    reserved: u32,
                    ppstg: *mut ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    ciidexclude: u32,
                    rgiidexclude: *const ::windows::Guid,
                    snbexclude: *mut *mut u16,
                    pstgdest: ::windows::RawPtr,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pwcsname: super::SystemServices::PWSTR,
                    pstgdest: ::windows::RawPtr,
                    pwcsnewname: super::SystemServices::PWSTR,
                    grfflags: u32,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    grfcommitflags: u32,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(this: ::windows::RawPtr) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(),
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pwcsname: super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pwcsoldname: super::SystemServices::PWSTR,
                    pwcsnewname: super::SystemServices::PWSTR,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    pwcsname: super::SystemServices::PWSTR,
                    pctime: *const super::WindowsProgramming::FILETIME,
                    patime: *const super::WindowsProgramming::FILETIME,
                    pmtime: *const super::WindowsProgramming::FILETIME,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    clsid: *const ::windows::Guid,
                ) -> ::windows::HRESULT,
                pub  unsafe extern "system" fn(
                    this: ::windows::RawPtr,
                    grfstatebits: u32,
                    grfmask: u32,
                ) -> ::windows::HRESULT,
                pub unsafe extern "system" fn(),
            );
            #[repr(C)]
            #[derive(:: std :: clone :: Clone)]
            pub struct VERSIONEDSTREAM {
                pub guidVersion: ::windows::Guid,
                pub pStream: ::std::option::Option<IStream>,
            }
            impl VERSIONEDSTREAM {}
            impl ::std::default::Default for VERSIONEDSTREAM {
                fn default() -> Self {
                    Self {
                        guidVersion: ::std::default::Default::default(),
                        pStream: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for VERSIONEDSTREAM {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("VERSIONEDSTREAM")
                        .field("guidVersion", &format_args!("{:?}", self.guidVersion))
                        .field("pStream", &format_args!("{:?}", self.pStream))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for VERSIONEDSTREAM {
                fn eq(&self, other: &Self) -> bool {
                    self.guidVersion == other.guidVersion && self.pStream == other.pStream
                }
            }
            impl ::std::cmp::Eq for VERSIONEDSTREAM {}
            #[repr(C)]
            #[doc(hidden)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct VERSIONEDSTREAM_abi {
                pub guidVersion: ::windows::Guid,
                pub pStream: ::windows::RawPtr,
            }
            unsafe impl ::windows::Abi for VERSIONEDSTREAM {
                type Abi = VERSIONEDSTREAM_abi;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct CAC {
                pub cElems: u32,
                pub pElems: *mut i8,
            }
            impl CAC {}
            impl ::std::default::Default for CAC {
                fn default() -> Self {
                    Self {
                        cElems: 0,
                        pElems: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for CAC {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("CAC")
                        .field("cElems", &format_args!("{:?}", self.cElems))
                        .field("pElems", &format_args!("{:?}", self.pElems))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for CAC {
                fn eq(&self, other: &Self) -> bool {
                    self.cElems == other.cElems && self.pElems == other.pElems
                }
            }
            impl ::std::cmp::Eq for CAC {}
            unsafe impl ::windows::Abi for CAC {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct CAUB {
                pub cElems: u32,
                pub pElems: *mut u8,
            }
            impl CAUB {}
            impl ::std::default::Default for CAUB {
                fn default() -> Self {
                    Self {
                        cElems: 0,
                        pElems: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for CAUB {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("CAUB")
                        .field("cElems", &format_args!("{:?}", self.cElems))
                        .field("pElems", &format_args!("{:?}", self.pElems))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for CAUB {
                fn eq(&self, other: &Self) -> bool {
                    self.cElems == other.cElems && self.pElems == other.pElems
                }
            }
            impl ::std::cmp::Eq for CAUB {}
            unsafe impl ::windows::Abi for CAUB {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct CAI {
                pub cElems: u32,
                pub pElems: *mut i16,
            }
            impl CAI {}
            impl ::std::default::Default for CAI {
                fn default() -> Self {
                    Self {
                        cElems: 0,
                        pElems: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for CAI {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("CAI")
                        .field("cElems", &format_args!("{:?}", self.cElems))
                        .field("pElems", &format_args!("{:?}", self.pElems))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for CAI {
                fn eq(&self, other: &Self) -> bool {
                    self.cElems == other.cElems && self.pElems == other.pElems
                }
            }
            impl ::std::cmp::Eq for CAI {}
            unsafe impl ::windows::Abi for CAI {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct CAUI {
                pub cElems: u32,
                pub pElems: *mut u16,
            }
            impl CAUI {}
            impl ::std::default::Default for CAUI {
                fn default() -> Self {
                    Self {
                        cElems: 0,
                        pElems: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for CAUI {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("CAUI")
                        .field("cElems", &format_args!("{:?}", self.cElems))
                        .field("pElems", &format_args!("{:?}", self.pElems))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for CAUI {
                fn eq(&self, other: &Self) -> bool {
                    self.cElems == other.cElems && self.pElems == other.pElems
                }
            }
            impl ::std::cmp::Eq for CAUI {}
            unsafe impl ::windows::Abi for CAUI {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct CAL {
                pub cElems: u32,
                pub pElems: *mut i32,
            }
            impl CAL {}
            impl ::std::default::Default for CAL {
                fn default() -> Self {
                    Self {
                        cElems: 0,
                        pElems: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for CAL {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("CAL")
                        .field("cElems", &format_args!("{:?}", self.cElems))
                        .field("pElems", &format_args!("{:?}", self.pElems))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for CAL {
                fn eq(&self, other: &Self) -> bool {
                    self.cElems == other.cElems && self.pElems == other.pElems
                }
            }
            impl ::std::cmp::Eq for CAL {}
            unsafe impl ::windows::Abi for CAL {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct CAUL {
                pub cElems: u32,
                pub pElems: *mut u32,
            }
            impl CAUL {}
            impl ::std::default::Default for CAUL {
                fn default() -> Self {
                    Self {
                        cElems: 0,
                        pElems: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for CAUL {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("CAUL")
                        .field("cElems", &format_args!("{:?}", self.cElems))
                        .field("pElems", &format_args!("{:?}", self.pElems))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for CAUL {
                fn eq(&self, other: &Self) -> bool {
                    self.cElems == other.cElems && self.pElems == other.pElems
                }
            }
            impl ::std::cmp::Eq for CAUL {}
            unsafe impl ::windows::Abi for CAUL {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct CAH {
                pub cElems: u32,
                pub pElems: *mut i64,
            }
            impl CAH {}
            impl ::std::default::Default for CAH {
                fn default() -> Self {
                    Self {
                        cElems: 0,
                        pElems: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for CAH {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("CAH")
                        .field("cElems", &format_args!("{:?}", self.cElems))
                        .field("pElems", &format_args!("{:?}", self.pElems))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for CAH {
                fn eq(&self, other: &Self) -> bool {
                    self.cElems == other.cElems && self.pElems == other.pElems
                }
            }
            impl ::std::cmp::Eq for CAH {}
            unsafe impl ::windows::Abi for CAH {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct CAUH {
                pub cElems: u32,
                pub pElems: *mut u64,
            }
            impl CAUH {}
            impl ::std::default::Default for CAUH {
                fn default() -> Self {
                    Self {
                        cElems: 0,
                        pElems: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for CAUH {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("CAUH")
                        .field("cElems", &format_args!("{:?}", self.cElems))
                        .field("pElems", &format_args!("{:?}", self.pElems))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for CAUH {
                fn eq(&self, other: &Self) -> bool {
                    self.cElems == other.cElems && self.pElems == other.pElems
                }
            }
            impl ::std::cmp::Eq for CAUH {}
            unsafe impl ::windows::Abi for CAUH {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct CAFLT {
                pub cElems: u32,
                pub pElems: *mut f32,
            }
            impl CAFLT {}
            impl ::std::default::Default for CAFLT {
                fn default() -> Self {
                    Self {
                        cElems: 0,
                        pElems: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for CAFLT {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("CAFLT")
                        .field("cElems", &format_args!("{:?}", self.cElems))
                        .field("pElems", &format_args!("{:?}", self.pElems))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for CAFLT {
                fn eq(&self, other: &Self) -> bool {
                    self.cElems == other.cElems && self.pElems == other.pElems
                }
            }
            impl ::std::cmp::Eq for CAFLT {}
            unsafe impl ::windows::Abi for CAFLT {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct CADBL {
                pub cElems: u32,
                pub pElems: *mut f64,
            }
            impl CADBL {}
            impl ::std::default::Default for CADBL {
                fn default() -> Self {
                    Self {
                        cElems: 0,
                        pElems: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for CADBL {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("CADBL")
                        .field("cElems", &format_args!("{:?}", self.cElems))
                        .field("pElems", &format_args!("{:?}", self.pElems))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for CADBL {
                fn eq(&self, other: &Self) -> bool {
                    self.cElems == other.cElems && self.pElems == other.pElems
                }
            }
            impl ::std::cmp::Eq for CADBL {}
            unsafe impl ::windows::Abi for CADBL {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct CABOOL {
                pub cElems: u32,
                pub pElems: *mut i16,
            }
            impl CABOOL {}
            impl ::std::default::Default for CABOOL {
                fn default() -> Self {
                    Self {
                        cElems: 0,
                        pElems: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for CABOOL {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("CABOOL")
                        .field("cElems", &format_args!("{:?}", self.cElems))
                        .field("pElems", &format_args!("{:?}", self.pElems))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for CABOOL {
                fn eq(&self, other: &Self) -> bool {
                    self.cElems == other.cElems && self.pElems == other.pElems
                }
            }
            impl ::std::cmp::Eq for CABOOL {}
            unsafe impl ::windows::Abi for CABOOL {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct CASCODE {
                pub cElems: u32,
                pub pElems: *mut i32,
            }
            impl CASCODE {}
            impl ::std::default::Default for CASCODE {
                fn default() -> Self {
                    Self {
                        cElems: 0,
                        pElems: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for CASCODE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("CASCODE")
                        .field("cElems", &format_args!("{:?}", self.cElems))
                        .field("pElems", &format_args!("{:?}", self.pElems))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for CASCODE {
                fn eq(&self, other: &Self) -> bool {
                    self.cElems == other.cElems && self.pElems == other.pElems
                }
            }
            impl ::std::cmp::Eq for CASCODE {}
            unsafe impl ::windows::Abi for CASCODE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct CACY {
                pub cElems: u32,
                pub pElems: *mut super::SystemServices::CY,
            }
            impl CACY {}
            impl ::std::default::Default for CACY {
                fn default() -> Self {
                    Self {
                        cElems: 0,
                        pElems: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for CACY {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("CACY")
                        .field("cElems", &format_args!("{:?}", self.cElems))
                        .field("pElems", &format_args!("{:?}", self.pElems))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for CACY {
                fn eq(&self, other: &Self) -> bool {
                    self.cElems == other.cElems && self.pElems == other.pElems
                }
            }
            impl ::std::cmp::Eq for CACY {}
            unsafe impl ::windows::Abi for CACY {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct CADATE {
                pub cElems: u32,
                pub pElems: *mut f64,
            }
            impl CADATE {}
            impl ::std::default::Default for CADATE {
                fn default() -> Self {
                    Self {
                        cElems: 0,
                        pElems: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for CADATE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("CADATE")
                        .field("cElems", &format_args!("{:?}", self.cElems))
                        .field("pElems", &format_args!("{:?}", self.pElems))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for CADATE {
                fn eq(&self, other: &Self) -> bool {
                    self.cElems == other.cElems && self.pElems == other.pElems
                }
            }
            impl ::std::cmp::Eq for CADATE {}
            unsafe impl ::windows::Abi for CADATE {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct CAFILETIME {
                pub cElems: u32,
                pub pElems: *mut super::WindowsProgramming::FILETIME,
            }
            impl CAFILETIME {}
            impl ::std::default::Default for CAFILETIME {
                fn default() -> Self {
                    Self {
                        cElems: 0,
                        pElems: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for CAFILETIME {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("CAFILETIME")
                        .field("cElems", &format_args!("{:?}", self.cElems))
                        .field("pElems", &format_args!("{:?}", self.pElems))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for CAFILETIME {
                fn eq(&self, other: &Self) -> bool {
                    self.cElems == other.cElems && self.pElems == other.pElems
                }
            }
            impl ::std::cmp::Eq for CAFILETIME {}
            unsafe impl ::windows::Abi for CAFILETIME {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct CACLSID {
                pub cElems: u32,
                pub pElems: *mut ::windows::Guid,
            }
            impl CACLSID {}
            impl ::std::default::Default for CACLSID {
                fn default() -> Self {
                    Self {
                        cElems: 0,
                        pElems: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for CACLSID {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("CACLSID")
                        .field("cElems", &format_args!("{:?}", self.cElems))
                        .field("pElems", &format_args!("{:?}", self.pElems))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for CACLSID {
                fn eq(&self, other: &Self) -> bool {
                    self.cElems == other.cElems && self.pElems == other.pElems
                }
            }
            impl ::std::cmp::Eq for CACLSID {}
            unsafe impl ::windows::Abi for CACLSID {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct CACLIPDATA {
                pub cElems: u32,
                pub pElems: *mut super::SystemServices::CLIPDATA,
            }
            impl CACLIPDATA {}
            impl ::std::default::Default for CACLIPDATA {
                fn default() -> Self {
                    Self {
                        cElems: 0,
                        pElems: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for CACLIPDATA {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("CACLIPDATA")
                        .field("cElems", &format_args!("{:?}", self.cElems))
                        .field("pElems", &format_args!("{:?}", self.pElems))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for CACLIPDATA {
                fn eq(&self, other: &Self) -> bool {
                    self.cElems == other.cElems && self.pElems == other.pElems
                }
            }
            impl ::std::cmp::Eq for CACLIPDATA {}
            unsafe impl ::windows::Abi for CACLIPDATA {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct CABSTR {
                pub cElems: u32,
                pub pElems: *mut super::Automation::BSTR,
            }
            impl CABSTR {}
            impl ::std::default::Default for CABSTR {
                fn default() -> Self {
                    Self {
                        cElems: 0,
                        pElems: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for CABSTR {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("CABSTR")
                        .field("cElems", &format_args!("{:?}", self.cElems))
                        .field("pElems", &format_args!("{:?}", self.pElems))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for CABSTR {
                fn eq(&self, other: &Self) -> bool {
                    self.cElems == other.cElems && self.pElems == other.pElems
                }
            }
            impl ::std::cmp::Eq for CABSTR {}
            unsafe impl ::windows::Abi for CABSTR {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct CABSTRBLOB {
                pub cElems: u32,
                pub pElems: *mut super::SystemServices::BSTRBLOB,
            }
            impl CABSTRBLOB {}
            impl ::std::default::Default for CABSTRBLOB {
                fn default() -> Self {
                    Self {
                        cElems: 0,
                        pElems: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for CABSTRBLOB {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("CABSTRBLOB")
                        .field("cElems", &format_args!("{:?}", self.cElems))
                        .field("pElems", &format_args!("{:?}", self.pElems))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for CABSTRBLOB {
                fn eq(&self, other: &Self) -> bool {
                    self.cElems == other.cElems && self.pElems == other.pElems
                }
            }
            impl ::std::cmp::Eq for CABSTRBLOB {}
            unsafe impl ::windows::Abi for CABSTRBLOB {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct CALPSTR {
                pub cElems: u32,
                pub pElems: *mut super::SystemServices::PSTR,
            }
            impl CALPSTR {}
            impl ::std::default::Default for CALPSTR {
                fn default() -> Self {
                    Self {
                        cElems: 0,
                        pElems: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for CALPSTR {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("CALPSTR")
                        .field("cElems", &format_args!("{:?}", self.cElems))
                        .field("pElems", &format_args!("{:?}", self.pElems))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for CALPSTR {
                fn eq(&self, other: &Self) -> bool {
                    self.cElems == other.cElems && self.pElems == other.pElems
                }
            }
            impl ::std::cmp::Eq for CALPSTR {}
            unsafe impl ::windows::Abi for CALPSTR {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct CALPWSTR {
                pub cElems: u32,
                pub pElems: *mut super::SystemServices::PWSTR,
            }
            impl CALPWSTR {}
            impl ::std::default::Default for CALPWSTR {
                fn default() -> Self {
                    Self {
                        cElems: 0,
                        pElems: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for CALPWSTR {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("CALPWSTR")
                        .field("cElems", &format_args!("{:?}", self.cElems))
                        .field("pElems", &format_args!("{:?}", self.pElems))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for CALPWSTR {
                fn eq(&self, other: &Self) -> bool {
                    self.cElems == other.cElems && self.pElems == other.pElems
                }
            }
            impl ::std::cmp::Eq for CALPWSTR {}
            unsafe impl ::windows::Abi for CALPWSTR {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct CAPROPVARIANT {
                pub cElems: u32,
                pub pElems: *mut PROPVARIANT,
            }
            impl CAPROPVARIANT {}
            impl ::std::default::Default for CAPROPVARIANT {
                fn default() -> Self {
                    Self {
                        cElems: 0,
                        pElems: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for CAPROPVARIANT {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("CAPROPVARIANT")
                        .field("cElems", &format_args!("{:?}", self.cElems))
                        .field("pElems", &format_args!("{:?}", self.pElems))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for CAPROPVARIANT {
                fn eq(&self, other: &Self) -> bool {
                    self.cElems == other.cElems && self.pElems == other.pElems
                }
            }
            impl ::std::cmp::Eq for CAPROPVARIANT {}
            unsafe impl ::windows::Abi for CAPROPVARIANT {
                type Abi = Self;
            }
            #[repr(C)]
            pub struct PROPVARIANT {
                pub Anonymous: PROPVARIANT_0,
            }
            impl PROPVARIANT {}
            #[repr(C)]
            #[doc(hidden)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct PROPVARIANT_abi {
                pub Anonymous: PROPVARIANT_0_abi,
            }
            unsafe impl ::windows::Abi for PROPVARIANT {
                type Abi = PROPVARIANT_abi;
            }
            #[repr(C)]
            pub union PROPVARIANT_0 {
                pub Anonymous: PROPVARIANT_0_0_abi,
                pub decVal: super::SystemServices::DECIMAL,
            }
            impl PROPVARIANT_0 {}
            #[repr(C)]
            #[doc(hidden)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union PROPVARIANT_0_abi {
                pub Anonymous: PROPVARIANT_0_0_abi,
                pub decVal: super::SystemServices::DECIMAL,
            }
            unsafe impl ::windows::Abi for PROPVARIANT_0 {
                type Abi = PROPVARIANT_0_abi;
            }
            #[repr(C)]
            pub struct PROPVARIANT_0_0 {
                pub vt: u16,
                pub wReserved1: u16,
                pub wReserved2: u16,
                pub wReserved3: u16,
                pub Anonymous: PROPVARIANT_0_0_0,
            }
            impl PROPVARIANT_0_0 {}
            #[repr(C)]
            #[doc(hidden)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct PROPVARIANT_0_0_abi {
                pub vt: u16,
                pub wReserved1: u16,
                pub wReserved2: u16,
                pub wReserved3: u16,
                pub Anonymous: PROPVARIANT_0_0_0_abi,
            }
            unsafe impl ::windows::Abi for PROPVARIANT_0_0 {
                type Abi = PROPVARIANT_0_0_abi;
            }
            #[repr(C)]
            pub union PROPVARIANT_0_0_0 {
                pub cVal: i8,
                pub bVal: u8,
                pub iVal: i16,
                pub uiVal: u16,
                pub lVal: i32,
                pub ulVal: u32,
                pub intVal: i32,
                pub uintVal: u32,
                pub hVal: i64,
                pub uhVal: u64,
                pub fltVal: f32,
                pub dblVal: f64,
                pub boolVal: i16,
                pub __OBSOLETE__VARIANT_BOOL: i16,
                pub scode: i32,
                pub cyVal: super::SystemServices::CY,
                pub date: f64,
                pub filetime: super::WindowsProgramming::FILETIME,
                pub puuid: *mut ::windows::Guid,
                pub pclipdata: *mut super::SystemServices::CLIPDATA,
                pub bstrVal: super::Automation::BSTR_abi,
                pub bstrblobVal: super::SystemServices::BSTRBLOB,
                pub blob: super::WinSock::BLOB,
                pub pszVal: super::SystemServices::PSTR,
                pub pwszVal: super::SystemServices::PWSTR,
                pub punkVal: ::windows::RawPtr,
                pub pdispVal: ::windows::RawPtr,
                pub pStream: ::windows::RawPtr,
                pub pStorage: ::windows::RawPtr,
                pub pVersionedStream: *mut VERSIONEDSTREAM_abi,
                pub parray: *mut super::Automation::SAFEARRAY,
                pub cac: CAC,
                pub caub: CAUB,
                pub cai: CAI,
                pub caui: CAUI,
                pub cal: CAL,
                pub caul: CAUL,
                pub cah: CAH,
                pub cauh: CAUH,
                pub caflt: CAFLT,
                pub cadbl: CADBL,
                pub cabool: CABOOL,
                pub cascode: CASCODE,
                pub cacy: CACY,
                pub cadate: CADATE,
                pub cafiletime: CAFILETIME,
                pub cauuid: CACLSID,
                pub caclipdata: CACLIPDATA,
                pub cabstr: CABSTR,
                pub cabstrblob: CABSTRBLOB,
                pub calpstr: CALPSTR,
                pub calpwstr: CALPWSTR,
                pub capropvar: CAPROPVARIANT,
                pub pcVal: *mut i8,
                pub pbVal: *mut u8,
                pub piVal: *mut i16,
                pub puiVal: *mut u16,
                pub plVal: *mut i32,
                pub pulVal: *mut u32,
                pub pintVal: *mut i32,
                pub puintVal: *mut u32,
                pub pfltVal: *mut f32,
                pub pdblVal: *mut f64,
                pub pboolVal: *mut i16,
                pub pdecVal: *mut super::SystemServices::DECIMAL,
                pub pscode: *mut i32,
                pub pcyVal: *mut super::SystemServices::CY,
                pub pdate: *mut f64,
                pub pbstrVal: *mut super::Automation::BSTR_abi,
                pub ppunkVal: *mut ::windows::RawPtr,
                pub ppdispVal: *mut ::windows::RawPtr,
                pub pparray: *mut *mut super::Automation::SAFEARRAY,
                pub pvarVal: *mut PROPVARIANT_abi,
            }
            impl PROPVARIANT_0_0_0 {}
            #[repr(C)]
            #[doc(hidden)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union PROPVARIANT_0_0_0_abi {
                pub cVal: i8,
                pub bVal: u8,
                pub iVal: i16,
                pub uiVal: u16,
                pub lVal: i32,
                pub ulVal: u32,
                pub intVal: i32,
                pub uintVal: u32,
                pub hVal: i64,
                pub uhVal: u64,
                pub fltVal: f32,
                pub dblVal: f64,
                pub boolVal: i16,
                pub __OBSOLETE__VARIANT_BOOL: i16,
                pub scode: i32,
                pub cyVal: super::SystemServices::CY,
                pub date: f64,
                pub filetime: super::WindowsProgramming::FILETIME,
                pub puuid: *mut ::windows::Guid,
                pub pclipdata: *mut super::SystemServices::CLIPDATA,
                pub bstrVal: super::Automation::BSTR_abi,
                pub bstrblobVal: super::SystemServices::BSTRBLOB,
                pub blob: super::WinSock::BLOB,
                pub pszVal: super::SystemServices::PSTR,
                pub pwszVal: super::SystemServices::PWSTR,
                pub punkVal: ::windows::RawPtr,
                pub pdispVal: ::windows::RawPtr,
                pub pStream: ::windows::RawPtr,
                pub pStorage: ::windows::RawPtr,
                pub pVersionedStream: *mut VERSIONEDSTREAM_abi,
                pub parray: *mut super::Automation::SAFEARRAY,
                pub cac: CAC,
                pub caub: CAUB,
                pub cai: CAI,
                pub caui: CAUI,
                pub cal: CAL,
                pub caul: CAUL,
                pub cah: CAH,
                pub cauh: CAUH,
                pub caflt: CAFLT,
                pub cadbl: CADBL,
                pub cabool: CABOOL,
                pub cascode: CASCODE,
                pub cacy: CACY,
                pub cadate: CADATE,
                pub cafiletime: CAFILETIME,
                pub cauuid: CACLSID,
                pub caclipdata: CACLIPDATA,
                pub cabstr: CABSTR,
                pub cabstrblob: CABSTRBLOB,
                pub calpstr: CALPSTR,
                pub calpwstr: CALPWSTR,
                pub capropvar: CAPROPVARIANT,
                pub pcVal: *mut i8,
                pub pbVal: *mut u8,
                pub piVal: *mut i16,
                pub puiVal: *mut u16,
                pub plVal: *mut i32,
                pub pulVal: *mut u32,
                pub pintVal: *mut i32,
                pub puintVal: *mut u32,
                pub pfltVal: *mut f32,
                pub pdblVal: *mut f64,
                pub pboolVal: *mut i16,
                pub pdecVal: *mut super::SystemServices::DECIMAL,
                pub pscode: *mut i32,
                pub pcyVal: *mut super::SystemServices::CY,
                pub pdate: *mut f64,
                pub pbstrVal: *mut super::Automation::BSTR_abi,
                pub ppunkVal: *mut ::windows::RawPtr,
                pub ppdispVal: *mut ::windows::RawPtr,
                pub pparray: *mut *mut super::Automation::SAFEARRAY,
                pub pvarVal: *mut PROPVARIANT_abi,
            }
            unsafe impl ::windows::Abi for PROPVARIANT_0_0_0 {
                type Abi = PROPVARIANT_0_0_0_abi;
            }
        }
        #[allow(
            unused_variables,
            non_upper_case_globals,
            non_snake_case,
            unused_unsafe,
            non_camel_case_types,
            dead_code,
            clippy::all
        )]
        pub mod SystemServices {
            #[repr(C)]
            #[derive(
                :: std :: clone :: Clone,
                :: std :: marker :: Copy,
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: default :: Default,
            )]
            pub struct BOOL(pub i32);
            impl BOOL {
                #[inline]
                pub fn as_bool(self) -> bool {
                    !(self.0 == 0)
                }
                #[inline]
                pub fn ok(self) -> ::windows::Result<()> {
                    if self.as_bool() {
                        Ok(())
                    } else {
                        Err(::windows::HRESULT::from_thread().into())
                    }
                }
                #[inline]
                pub fn unwrap(self) {
                    self.ok().unwrap();
                }
                #[inline]
                pub fn expect(self, msg: &str) {
                    self.ok().expect(msg);
                }
            }
            impl ::std::fmt::Debug for BOOL {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    let msg = if self.as_bool() { "true" } else { "false" };
                    fmt.write_str(msg)
                }
            }
            unsafe impl ::windows::Abi for BOOL {
                type Abi = Self;
            }
            impl ::std::convert::From<BOOL> for bool {
                fn from(value: BOOL) -> Self {
                    value.as_bool()
                }
            }
            impl ::std::convert::From<&BOOL> for bool {
                fn from(value: &BOOL) -> Self {
                    value.as_bool()
                }
            }
            impl ::std::convert::From<bool> for BOOL {
                fn from(value: bool) -> Self {
                    if value {
                        BOOL(1)
                    } else {
                        BOOL(0)
                    }
                }
            }
            impl ::std::convert::From<&bool> for BOOL {
                fn from(value: &bool) -> Self {
                    (*value).into()
                }
            }
            impl ::std::cmp::PartialEq<bool> for BOOL {
                fn eq(&self, other: &bool) -> bool {
                    self.as_bool() == *other
                }
            }
            impl ::std::cmp::PartialEq<BOOL> for bool {
                fn eq(&self, other: &BOOL) -> bool {
                    *self == other.as_bool()
                }
            }
            impl std::ops::Not for BOOL {
                type Output = Self;
                fn not(self) -> Self::Output {
                    if self.as_bool() {
                        BOOL(0)
                    } else {
                        BOOL(1)
                    }
                }
            }
            impl<'a> ::windows::IntoParam<'a, BOOL> for bool {
                fn into_param(self) -> ::windows::Param<'a, BOOL> {
                    ::windows::Param::Owned(self.into())
                }
            }
            #[repr(C)]
            #[derive(
                :: std :: clone :: Clone,
                :: std :: marker :: Copy,
                :: std :: cmp :: Eq,
                :: std :: fmt :: Debug,
            )]
            pub struct PWSTR(pub *mut u16);
            impl PWSTR {
                pub const NULL: Self = Self(::std::ptr::null_mut());
                pub fn is_null(&self) -> bool {
                    self.0.is_null()
                }
            }
            impl ::std::default::Default for PWSTR {
                fn default() -> Self {
                    Self(::std::ptr::null_mut())
                }
            }
            impl ::std::cmp::PartialEq for PWSTR {
                fn eq(&self, other: &Self) -> bool {
                    self.0 == other.0
                }
            }
            unsafe impl ::windows::Abi for PWSTR {
                type Abi = Self;
                fn drop_param(param: &mut ::windows::Param<Self>) {
                    if let ::windows::Param::Boxed(value) = param {
                        if !value.0.is_null() {
                            unsafe {
                                ::std::boxed::Box::from_raw(value.0);
                            }
                        }
                    }
                }
            }
            impl<'a> ::windows::IntoParam<'a, PWSTR> for &'a str {
                fn into_param(self) -> ::windows::Param<'a, PWSTR> {
                    ::windows::Param::Boxed(PWSTR(::std::boxed::Box::<[u16]>::into_raw(
                        self.encode_utf16()
                            .chain(::std::iter::once(0))
                            .collect::<std::vec::Vec<u16>>()
                            .into_boxed_slice(),
                    ) as _))
                }
            }
            impl<'a> ::windows::IntoParam<'a, PWSTR> for String {
                fn into_param(self) -> ::windows::Param<'a, PWSTR> {
                    ::windows::Param::Boxed(PWSTR(::std::boxed::Box::<[u16]>::into_raw(
                        self.encode_utf16()
                            .chain(::std::iter::once(0))
                            .collect::<std::vec::Vec<u16>>()
                            .into_boxed_slice(),
                    ) as _))
                }
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct HANDLE(pub isize);
            impl HANDLE {}
            impl HANDLE {
                pub const NULL: Self = Self(0);
                pub fn is_null(&self) -> bool {
                    self == &Self::NULL
                }
            }
            impl ::std::default::Default for HANDLE {
                fn default() -> Self {
                    Self(0)
                }
            }
            impl ::std::fmt::Debug for HANDLE {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("HANDLE")
                        .field("Value", &format_args!("{:?}", self.0))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for HANDLE {
                fn eq(&self, other: &Self) -> bool {
                    self.0 == other.0
                }
            }
            impl ::std::cmp::Eq for HANDLE {}
            unsafe impl ::windows::Abi for HANDLE {
                type Abi = Self;
            }
            impl HANDLE {
                pub const INVALID: Self = Self(-1);
                pub fn is_invalid(&self) -> bool {
                    self.0 == -1
                }
            }
            #[repr(C)]
            #[derive(
                :: std :: clone :: Clone,
                :: std :: marker :: Copy,
                :: std :: cmp :: Eq,
                :: std :: fmt :: Debug,
            )]
            pub struct PSTR(pub *mut u8);
            impl PSTR {
                pub const NULL: Self = Self(::std::ptr::null_mut());
                pub fn is_null(&self) -> bool {
                    self.0.is_null()
                }
            }
            impl ::std::default::Default for PSTR {
                fn default() -> Self {
                    Self(::std::ptr::null_mut())
                }
            }
            impl ::std::cmp::PartialEq for PSTR {
                fn eq(&self, other: &Self) -> bool {
                    self.0 == other.0
                }
            }
            unsafe impl ::windows::Abi for PSTR {
                type Abi = Self;
                fn drop_param(param: &mut ::windows::Param<Self>) {
                    if let ::windows::Param::Boxed(value) = param {
                        if !value.0.is_null() {
                            unsafe {
                                ::std::boxed::Box::from_raw(value.0);
                            }
                        }
                    }
                }
            }
            impl<'a> ::windows::IntoParam<'a, PSTR> for &'a str {
                fn into_param(self) -> ::windows::Param<'a, PSTR> {
                    ::windows::Param::Boxed(PSTR(::std::boxed::Box::<[u8]>::into_raw(
                        self.bytes()
                            .chain(::std::iter::once(0))
                            .collect::<std::vec::Vec<u8>>()
                            .into_boxed_slice(),
                    ) as _))
                }
            }
            impl<'a> ::windows::IntoParam<'a, PSTR> for String {
                fn into_param(self) -> ::windows::Param<'a, PSTR> {
                    ::windows::Param::Boxed(PSTR(::std::boxed::Box::<[u8]>::into_raw(
                        self.bytes()
                            .chain(::std::iter::once(0))
                            .collect::<std::vec::Vec<u8>>()
                            .into_boxed_slice(),
                    ) as _))
                }
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union CY {
                pub Anonymous: CY_0,
                pub int64: i64,
            }
            impl CY {}
            unsafe impl ::windows::Abi for CY {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct CY_0 {
                pub Lo: u32,
                pub Hi: i32,
            }
            impl CY_0 {}
            impl ::std::default::Default for CY_0 {
                fn default() -> Self {
                    Self { Lo: 0, Hi: 0 }
                }
            }
            impl ::std::fmt::Debug for CY_0 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_Anonymous_e__Struct")
                        .field("Lo", &format_args!("{:?}", self.Lo))
                        .field("Hi", &format_args!("{:?}", self.Hi))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for CY_0 {
                fn eq(&self, other: &Self) -> bool {
                    self.Lo == other.Lo && self.Hi == other.Hi
                }
            }
            impl ::std::cmp::Eq for CY_0 {}
            unsafe impl ::windows::Abi for CY_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct CLIPDATA {
                pub cbSize: u32,
                pub ulClipFmt: i32,
                pub pClipData: *mut u8,
            }
            impl CLIPDATA {}
            impl ::std::default::Default for CLIPDATA {
                fn default() -> Self {
                    Self {
                        cbSize: 0,
                        ulClipFmt: 0,
                        pClipData: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for CLIPDATA {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("CLIPDATA")
                        .field("cbSize", &format_args!("{:?}", self.cbSize))
                        .field("ulClipFmt", &format_args!("{:?}", self.ulClipFmt))
                        .field("pClipData", &format_args!("{:?}", self.pClipData))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for CLIPDATA {
                fn eq(&self, other: &Self) -> bool {
                    self.cbSize == other.cbSize
                        && self.ulClipFmt == other.ulClipFmt
                        && self.pClipData == other.pClipData
                }
            }
            impl ::std::cmp::Eq for CLIPDATA {}
            unsafe impl ::windows::Abi for CLIPDATA {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct BSTRBLOB {
                pub cbSize: u32,
                pub pData: *mut u8,
            }
            impl BSTRBLOB {}
            impl ::std::default::Default for BSTRBLOB {
                fn default() -> Self {
                    Self {
                        cbSize: 0,
                        pData: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for BSTRBLOB {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("BSTRBLOB")
                        .field("cbSize", &format_args!("{:?}", self.cbSize))
                        .field("pData", &format_args!("{:?}", self.pData))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for BSTRBLOB {
                fn eq(&self, other: &Self) -> bool {
                    self.cbSize == other.cbSize && self.pData == other.pData
                }
            }
            impl ::std::cmp::Eq for BSTRBLOB {}
            unsafe impl ::windows::Abi for BSTRBLOB {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DECIMAL {
                pub wReserved: u16,
                pub Anonymous1: DECIMAL_0,
                pub Hi32: u32,
                pub Anonymous2: DECIMAL_1,
            }
            impl DECIMAL {}
            unsafe impl ::windows::Abi for DECIMAL {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union DECIMAL_0 {
                pub Anonymous: DECIMAL_0_0,
                pub signscale: u16,
            }
            impl DECIMAL_0 {}
            unsafe impl ::windows::Abi for DECIMAL_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DECIMAL_0_0 {
                pub scale: u8,
                pub sign: u8,
            }
            impl DECIMAL_0_0 {}
            impl ::std::default::Default for DECIMAL_0_0 {
                fn default() -> Self {
                    Self { scale: 0, sign: 0 }
                }
            }
            impl ::std::fmt::Debug for DECIMAL_0_0 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_Anonymous_e__Struct")
                        .field("scale", &format_args!("{:?}", self.scale))
                        .field("sign", &format_args!("{:?}", self.sign))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DECIMAL_0_0 {
                fn eq(&self, other: &Self) -> bool {
                    self.scale == other.scale && self.sign == other.sign
                }
            }
            impl ::std::cmp::Eq for DECIMAL_0_0 {}
            unsafe impl ::windows::Abi for DECIMAL_0_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub union DECIMAL_1 {
                pub Anonymous: DECIMAL_1_0,
                pub Lo64: u64,
            }
            impl DECIMAL_1 {}
            unsafe impl ::windows::Abi for DECIMAL_1 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct DECIMAL_1_0 {
                pub Lo32: u32,
                pub Mid32: u32,
            }
            impl DECIMAL_1_0 {}
            impl ::std::default::Default for DECIMAL_1_0 {
                fn default() -> Self {
                    Self { Lo32: 0, Mid32: 0 }
                }
            }
            impl ::std::fmt::Debug for DECIMAL_1_0 {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("_Anonymous_e__Struct")
                        .field("Lo32", &format_args!("{:?}", self.Lo32))
                        .field("Mid32", &format_args!("{:?}", self.Mid32))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for DECIMAL_1_0 {
                fn eq(&self, other: &Self) -> bool {
                    self.Lo32 == other.Lo32 && self.Mid32 == other.Mid32
                }
            }
            impl ::std::cmp::Eq for DECIMAL_1_0 {}
            unsafe impl ::windows::Abi for DECIMAL_1_0 {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct SECURITY_ATTRIBUTES {
                pub nLength: u32,
                pub lpSecurityDescriptor: *mut ::std::ffi::c_void,
                pub bInheritHandle: BOOL,
            }
            impl SECURITY_ATTRIBUTES {}
            impl ::std::default::Default for SECURITY_ATTRIBUTES {
                fn default() -> Self {
                    Self {
                        nLength: 0,
                        lpSecurityDescriptor: ::std::ptr::null_mut(),
                        bInheritHandle: ::std::default::Default::default(),
                    }
                }
            }
            impl ::std::fmt::Debug for SECURITY_ATTRIBUTES {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("SECURITY_ATTRIBUTES")
                        .field("nLength", &format_args!("{:?}", self.nLength))
                        .field(
                            "lpSecurityDescriptor",
                            &format_args!("{:?}", self.lpSecurityDescriptor),
                        )
                        .field("bInheritHandle", &format_args!("{:?}", self.bInheritHandle))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for SECURITY_ATTRIBUTES {
                fn eq(&self, other: &Self) -> bool {
                    self.nLength == other.nLength
                        && self.lpSecurityDescriptor == other.lpSecurityDescriptor
                        && self.bInheritHandle == other.bInheritHandle
                }
            }
            impl ::std::cmp::Eq for SECURITY_ATTRIBUTES {}
            unsafe impl ::windows::Abi for SECURITY_ATTRIBUTES {
                type Abi = Self;
            }
            pub unsafe fn CreateEventA<'a>(
                lpeventattributes: *mut SECURITY_ATTRIBUTES,
                bmanualreset: impl ::windows::IntoParam<'a, BOOL>,
                binitialstate: impl ::windows::IntoParam<'a, BOOL>,
                lpname: impl ::windows::IntoParam<'a, PSTR>,
            ) -> HANDLE {
                panic!("Unsupported target OS");
            }
            pub const INVALID_HANDLE_VALUE: HANDLE = HANDLE(-1i32 as _);
            pub unsafe fn ResetEvent<'a>(hevent: impl ::windows::IntoParam<'a, HANDLE>) -> BOOL {
                panic!("Unsupported target OS");
            }
            pub unsafe fn SetEvent<'a>(hevent: impl ::windows::IntoParam<'a, HANDLE>) -> BOOL {
                panic!("Unsupported target OS");
            }
            #[derive(
                :: std :: cmp :: PartialEq,
                :: std :: cmp :: Eq,
                :: std :: marker :: Copy,
                :: std :: clone :: Clone,
                :: std :: default :: Default,
                :: std :: fmt :: Debug,
            )]
            #[repr(transparent)]
            pub struct WAIT_RETURN_CAUSE(pub u32);
            impl WAIT_RETURN_CAUSE {
                pub const WAIT_OBJECT_0: Self = Self(0u32);
                pub const WAIT_ABANDONED: Self = Self(128u32);
                pub const WAIT_ABANDONED_0: Self = Self(128u32);
                pub const WAIT_IO_COMPLETION: Self = Self(192u32);
                pub const WAIT_TIMEOUT: Self = Self(258u32);
                pub const WAIT_FAILED: Self = Self(4294967295u32);
            }
            impl ::std::convert::From<u32> for WAIT_RETURN_CAUSE {
                fn from(value: u32) -> Self {
                    Self(value)
                }
            }
            unsafe impl ::windows::Abi for WAIT_RETURN_CAUSE {
                type Abi = Self;
            }
            impl ::std::ops::BitOr for WAIT_RETURN_CAUSE {
                type Output = Self;
                fn bitor(self, rhs: Self) -> Self {
                    Self(self.0 | rhs.0)
                }
            }
            impl ::std::ops::BitAnd for WAIT_RETURN_CAUSE {
                type Output = Self;
                fn bitand(self, rhs: Self) -> Self {
                    Self(self.0 & rhs.0)
                }
            }
            impl ::std::ops::BitOrAssign for WAIT_RETURN_CAUSE {
                fn bitor_assign(&mut self, rhs: Self) {
                    self.0.bitor_assign(rhs.0)
                }
            }
            impl ::std::ops::BitAndAssign for WAIT_RETURN_CAUSE {
                fn bitand_assign(&mut self, rhs: Self) {
                    self.0.bitand_assign(rhs.0)
                }
            }
            pub unsafe fn WaitForSingleObject<'a>(
                hhandle: impl ::windows::IntoParam<'a, HANDLE>,
                dwmilliseconds: u32,
            ) -> WAIT_RETURN_CAUSE {
                panic!("Unsupported target OS");
            }
            pub unsafe fn WaitForMultipleObjects<'a>(
                ncount: u32,
                lphandles: *const HANDLE,
                bwaitall: impl ::windows::IntoParam<'a, BOOL>,
                dwmilliseconds: u32,
            ) -> WAIT_RETURN_CAUSE {
                panic!("Unsupported target OS");
            }
            pub const FALSE: BOOL = BOOL(0i32 as _);
            pub const TRUE: BOOL = BOOL(1i32 as _);
            pub const S_FALSE: ::windows::HRESULT = ::windows::HRESULT(1i32 as _);
        }
        #[allow(
            unused_variables,
            non_upper_case_globals,
            non_snake_case,
            unused_unsafe,
            non_camel_case_types,
            dead_code,
            clippy::all
        )]
        pub mod WinSock {
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct BLOB {
                pub cbSize: u32,
                pub pBlobData: *mut u8,
            }
            impl BLOB {}
            impl ::std::default::Default for BLOB {
                fn default() -> Self {
                    Self {
                        cbSize: 0,
                        pBlobData: ::std::ptr::null_mut(),
                    }
                }
            }
            impl ::std::fmt::Debug for BLOB {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("BLOB")
                        .field("cbSize", &format_args!("{:?}", self.cbSize))
                        .field("pBlobData", &format_args!("{:?}", self.pBlobData))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for BLOB {
                fn eq(&self, other: &Self) -> bool {
                    self.cbSize == other.cbSize && self.pBlobData == other.pBlobData
                }
            }
            impl ::std::cmp::Eq for BLOB {}
            unsafe impl ::windows::Abi for BLOB {
                type Abi = Self;
            }
        }
        #[allow(
            unused_variables,
            non_upper_case_globals,
            non_snake_case,
            unused_unsafe,
            non_camel_case_types,
            dead_code,
            clippy::all
        )]
        pub mod WindowsAndMessaging {
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct LPARAM(pub isize);
            impl LPARAM {}
            impl LPARAM {
                pub const NULL: Self = Self(0);
                pub fn is_null(&self) -> bool {
                    self == &Self::NULL
                }
            }
            impl ::std::default::Default for LPARAM {
                fn default() -> Self {
                    Self(0)
                }
            }
            impl ::std::fmt::Debug for LPARAM {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("LPARAM")
                        .field("Value", &format_args!("{:?}", self.0))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for LPARAM {
                fn eq(&self, other: &Self) -> bool {
                    self.0 == other.0
                }
            }
            impl ::std::cmp::Eq for LPARAM {}
            unsafe impl ::windows::Abi for LPARAM {
                type Abi = Self;
            }
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct HWND(pub isize);
            impl HWND {}
            impl HWND {
                pub const NULL: Self = Self(0);
                pub fn is_null(&self) -> bool {
                    self == &Self::NULL
                }
            }
            impl ::std::default::Default for HWND {
                fn default() -> Self {
                    Self(0)
                }
            }
            impl ::std::fmt::Debug for HWND {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("HWND")
                        .field("Value", &format_args!("{:?}", self.0))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for HWND {
                fn eq(&self, other: &Self) -> bool {
                    self.0 == other.0
                }
            }
            impl ::std::cmp::Eq for HWND {}
            unsafe impl ::windows::Abi for HWND {
                type Abi = Self;
            }
            pub unsafe fn GetForegroundWindow() -> HWND {
                panic!("Unsupported target OS");
            }
        }
        #[allow(
            unused_variables,
            non_upper_case_globals,
            non_snake_case,
            unused_unsafe,
            non_camel_case_types,
            dead_code,
            clippy::all
        )]
        pub mod WindowsProgramming {
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct FILETIME {
                pub dwLowDateTime: u32,
                pub dwHighDateTime: u32,
            }
            impl FILETIME {}
            impl ::std::default::Default for FILETIME {
                fn default() -> Self {
                    Self {
                        dwLowDateTime: 0,
                        dwHighDateTime: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for FILETIME {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("FILETIME")
                        .field("dwLowDateTime", &format_args!("{:?}", self.dwLowDateTime))
                        .field("dwHighDateTime", &format_args!("{:?}", self.dwHighDateTime))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for FILETIME {
                fn eq(&self, other: &Self) -> bool {
                    self.dwLowDateTime == other.dwLowDateTime
                        && self.dwHighDateTime == other.dwHighDateTime
                }
            }
            impl ::std::cmp::Eq for FILETIME {}
            unsafe impl ::windows::Abi for FILETIME {
                type Abi = Self;
            }
            pub const INFINITE: u32 = 4294967295u32;
            pub unsafe fn CloseHandle<'a>(
                hobject: impl ::windows::IntoParam<'a, super::SystemServices::HANDLE>,
            ) -> super::SystemServices::BOOL {
                panic!("Unsupported target OS");
            }
        }
        #[allow(
            unused_variables,
            non_upper_case_globals,
            non_snake_case,
            unused_unsafe,
            non_camel_case_types,
            dead_code,
            clippy::all
        )]
        pub mod WindowsPropertiesSystem {
            #[repr(C)]
            #[derive(:: std :: clone :: Clone, :: std :: marker :: Copy)]
            pub struct PROPERTYKEY {
                pub fmtid: ::windows::Guid,
                pub pid: u32,
            }
            impl PROPERTYKEY {}
            impl ::std::default::Default for PROPERTYKEY {
                fn default() -> Self {
                    Self {
                        fmtid: ::std::default::Default::default(),
                        pid: 0,
                    }
                }
            }
            impl ::std::fmt::Debug for PROPERTYKEY {
                fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
                    fmt.debug_struct("PROPERTYKEY")
                        .field("fmtid", &format_args!("{:?}", self.fmtid))
                        .field("pid", &format_args!("{:?}", self.pid))
                        .finish()
                }
            }
            impl ::std::cmp::PartialEq for PROPERTYKEY {
                fn eq(&self, other: &Self) -> bool {
                    self.fmtid == other.fmtid && self.pid == other.pid
                }
            }
            impl ::std::cmp::Eq for PROPERTYKEY {}
            unsafe impl ::windows::Abi for PROPERTYKEY {
                type Abi = Self;
            }
        }
    }
}