// ISSUE-2000/10/25-FrankYe Default to unique pointers // Probably should default pointer to unique, then won't // need so much redefinition of data structures to have // unique embedded pointers [ uuid(3faf4738-3a21-4307-b46c-fdda9bb8c0d5), version(1.0), endpoint("ncalrpc:[AudioSrv]")] interface AudioSrv { import "wtypes.idl"; typedef __int3264 RHANDLE; typedef [string, unique] wchar_t * UNIQUE_PWSTR; typedef struct { unsigned long Data1; unsigned short Data2; unsigned short Data3; byte Data4[ 8 ]; } RPC_GUID; typedef RPC_GUID RPC_CLSID; typedef struct _DILIST { int Count; [size_is(Count)] UNIQUE_PWSTR DeviceInterface[]; } DILIST; typedef [unique] DILIST *UNIQUE_PDILIST; typedef struct _GFX { unsigned int Id; UNIQUE_PWSTR GfxFactoryDi; RPC_CLSID Clsid; unsigned int Type; unsigned int Order; } GFX, *PGFX; typedef struct _PGFXLIST { int Count; [size_is(Count)] GFX Gfx[]; } GFXLIST; typedef [unique] GFXLIST *UNIQUE_PGFXLIST; long s_gfxCreateZoneFactoriesList([out] UNIQUE_PDILIST *ppDiList); long s_gfxCreateGfxFactoriesList([in, string] wchar_t *pZoneDi, [out] UNIQUE_PDILIST *ppDiList); long s_gfxCreateGfxList([in, string] wchar_t *pZoneDi, [out] UNIQUE_PGFXLIST *ppGfxList); long s_gfxRemoveGfx([in] unsigned long Id); long s_gfxAddGfx([in, string] wchar_t *ZoneFactoryDi, [in, string] wchar_t *GfxFactoryDi, [in] unsigned long Type, [in] unsigned long Order, [out] unsigned long *pNewId); long s_gfxModifyGfx([in] unsigned long Id, [in] unsigned long Order); // TODO learn how to pass HANDLE as OUT param long s_gfxOpenGfx([in] unsigned long dwProcessId, [in] unsigned long dwGfxId, [out] RHANDLE *pFileHandle); void s_gfxLogon([in] handle_t hBinding, [in] unsigned long dwProcessId); void s_gfxLogoff(void); typedef [context_handle] void * HANDLE_SESSIONNOTIFICATION; typedef [ref] HANDLE_SESSIONNOTIFICATION *PHANDLE_SESSIONNOTIFICATION; long s_winmmRegisterSessionNotificationEvent([in] unsigned long dwProcessId, [in] RHANDLE hEvent, [out] PHANDLE_SESSIONNOTIFICATION phSessionNotification); long s_winmmUnregisterSessionNotification([in, out] PHANDLE_SESSIONNOTIFICATION phSessionNotification); long s_winmmSessionConnectState([in] unsigned long dwProcessId, [out] int *ConnectState); long s_wdmDriverOpenDrvRegKey([in] DWORD dwProcessId, [in] LPCTSTR DeviceInterface, [in] ULONG samDesired, [out] RHANDLE *phkey); void s_winmmAdvisePreferredDeviceChange(void); long s_winmmGetPnpInfo([out] long *pcbPnpInfo, [out, size_is(,*pcbPnpInfo)] BYTE **PnpInfo); }