|  | /* | 
|  | * Core Audio device topology definitions | 
|  | * | 
|  | * Copyright 2009 Maarten Lankhorst | 
|  | * | 
|  | * This library is free software; you can redistribute it and/or | 
|  | * modify it under the terms of the GNU Lesser General Public | 
|  | * License as published by the Free Software Foundation; either | 
|  | * version 2.1 of the License, or (at your option) any later version. | 
|  | * | 
|  | * This library is distributed in the hope that it will be useful, | 
|  | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
|  | * Lesser General Public License for more details. | 
|  | * | 
|  | * You should have received a copy of the GNU Lesser General Public | 
|  | * License along with this library; if not, write to the Free Software | 
|  | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | 
|  | * | 
|  | */ | 
|  |  | 
|  | cpp_quote("#ifndef __devicetopology_h__") | 
|  | cpp_quote("#define __devicetopology_h__") | 
|  |  | 
|  | interface IPart; | 
|  | interface IControlInterface; | 
|  | interface IDeviceTopology; | 
|  | interface IControlChangeNotify; | 
|  |  | 
|  | import "oaidl.idl"; | 
|  | import "ocidl.idl"; | 
|  | import "propidl.idl"; | 
|  |  | 
|  | cpp_quote("#ifndef E_NOTFOUND") | 
|  | cpp_quote("#define E_NOTFOUND HRESULT_FROM_WIN32(ERROR_NOT_FOUND)") | 
|  | cpp_quote("#endif") | 
|  |  | 
|  | cpp_quote("#define DEVTOPO_HARDWARE_INITIATED_EVENTCONTEXT 0x64726148 /* 'draH' */") | 
|  | cpp_quote("DEFINE_GUID(EVENTCONTEXT_VOLUMESLIDER, 0xe2c2e9de, 0x09b1, 0x4b04,0x84,0xe5, 0x07, 0x93, 0x12, 0x25, 0xee, 0x04);") | 
|  |  | 
|  | cpp_quote("#define _IKsControl_") | 
|  | cpp_quote("#include <ks.h>") | 
|  | cpp_quote("#include <ksmedia.h>") | 
|  | cpp_quote("#ifndef _KS_") | 
|  |  | 
|  | typedef struct { | 
|  | ULONG FormatSize; | 
|  | ULONG Flags; | 
|  | ULONG SampleSize; | 
|  | ULONG Reserved; | 
|  | GUID MajorFormat; | 
|  | GUID SubFormat; | 
|  | GUID Specifier; | 
|  | } KSDATAFORMAT; | 
|  |  | 
|  | typedef KSDATAFORMAT *PKSDATAFORMAT; | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | union | 
|  | { | 
|  | struct { | 
|  | GUID Set; | 
|  | ULONG Id; | 
|  | ULONG Flags; | 
|  | } DUMMYSTRUCTNAME; | 
|  | LONGLONG Alignment; | 
|  | } DUMMYUNIONNAME; | 
|  | } KSIDENTIFIER; | 
|  |  | 
|  | typedef KSIDENTIFIER KSPROPERTY, *PKSPROPERTY; | 
|  | typedef KSIDENTIFIER KSMETHOD, *PKSMETHOD; | 
|  | typedef KSIDENTIFIER KSEVENT, *PKSEVENT; | 
|  |  | 
|  | typedef enum | 
|  | { | 
|  | eConnTypeUnknown = 0, | 
|  | eConnType3Point5mm, | 
|  | eConnTypeQuarter, | 
|  | eConnTypeAtapiInternal, | 
|  | eConnTypeRCA, | 
|  | eConnTypeOptical, | 
|  | eConnTypeOtherDigital, | 
|  | eConnTypeOtherAnalog, | 
|  | eConnTypeMultichannelAnalogDIN, | 
|  | eConnTypeXlrProfessional, | 
|  | eConnTypeRj11Modem, | 
|  | eConnTypeCombination | 
|  | } EPcxConnectionType; | 
|  |  | 
|  | typedef enum | 
|  | { | 
|  | eGeoLocRear = 1, | 
|  | eGeoLocFront, | 
|  | eGeoLocLeft, | 
|  | eGeoLocRight, | 
|  | eGeoLocTop, | 
|  | eGeoLocBottom, | 
|  | eGeoLocRearPanel, | 
|  | eGeoLocRiser, | 
|  | eGeoLocInsideMobileLid, | 
|  | eGeoLocDrivebay, | 
|  | eGeoLocHDMI, | 
|  | eGeoLocOutsideMobileLid, | 
|  | eGeoLocATAPI, | 
|  | eGeoLocReserved5, | 
|  | eGeoLocReserved6 | 
|  | } EPcxGeoLocation; | 
|  |  | 
|  | typedef enum | 
|  | { | 
|  | eGenLocPrimaryBox = 0, | 
|  | eGenLocInternal, | 
|  | eGenLocSeparate, | 
|  | eGenLocOther | 
|  | } EPcxGenLocation; | 
|  |  | 
|  | typedef enum | 
|  | { | 
|  | ePortConnJack = 0, | 
|  | ePortConnIntegratedDevice, | 
|  | ePortConnBothIntegratedAndJack, | 
|  | ePortConnUnknown | 
|  | } EPxcPortConnection; | 
|  |  | 
|  | typedef struct | 
|  | { | 
|  | DWORD ChannelMapping; | 
|  | COLORREF Color; | 
|  | EPcxConnectionType ConnectionType; | 
|  | EPcxGeoLocation GeoLocation; | 
|  | EPcxGenLocation GenLocation; | 
|  | EPxcPortConnection PortConnection; | 
|  | BOOL IsConnected; | 
|  | } KSJACK_DESCRIPTION; | 
|  |  | 
|  | typedef KSJACK_DESCRIPTION *PKSJACK_DESCRIPTION; | 
|  |  | 
|  | typedef struct _LUID | 
|  | { | 
|  | DWORD LowPart; | 
|  | LONG HighPart; | 
|  | } LUID; | 
|  |  | 
|  | typedef struct _LUID *PLUID; | 
|  |  | 
|  | typedef enum | 
|  | { | 
|  | KSJACK_SINK_CONNECTIONTYPE_HDMI = 0, | 
|  | KSJACK_SINK_CONNECTIONTYPE_DISPLAYPORT | 
|  | } KSJACK_SINK_CONNECTIONTYPE; | 
|  |  | 
|  | typedef struct _tagKSJACK_SINK_INFORMATION | 
|  | { | 
|  | KSJACK_SINK_CONNECTIONTYPE ConnType; | 
|  | WORD ManufacturerId; | 
|  | WORD ProductId; | 
|  | WORD AudioLatency; | 
|  | BOOL HDCPCapable; | 
|  | BOOL AICapable; | 
|  | UCHAR SinkDescriptionLength; | 
|  | WCHAR SinkDescription[32]; | 
|  | LUID PortId; | 
|  | } KSJACK_SINK_INFORMATION; | 
|  |  | 
|  | typedef struct _tagKSJACK_DESCRIPTION2 | 
|  | { | 
|  | DWORD DeviceStateInfo; | 
|  | DWORD JackCapabilities; | 
|  | } KSJACK_DESCRIPTION2; | 
|  |  | 
|  | typedef struct _tagKSJACK_DESCRIPTION2 *PKSJACK_DESCRIPTION2; | 
|  |  | 
|  | cpp_quote("#endif") | 
|  |  | 
|  | typedef enum | 
|  | { | 
|  | In = 0, | 
|  | Out | 
|  | } DataFlow; | 
|  |  | 
|  | typedef enum | 
|  | { | 
|  | Connector = 0, | 
|  | Subunit | 
|  | } PartType; | 
|  |  | 
|  | typedef enum | 
|  | { | 
|  | Unknown_Connector = 0, | 
|  | Physical_Internal, | 
|  | Physical_External, | 
|  | Software_IO, | 
|  | Software_Fixed, | 
|  | Network | 
|  | } ConnectorType; | 
|  |  | 
|  | [ | 
|  | pointer_default(unique), | 
|  | nonextensible, | 
|  | uuid(28f54685-06fd-11d2-b27a-00a0c9223196), | 
|  | local, | 
|  | object | 
|  | ] | 
|  | interface IKsControl : IUnknown | 
|  | { | 
|  | HRESULT KsProperty( | 
|  | [in] PKSPROPERTY Property, | 
|  | [in] ULONG PropertyLength, | 
|  | [in,out] void *PropertyData, | 
|  | [in] ULONG DataLength, | 
|  | [out] ULONG *BytesReturned | 
|  | ); | 
|  | HRESULT KsMethod( | 
|  | [in] PKSMETHOD Method, | 
|  | [in] ULONG MethodLength, | 
|  | [in,out] void *MethodData, | 
|  | [in] ULONG DataLength, | 
|  | [out] ULONG *BytesReturned | 
|  | ); | 
|  | HRESULT KsEvent( | 
|  | [in] PKSEVENT Event, | 
|  | [in] ULONG EventLength, | 
|  | [in,out] void *EventData, | 
|  | [in] ULONG DataLength, | 
|  | [out] ULONG *BytesReturned | 
|  | ); | 
|  | } | 
|  |  | 
|  | [ | 
|  | pointer_default(unique), | 
|  | nonextensible, | 
|  | uuid(c2f8e001-f205-4bc9-99bc-c13b1e048ccb), | 
|  | local, | 
|  | object | 
|  | ] | 
|  | interface IPerChannelDbLevel : IUnknown | 
|  | { | 
|  | HRESULT GetChannelCount( | 
|  | [out] UINT *pcChannels | 
|  | ); | 
|  | HRESULT GetLevelRange( | 
|  | [in] UINT nChannel, | 
|  | [out] float *pfMinLevelDB, | 
|  | [out] float *pfMaxLevelDB, | 
|  | [out] float *pfStepping | 
|  | ); | 
|  | HRESULT GetLevel( | 
|  | [in] UINT nChannel, | 
|  | [out] float *pfLevelDB | 
|  | ); | 
|  | HRESULT SetLevel( | 
|  | [in] UINT nChannel, | 
|  | [in] float fLevelDB, | 
|  | [in,unique] LPCGUID pguidEventContext | 
|  | ); | 
|  | HRESULT SetLevelUniform( | 
|  | [in] float fLevelDB, | 
|  | [in,unique] LPCGUID pguidEventContext | 
|  | ); | 
|  | HRESULT SetLevelAllChannels( | 
|  | [size_is(cChannels),in] float *aLevelsDB, | 
|  | [in] ULONG cChannels, | 
|  | [in] LPCGUID pguidEventContext | 
|  | ); | 
|  | } | 
|  |  | 
|  | [ | 
|  | pointer_default(unique), | 
|  | nonextensible, | 
|  | uuid(7fb7b48f-531d-44a2-bcb3-5ad5a134b3dc), | 
|  | local, | 
|  | object | 
|  | ] | 
|  | interface IAudioVolumeLevel : IPerChannelDbLevel | 
|  | { | 
|  | /* Empty */ | 
|  | } | 
|  |  | 
|  | [ | 
|  | pointer_default(unique), | 
|  | nonextensible, | 
|  | uuid(bb11c46f-ec28-493c-b88a-5db88062ce98), | 
|  | local, | 
|  | object | 
|  | ] | 
|  | interface IAudioChannelConfig : IUnknown | 
|  | { | 
|  | HRESULT SetChannelConfig( | 
|  | [in] DWORD dwConfig, | 
|  | [in] LPCGUID pguidEventContext | 
|  | ); | 
|  | HRESULT GetChannelConfig( | 
|  | [in] DWORD dwConfig, | 
|  | [retval,out] DWORD *pdwConfig | 
|  | ); | 
|  | } | 
|  |  | 
|  | [ | 
|  | pointer_default(unique), | 
|  | nonextensible, | 
|  | uuid(7d8b1437-dd53-4350-9c1b-1ee2890bf938), | 
|  | local, | 
|  | object | 
|  | ] | 
|  | interface IAudioLoudness : IUnknown | 
|  | { | 
|  | HRESULT GetEnabled( | 
|  | [out] BOOL *pbEnabled | 
|  | ); | 
|  | HRESULT SetEnabled( | 
|  | [in] BOOL bEnabled, | 
|  | [in] LPCGUID pguidEventContext | 
|  | ); | 
|  | } | 
|  |  | 
|  | [ | 
|  | pointer_default(unique), | 
|  | nonextensible, | 
|  | uuid(4f03dc02-5e6e-4653-8f72-a030c123d598), | 
|  | local, | 
|  | object | 
|  | ] | 
|  | interface IAudioInputSelector : IUnknown | 
|  | { | 
|  | HRESULT GetSelection( | 
|  | [out] UINT *pnIdSelected | 
|  | ); | 
|  | HRESULT SetSelection( | 
|  | [in] UINT nIdSelect, | 
|  | [unique,in] LPCGUID pguidEventContext | 
|  | ); | 
|  | } | 
|  |  | 
|  | [ | 
|  | pointer_default(unique), | 
|  | nonextensible, | 
|  | uuid(bb515f69-94a7-429e-8b9c-271b3f11a3ab), | 
|  | local, | 
|  | object | 
|  | ] | 
|  | interface IAudioOutputSelector : IUnknown | 
|  | { | 
|  | HRESULT GetSelection( | 
|  | [out] UINT *pnIdSelected | 
|  | ); | 
|  | HRESULT SetSelection( | 
|  | [in] UINT nIdSelect, | 
|  | [unique,in] LPCGUID pguidEventContext | 
|  | ); | 
|  | } | 
|  |  | 
|  | [ | 
|  | pointer_default(unique), | 
|  | nonextensible, | 
|  | uuid(bb515f69-94a7-429e-8b9c-271b3f11a3ab), | 
|  | local, | 
|  | object | 
|  | ] | 
|  | interface IAudioMute : IUnknown | 
|  | { | 
|  | HRESULT SetMute( | 
|  | [in] BOOL bMute, | 
|  | [unique,in] LPCGUID pguidEventContext | 
|  | ); | 
|  | HRESULT GetMute( | 
|  | [out] BOOL *pbMute | 
|  | ); | 
|  | } | 
|  |  | 
|  | [ | 
|  | pointer_default(unique), | 
|  | nonextensible, | 
|  | uuid(a2b1a1d9-4db3-425d-a2b2-bd335cb3e2e5), | 
|  | local, | 
|  | object | 
|  | ] | 
|  | interface IAudioBass : IPerChannelDbLevel | 
|  | { | 
|  | /* Empty */ | 
|  | } | 
|  |  | 
|  | [ | 
|  | pointer_default(unique), | 
|  | nonextensible, | 
|  | uuid(5e54b6d7-b44b-40d9-9a9e-e691d9ce6edf), | 
|  | local, | 
|  | object | 
|  | ] | 
|  | interface IAudioMidRange : IPerChannelDbLevel | 
|  | { | 
|  | /* Empty */ | 
|  | } | 
|  |  | 
|  | [ | 
|  | pointer_default(unique), | 
|  | nonextensible, | 
|  | uuid(0a717812-694e-4907-b74b-bafa5cfdca7b), | 
|  | local, | 
|  | object | 
|  | ] | 
|  | interface IAudioTreble : IPerChannelDbLevel | 
|  | { | 
|  | /* Empty */ | 
|  | } | 
|  |  | 
|  | [ | 
|  | pointer_default(unique), | 
|  | nonextensible, | 
|  | uuid(bb515f69-94a7-429e-8b9c-271b3f11a3ab), | 
|  | local, | 
|  | object | 
|  | ] | 
|  | interface IAudioAutoGainControl : IUnknown | 
|  | { | 
|  | HRESULT GetEnabled( | 
|  | [in] BOOL bEnabled, | 
|  | [unique,in] LPCGUID pguidEventContext | 
|  | ); | 
|  | HRESULT GetMute( | 
|  | [out] BOOL *pbEnabled | 
|  | ); | 
|  | } | 
|  |  | 
|  | [ | 
|  | pointer_default(unique), | 
|  | nonextensible, | 
|  | uuid(dd79923c-0599-45e0-b8b6-c8df7db6e796), | 
|  | local, | 
|  | object | 
|  | ] | 
|  | interface IAudioPeakMeter : IUnknown | 
|  | { | 
|  | HRESULT GetChannelCount( | 
|  | [out] UINT *pcChannels | 
|  | ); | 
|  | HRESULT GetLevel( | 
|  | [in] UINT nChannel, | 
|  | [out] float *pfLevel | 
|  | ); | 
|  | } | 
|  |  | 
|  | [ | 
|  | pointer_default(unique), | 
|  | nonextensible, | 
|  | uuid(3b22bcbf-2586-4af0-8583-205d391b807c), | 
|  | local, | 
|  | object | 
|  | ] | 
|  | interface IDeviceSpecificProperty : IUnknown | 
|  | { | 
|  | HRESULT GetType( | 
|  | [out] VARTYPE *pVType | 
|  | ); | 
|  | HRESULT GetValue( | 
|  | [out] VARTYPE *pvType, | 
|  | [out,in] DWORD *pcbValue | 
|  | ); | 
|  | HRESULT SetValue( | 
|  | [in] void *pvValue, | 
|  | [in] DWORD cbValue, | 
|  | [in] LPCGUID pguidEventContext | 
|  | ); | 
|  | HRESULT Get4BRange( | 
|  | [out] LONG *plMin, | 
|  | [out] LONG *plMax, | 
|  | [out] LONG *plStepping | 
|  | ); | 
|  | } | 
|  |  | 
|  | [ | 
|  | pointer_default(unique), | 
|  | nonextensible, | 
|  | uuid(3cb4a69d-bb6f-4d2b-95b7-452d2c155db5), | 
|  | local, | 
|  | object | 
|  | ] | 
|  | interface IKsFormatSupport : IUnknown | 
|  | { | 
|  | HRESULT IsFormatSupported( | 
|  | [size_is(cbFormat),in] PKSDATAFORMAT pKsFormat, | 
|  | [in] DWORD cbFormat, | 
|  | [out] BOOL *pbSupported | 
|  | ); | 
|  | HRESULT GetDevicePreferredFormat( | 
|  | [out] PKSDATAFORMAT *ppKsFormat | 
|  | ); | 
|  | } | 
|  |  | 
|  | [ | 
|  | pointer_default(unique), | 
|  | nonextensible, | 
|  | uuid(4509f757-2d46-4637-8e62-ce7db944f57b), | 
|  | local, | 
|  | object | 
|  | ] | 
|  | interface IKsJackDescription : IUnknown | 
|  | { | 
|  | HRESULT GetJackCount( | 
|  | [out] UINT *pcJacks | 
|  | ); | 
|  | HRESULT GetJackDescription( | 
|  | [in] UINT nJack, | 
|  | [out] KSJACK_DESCRIPTION *pDescription | 
|  | ); | 
|  | } | 
|  |  | 
|  | [ | 
|  | pointer_default(unique), | 
|  | nonextensible, | 
|  | uuid(478f3a9b-e0c9-4827-9228-6f5505ffe76a), | 
|  | local, | 
|  | object | 
|  | ] | 
|  | interface IKsJackDescription2 : IUnknown | 
|  | { | 
|  | HRESULT GetJackCount( | 
|  | [out] UINT *pcJacks | 
|  | ); | 
|  | HRESULT GetJackDescription2( | 
|  | [in] UINT nJack, | 
|  | [out] KSJACK_DESCRIPTION2 *pDescription2 | 
|  | ); | 
|  | } | 
|  |  | 
|  | [ | 
|  | pointer_default(unique), | 
|  | nonextensible, | 
|  | uuid(d9bd72ed-290f-4581-9ff3-61027a8fe532), | 
|  | local, | 
|  | object | 
|  | ] | 
|  | interface IKsJackSinkInformation : IUnknown | 
|  | { | 
|  | HRESULT GetJackSinkInformation( | 
|  | [out] KSJACK_SINK_INFORMATION *pJackSinkInformation | 
|  | ); | 
|  | } | 
|  |  | 
|  | [ | 
|  | pointer_default(unique), | 
|  | nonextensible, | 
|  | uuid(6daa848c-5eb0-45cc-aea5-998a2cda1ffb), | 
|  | local, | 
|  | object | 
|  | ] | 
|  | interface IPartsList : IUnknown | 
|  | { | 
|  | HRESULT GetCount( | 
|  | [out] UINT *pCount | 
|  | ); | 
|  | HRESULT GetPart( | 
|  | [in] UINT nIndex, | 
|  | [out] IPart **ppPart | 
|  | ); | 
|  | } | 
|  |  | 
|  | [ | 
|  | pointer_default(unique), | 
|  | nonextensible, | 
|  | uuid(ae2de0e4-5bca-4f2d-aa46-5d13f8fdb3a9), | 
|  | local, | 
|  | object | 
|  | ] | 
|  | interface IPart : IUnknown | 
|  | { | 
|  | HRESULT GetName( | 
|  | [out] LPWSTR *ppwstrName | 
|  | ); | 
|  | HRESULT GetLocalId( | 
|  | [out] UINT *pnId | 
|  | ); | 
|  | HRESULT GetGlobalId( | 
|  | [out] LPWSTR *ppwstrGlobalId | 
|  | ); | 
|  | HRESULT GetPartType( | 
|  | [out] PartType *pPartType | 
|  | ); | 
|  | HRESULT GetSubType( | 
|  | [out] GUID *pSubType | 
|  | ); | 
|  | HRESULT GetControlInterfaceCount( | 
|  | [out] UINT *pCount | 
|  | ); | 
|  | HRESULT GetControlInterface( | 
|  | [in] UINT nIndex, | 
|  | [out] IControlInterface **ppInterfaceDesc | 
|  | ); | 
|  | HRESULT EnumPartsIncoming( | 
|  | [out] IPartsList **ppParts | 
|  | ); | 
|  | HRESULT EnumPartsOutgoing( | 
|  | [out] IPartsList **ppParts | 
|  | ); | 
|  | HRESULT GetTopologyObjects( | 
|  | [out] IDeviceTopology **ppTopology | 
|  | ); | 
|  | HRESULT Activate( | 
|  | [in] DWORD dwClsContext, | 
|  | [in] REFIID refiid, | 
|  | [iid_is(refiid),out] void **ppvObject | 
|  | ); | 
|  | HRESULT RegisterControlChangeCallback( | 
|  | [in] REFGUID riid, | 
|  | [in] IControlChangeNotify *pNotify | 
|  | ); | 
|  | HRESULT UnregisterControlChangeCallback( | 
|  | [in] IControlChangeNotify *pNotify | 
|  | ); | 
|  | }; | 
|  |  | 
|  | [ | 
|  | pointer_default(unique), | 
|  | nonextensible, | 
|  | uuid(9c2c4058-23f5-41de-877a-df3af236a09e), | 
|  | local, | 
|  | object | 
|  | ] | 
|  | interface IConnector : IUnknown | 
|  | { | 
|  | HRESULT GetType( | 
|  | [out] ConnectorType *pType | 
|  | ); | 
|  | HRESULT GetDataFlow( | 
|  | [out] DataFlow *pFlow | 
|  | ); | 
|  | HRESULT ConnectTo( | 
|  | [in] IConnector *pConnectTo | 
|  | ); | 
|  | HRESULT Disconnect(void); | 
|  | HRESULT IsConnected( | 
|  | [out] BOOL *pbConnected | 
|  | ); | 
|  | HRESULT GetConnectedTo( | 
|  | [out] IConnector **ppConTo | 
|  | ); | 
|  | HRESULT GetConnectorIdConnectedTo( | 
|  | [out] LPWSTR *ppwstrConnectorId | 
|  | ); | 
|  | HRESULT GetDeviceIdConnectedTo( | 
|  | [out] LPWSTR *ppwstrDeviceId | 
|  | ); | 
|  | } | 
|  |  | 
|  | [ | 
|  | pointer_default(unique), | 
|  | nonextensible, | 
|  | uuid(82149a85-dba6-4487-86bb-ea8f7fefcc71), | 
|  | local, | 
|  | object | 
|  | ] | 
|  | interface ISubUnit: IUnknown | 
|  | { | 
|  | /* Empty IUnknown interface.. */ | 
|  | } | 
|  |  | 
|  | [ | 
|  | pointer_default(unique), | 
|  | nonextensible, | 
|  | uuid(45d37c3f-5140-444a-ae24-400789f3cbf3), | 
|  | local, | 
|  | object | 
|  | ] | 
|  | interface IControlInterface : IUnknown | 
|  | { | 
|  | HRESULT GetName( | 
|  | [out] LPWSTR *ppwstrName | 
|  | ); | 
|  | HRESULT GetIID( | 
|  | [out] GUID *pIID | 
|  | ); | 
|  | } | 
|  |  | 
|  | [ | 
|  | pointer_default(unique), | 
|  | nonextensible, | 
|  | uuid(a09513ed-c709-4d21-bd7b-5f34c47f3947), | 
|  | local, | 
|  | object | 
|  | ] | 
|  | interface IControlChangeNotify : IUnknown | 
|  | { | 
|  | HRESULT OnNotify( | 
|  | [in] DWORD dwSenderProcessId, | 
|  | [in] LPCGUID ppguidEventContext | 
|  | ); | 
|  | } | 
|  |  | 
|  | [ | 
|  | pointer_default(unique), | 
|  | nonextensible, | 
|  | uuid(2a07407e-6497-4a18-9787-32f79bd0d98f), | 
|  | local, | 
|  | object | 
|  | ] | 
|  | interface IDeviceTopology : IUnknown | 
|  | { | 
|  | HRESULT GetConnectorCount( | 
|  | [out] UINT *pCount | 
|  | ); | 
|  | HRESULT GetConnector( | 
|  | [in] UINT nIndex, | 
|  | [out] IConnector **ppConnector | 
|  | ); | 
|  | HRESULT GetSubunitCount( | 
|  | [out] UINT *pCount | 
|  | ); | 
|  | HRESULT GetSubunit( | 
|  | [in] UINT nIndex, | 
|  | [out] ISubUnit **ppConnector | 
|  | ); | 
|  | HRESULT GetPartById( | 
|  | [in] UINT nId, | 
|  | [out] IPart **ppPart | 
|  | ); | 
|  | HRESULT GetDeviceId( | 
|  | [out] LPWSTR *ppwstrDeviceId | 
|  | ); | 
|  | HRESULT GetSignalPath( | 
|  | [in] IPart *pIPartFrom, | 
|  | [in] IPart *pIPartTo, | 
|  | [in] BOOL bRejectMixedPaths, | 
|  | [out] IPartsList **ppParts | 
|  | ); | 
|  | } | 
|  |  | 
|  | [ | 
|  | version(1.0) | 
|  | ] | 
|  | library DevTopologyLib | 
|  | { | 
|  | [ | 
|  | uuid(1df639d0-5ec1-47aa-9379-828dc1aa8c59), | 
|  | ] | 
|  | coclass DeviceTopology | 
|  | { | 
|  | interface IDeviceTopology; | 
|  | } | 
|  | } | 
|  |  | 
|  | cpp_quote("#endif /*__devicetopology_h__*/") |