2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Kernel Streaming
4 * FILE: drivers/wdm/audio/backpln/portcls/drm_port.c
5 * PURPOSE: portcls drm port object
6 * PROGRAMMER: Johannes Anderwald
13 IDrmPort2Vtbl
*lpVtbl
;
22 IDrmPort2Impl
* This
= (IDrmPort2Impl
*)iface
;
24 DPRINT("IDrmPort2_AddRef: This %p\n", This
);
26 return InterlockedIncrement(&This
->ref
);
34 IDrmPort2Impl
* This
= (IDrmPort2Impl
*)iface
;
36 InterlockedDecrement(&This
->ref
);
40 FreeItem(This
, TAG_PORTCLASS
);
43 /* Return new reference count */
49 IDrmPort2_fnQueryInterface(
54 UNICODE_STRING GuidString
;
55 IDrmPort2Impl
* This
= (IDrmPort2Impl
*)iface
;
57 if (IsEqualGUIDAligned(refiid
, &IID_IDrmPort
) ||
58 IsEqualGUIDAligned(refiid
, &IID_IDrmPort2
) ||
59 IsEqualGUIDAligned(refiid
, &IID_IUnknown
))
61 *Output
= (PVOID
)&This
->lpVtbl
;
62 InterlockedIncrement(&This
->ref
);
63 return STATUS_SUCCESS
;
66 if (RtlStringFromGUID(refiid
, &GuidString
) == STATUS_SUCCESS
)
68 DPRINT1("IDrmPort2_QueryInterface no interface!!! iface %S\n", GuidString
.Buffer
);
69 RtlFreeUnicodeString(&GuidString
);
71 return STATUS_UNSUCCESSFUL
;
76 IDrmPort2_fnCreateContentMixed(
78 IN PULONG paContentId
,
80 OUT PULONG pMixedContentId
)
82 ASSERT_IRQL_EQUAL(PASSIVE_LEVEL
);
83 return DrmCreateContentMixed(paContentId
, cContentId
, pMixedContentId
);
88 IDrmPort2_fnDestroyContent(
92 ASSERT_IRQL_EQUAL(PASSIVE_LEVEL
);
93 return DrmDestroyContent(ContentId
);
98 IDrmPort2_fnForwardContentToFileObject(
101 IN PFILE_OBJECT FileObject
)
103 return DrmForwardContentToFileObject(ContentId
, FileObject
);
108 IDrmPort2_fnForwardContentToInterface(
109 IN IDrmPort2
* iface
,
111 IN PUNKNOWN pUnknown
,
114 ASSERT_IRQL_EQUAL(PASSIVE_LEVEL
);
115 return DrmForwardContentToInterface(ContentId
, pUnknown
, NumMethods
);
120 IDrmPort2_fnGetContentRights(
121 IN IDrmPort2
* iface
,
123 OUT PDRMRIGHTS DrmRights
)
125 ASSERT_IRQL_EQUAL(PASSIVE_LEVEL
);
126 return DrmGetContentRights(ContentId
, DrmRights
);
131 IDrmPort2_fnAddContentHandlers(
132 IN IDrmPort2
* iface
,
134 IN PVOID
* paHandlers
,
135 IN ULONG NumHandlers
)
137 ASSERT_IRQL_EQUAL(PASSIVE_LEVEL
);
138 return DrmAddContentHandlers(ContentId
, paHandlers
, NumHandlers
);
143 IDrmPort2_fnForwardContentToDeviceObject(
144 IN IDrmPort2
* iface
,
147 IN PCDRMFORWARD DrmForward
)
149 ASSERT_IRQL_EQUAL(PASSIVE_LEVEL
);
150 return DrmForwardContentToDeviceObject(ContentId
, Reserved
, DrmForward
);
153 static IDrmPort2Vtbl vt_IDrmPort2
=
155 /* IUnknown methods */
156 IDrmPort2_fnQueryInterface
,
159 IDrmPort2_fnCreateContentMixed
,
160 IDrmPort2_fnDestroyContent
,
161 IDrmPort2_fnForwardContentToFileObject
,
162 IDrmPort2_fnForwardContentToInterface
,
163 IDrmPort2_fnGetContentRights
,
164 IDrmPort2_fnAddContentHandlers
,
165 IDrmPort2_fnForwardContentToDeviceObject
170 OUT PDRMPORT2
*OutPort
)
172 IDrmPort2Impl
* This
= AllocateItem(NonPagedPool
, sizeof(IDrmPort2Impl
), TAG_PORTCLASS
);
174 return STATUS_INSUFFICIENT_RESOURCES
;
176 This
->lpVtbl
= &vt_IDrmPort2
;
179 *OutPort
= (PDRMPORT2
)&This
->lpVtbl
;
180 return STATUS_SUCCESS
;