#ifndef _DRMK_H_ #define _DRMK_H_ #ifdef __cplusplus extern "C" { #endif typedef struct tagDRMRIGHTS { BOOL CopyProtect; ULONG Reserved; BOOL DigitalOutputDisable; } DRMRIGHTS , *PDRMRIGHTS; typedef const DRMRIGHTS *PCDRMRIGHTS; #define DEFINE_DRMRIGHTS_DEFAULT(DrmRights) const DRMRIGHTS DrmRights = {FALSE, 0, FALSE} // {1915C967-3299-48cb-A3E4-69FD1D1B306E} DEFINE_GUID(IID_IDrmAudioStream, 0x1915c967, 0x3299, 0x48cb, 0xa3, 0xe4, 0x69, 0xfd, 0x1d, 0x1b, 0x30, 0x6e); DECLARE_INTERFACE_(IDrmAudioStream, IUnknown) { // IUnknown methods STDMETHOD_(NTSTATUS, QueryInterface)(THIS_ REFIID InterfaceId, PVOID* Interface ) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; // IDrmAudioStream methods STDMETHOD_(NTSTATUS,SetContentId)(THIS_ IN ULONG ContentId, IN PCDRMRIGHTS DrmRights ) PURE; }; typedef IDrmAudioStream *PDRMAUDIOSTREAM; #define IMP_IDrmAudioStream\ STDMETHODIMP_(NTSTATUS) SetContentId\ ( IN ULONG ContentId,\ IN PCDRMRIGHTS DrmRights\ ); typedef struct tagDRMFORWARD { DWORD Flags; PDEVICE_OBJECT DeviceObject; PFILE_OBJECT FileObject; PVOID Context; } DRMFORWARD, *PDRMFORWARD; typedef const DRMFORWARD *PCDRMFORWARD; NTSTATUS NTAPI DrmAddContentHandlers( IN ULONG ContentId, IN PVOID* paHandlers, IN ULONG NumHandlers ); typedef NTSTATUS (NTAPI *PFNDRMADDCONTENTHANDLERS)( IN ULONG ContentId, IN PVOID* paHandlers, IN ULONG NumHandlers ); NTSTATUS NTAPI DrmCreateContentMixed( IN PULONG paContentId, IN ULONG cContentId, OUT PULONG pMixedContentId ); typedef NTSTATUS (NTAPI *PFNDRMCREATECONTENTMIXED)( IN PULONG paContentId, IN ULONG cContentId, OUT PULONG pMixedContentId ); NTSTATUS NTAPI DrmDestroyContent( IN ULONG ContentId ); typedef NTSTATUS (NTAPI *PFNDRMDESTROYCONTENT)( IN ULONG ContentId ); NTSTATUS NTAPI DrmForwardContentToDeviceObject( IN ULONG ContentId, IN PVOID Reserved, IN PCDRMFORWARD DrmForward ); typedef NTSTATUS (NTAPI *PFNDRMFORWARDCONTENTTODEVICEOBJECT)( IN ULONG ContentId, IN PVOID Reserved, IN PCDRMFORWARD DrmForward ); NTSTATUS NTAPI DrmForwardContentToFileObject( IN ULONG ContentId, IN PFILE_OBJECT FileObject ); typedef NTSTATUS (NTAPI *PFNDRMFORWARDCONTENTTOFILEOBJECT)( IN ULONG ContentId, IN PFILE_OBJECT FileObject ); NTSTATUS NTAPI DrmForwardContentToInterface( ULONG ContentId, PUNKNOWN pUnknown, ULONG NumMethods); typedef NTSTATUS (NTAPI *PFNDRMFORWARDCONTENTTOINTERFACE)( ULONG ContentId, PUNKNOWN pUnknown, ULONG NumMethods); NTSTATUS NTAPI DrmGetContentRights( IN ULONG ContentId, OUT PDRMRIGHTS DrmRights ); typedef NTSTATUS (NTAPI *PFNDRMGETCONTENTRIGHTS)( IN ULONG ContentId, OUT PDRMRIGHTS DrmRights ); // // Structures for use with KSPROPERY_DRMAUDIOSTREAM_CONTENTID // typedef struct { ULONG ContentId; DRMRIGHTS DrmRights; } KSDRMAUDIOSTREAM_CONTENTID, *PKSDRMAUDIOSTREAM_CONTENTID; typedef struct { KSPROPERTY Property; PVOID Context; // DRM API callback functions PFNDRMADDCONTENTHANDLERS DrmAddContentHandlers; PFNDRMCREATECONTENTMIXED DrmCreateContentMixed; PFNDRMDESTROYCONTENT DrmDestroyContent; PFNDRMFORWARDCONTENTTODEVICEOBJECT DrmForwardContentToDeviceObject; PFNDRMFORWARDCONTENTTOFILEOBJECT DrmForwardContentToFileObject; PFNDRMFORWARDCONTENTTOINTERFACE DrmForwardContentToInterface; PFNDRMGETCONTENTRIGHTS DrmGetContentRights; } KSP_DRMAUDIOSTREAM_CONTENTID, *PKSP_DRMAUDIOSTREAM_CONTENTID; #ifdef __cplusplus } #endif #endif