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 
11 typedef struct {
12   DWORD Flags;
13   PDEVICE_OBJECT DeviceObject;
14   PFILE_OBJECT FileObject;
15   PVOID Context;
16 } DRMFORWARD, *PDRMFORWARD, *PCDRMFORWARD;
17 
18 typedef struct {
19   BOOL  CopyProtect;
20   ULONG Reserved;
21   BOOL  DigitalOutputDisable;
22 } DRMRIGHTS, *PDRMRIGHTS;
23 
24 typedef const DRMRIGHTS *PCDRMRIGHTS;
25 
26 /* ===============================================================
27     Digital Rights Management Functions
28     TODO: Check calling convention
29 */
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
35 NTSTATUS
36 NTAPI
37 DrmAddContentHandlers(
38     IN  ULONG ContentId,
39     IN  PVOID *paHandlers,
40     IN  ULONG NumHandlers);
41 
42 NTSTATUS
43 NTAPI
44 DrmCreateContentMixed(
45     IN  PULONG paContentId,
46     IN  ULONG cContentId,
47     OUT PULONG pMixedContentId);
48 
49 NTSTATUS
50 NTAPI
51 DrmDestroyContent(
52     IN  ULONG ContentId);
53 
54 NTSTATUS
55 NTAPI
56 DrmForwardContentToDeviceObject(
57     IN  ULONG ContentId,
58     IN  PVOID Reserved,
59     IN  PCDRMFORWARD DrmForward);
60 
61 NTSTATUS
62 NTAPI
63 DrmForwardContentToFileObject(
64     IN  ULONG ContentId,
65     IN  PFILE_OBJECT FileObject);
66 
67 NTSTATUS
68 NTAPI
69 DrmForwardContentToInterface(
70     IN  ULONG ContentId,
71     IN  PUNKNOWN pUnknown,
72     IN  ULONG NumMethods);
73 
74 NTSTATUS
75 NTAPI
76 DrmGetContentRights(
77     IN  ULONG ContentId,
78     OUT PDRMRIGHTS DrmRights);
79 
80 #ifdef __cplusplus
81 }
82 #endif
83 
84 
85 DEFINE_GUID(IID_IDrmAudioStream,
86     0x1915c967, 0x3299, 0x48cb, 0xa3, 0xe4, 0x69, 0xfd, 0x1d, 0x1b, 0x30, 0x6e);
87 
88 #undef INTERFACE
89 #define INTERFACE IDrmAudioStream
90 
DECLARE_INTERFACE_(IDrmAudioStream,IUnknown)91 DECLARE_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 
104 typedef 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