1/*
2    ReactOS Kernel Streaming
3    Digital Rights Management
4
5    Author: Andrew Greenwood
6*/
7
8#ifndef DRMK_H
9#define DRMK_H
10
11typedef struct {
12  DWORD Flags;
13  PDEVICE_OBJECT DeviceObject;
14  PFILE_OBJECT FileObject;
15  PVOID Context;
16} DRMFORWARD, *PDRMFORWARD, *PCDRMFORWARD;
17
18typedef struct {
19  BOOL  CopyProtect;
20  ULONG Reserved;
21  BOOL  DigitalOutputDisable;
22} DRMRIGHTS, *PDRMRIGHTS;
23
24typedef const DRMRIGHTS *PCDRMRIGHTS;
25
26/* ===============================================================
27    Digital Rights Management Functions
28    TODO: Check calling convention
29*/
30
31#ifdef __cplusplus
32extern "C" {
33#endif
34
35NTSTATUS
36NTAPI
37DrmAddContentHandlers(
38    IN  ULONG ContentId,
39    IN  PVOID *paHandlers,
40    IN  ULONG NumHandlers);
41
42NTSTATUS
43NTAPI
44DrmCreateContentMixed(
45    IN  PULONG paContentId,
46    IN  ULONG cContentId,
47    OUT PULONG pMixedContentId);
48
49NTSTATUS
50NTAPI
51DrmDestroyContent(
52    IN  ULONG ContentId);
53
54NTSTATUS
55NTAPI
56DrmForwardContentToDeviceObject(
57    IN  ULONG ContentId,
58    IN  PVOID Reserved,
59    IN  PCDRMFORWARD DrmForward);
60
61NTSTATUS
62NTAPI
63DrmForwardContentToFileObject(
64    IN  ULONG ContentId,
65    IN  PFILE_OBJECT FileObject);
66
67NTSTATUS
68NTAPI
69DrmForwardContentToInterface(
70    IN  ULONG ContentId,
71    IN  PUNKNOWN pUnknown,
72    IN  ULONG NumMethods);
73
74NTSTATUS
75NTAPI
76DrmGetContentRights(
77    IN  ULONG ContentId,
78    OUT PDRMRIGHTS DrmRights);
79
80#ifdef __cplusplus
81}
82#endif
83
84
85DEFINE_GUID(IID_IDrmAudioStream,
86    0x1915c967, 0x3299, 0x48cb, 0xa3, 0xe4, 0x69, 0xfd, 0x1d, 0x1b, 0x30, 0x6e);
87
88#undef INTERFACE
89#define INTERFACE IDrmAudioStream
90
91DECLARE_INTERFACE_(IDrmAudioStream, IUnknown)
92{
93    STDMETHOD_(NTSTATUS, QueryInterface)(THIS_
94        REFIID InterfaceId,
95        PVOID* Interface
96        ) PURE;
97    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
98    STDMETHOD_(ULONG,Release)(THIS) PURE;
99    STDMETHOD_(NTSTATUS,SetContentId)(THIS_
100        IN ULONG ContentId,
101        IN PCDRMRIGHTS DrmRights) PURE;
102};
103
104typedef IDrmAudioStream *PDRMAUDIOSTREAM;
105
106#define IMP_IDrmAudioStream                 \
107    STDMETHODIMP_(NTSTATUS) SetContentId    \
108    (   IN      ULONG       ContentId,      \
109        IN      PCDRMRIGHTS DrmRights       \
110    );
111
112
113#endif /* DRMK_H */
114
115