mirror of
https://github.com/reactos/reactos.git
synced 2025-05-07 02:41:22 +00:00
- Implement IDrmPort, IDrmPort2 interface
svn path=/trunk/; revision=38018
This commit is contained in:
parent
4e50d43e45
commit
9507d41bad
3 changed files with 169 additions and 0 deletions
166
reactos/drivers/wdm/audio/backpln/portcls/drm_port.c
Normal file
166
reactos/drivers/wdm/audio/backpln/portcls/drm_port.c
Normal file
|
@ -0,0 +1,166 @@
|
|||
#include "private.h"
|
||||
|
||||
|
||||
const GUID IID_IDrmPort;
|
||||
const GUID IID_IDrmPort2;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
IDrmPort2Vtbl *lpVtbl;
|
||||
LONG ref;
|
||||
}IDrmPort2Impl;
|
||||
|
||||
ULONG
|
||||
NTAPI
|
||||
IDrmPort2_fnAddRef(
|
||||
IN IDrmPort2* iface)
|
||||
{
|
||||
IDrmPort2Impl * This = (IDrmPort2Impl*)iface;
|
||||
|
||||
DPRINT("IDrmPort2_AddRef: This %p\n", This);
|
||||
|
||||
return _InterlockedIncrement(&This->ref);
|
||||
}
|
||||
|
||||
ULONG
|
||||
NTAPI
|
||||
IDrmPort2_fnRelease(
|
||||
IN IDrmPort2* iface)
|
||||
{
|
||||
IDrmPort2Impl * This = (IDrmPort2Impl*)iface;
|
||||
|
||||
_InterlockedDecrement(&This->ref);
|
||||
|
||||
if (This->ref == 0)
|
||||
{
|
||||
ExFreePoolWithTag(This, TAG_PORTCLASS);
|
||||
return 0;
|
||||
}
|
||||
/* Return new reference count */
|
||||
return This->ref;
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
IDrmPort2_fnQueryInterface(
|
||||
IN IDrmPort2* iface,
|
||||
IN REFIID refiid,
|
||||
OUT PVOID* Output)
|
||||
{
|
||||
IDrmPort2Impl * This = (IDrmPort2Impl*)iface;
|
||||
|
||||
if (IsEqualGUIDAligned(refiid, &IID_IDrmPort) ||
|
||||
IsEqualGUIDAligned(refiid, &IID_IDrmPort2) ||
|
||||
IsEqualGUIDAligned(refiid, &IID_IUnknown))
|
||||
{
|
||||
*Output = (PVOID)&This->lpVtbl;
|
||||
_InterlockedIncrement(&This->ref);
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
DPRINT("IDrmPort2_QueryInterface: This %p unknown iid\n", This, This->ref);
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
IDrmPort2_fnCreateContentMixed(
|
||||
IN IDrmPort2 * iface,
|
||||
IN PULONG paContentId,
|
||||
IN ULONG cContentId,
|
||||
OUT PULONG pMixedContentId)
|
||||
{
|
||||
return DrmCreateContentMixed(paContentId, cContentId, pMixedContentId);
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
IDrmPort2_fnDestroyContent(
|
||||
IN IDrmPort2 * iface,
|
||||
IN ULONG ContentId)
|
||||
{
|
||||
return DrmDestroyContent(ContentId);
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
IDrmPort2_fnForwardContentToFileObject(
|
||||
IN IDrmPort2 * iface,
|
||||
IN ULONG ContentId,
|
||||
IN PFILE_OBJECT FileObject)
|
||||
{
|
||||
return DrmForwardContentToFileObject(ContentId, FileObject);
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
IDrmPort2_fnForwardContentToInterface(
|
||||
IN IDrmPort2 * iface,
|
||||
IN ULONG ContentId,
|
||||
IN PUNKNOWN pUnknown,
|
||||
IN ULONG NumMethods)
|
||||
{
|
||||
return DrmForwardContentToInterface(ContentId, pUnknown, NumMethods);
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
IDrmPort2_fnGetContentRights(
|
||||
IN IDrmPort2 * iface,
|
||||
IN ULONG ContentId,
|
||||
OUT PDRMRIGHTS DrmRights)
|
||||
{
|
||||
return DrmGetContentRights(ContentId, DrmRights);
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
IDrmPort2_fnAddContentHandlers(
|
||||
IN IDrmPort2 * iface,
|
||||
IN ULONG ContentId,
|
||||
IN PVOID * paHandlers,
|
||||
IN ULONG NumHandlers)
|
||||
{
|
||||
return DrmAddContentHandlers(ContentId, paHandlers, NumHandlers);
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
IDrmPort2_fnForwardContentToDeviceObject(
|
||||
IN IDrmPort2 * iface,
|
||||
IN ULONG ContentId,
|
||||
IN PVOID Reserved,
|
||||
IN PCDRMFORWARD DrmForward)
|
||||
{
|
||||
return DrmForwardContentToDeviceObject(ContentId, Reserved, DrmForward);
|
||||
}
|
||||
|
||||
static IDrmPort2Vtbl vt_IDrmPort2 =
|
||||
{
|
||||
/* IUnknown methods */
|
||||
IDrmPort2_fnQueryInterface,
|
||||
IDrmPort2_fnAddRef,
|
||||
IDrmPort2_fnRelease,
|
||||
IDrmPort2_fnCreateContentMixed,
|
||||
IDrmPort2_fnDestroyContent,
|
||||
IDrmPort2_fnForwardContentToFileObject,
|
||||
IDrmPort2_fnForwardContentToInterface,
|
||||
IDrmPort2_fnGetContentRights,
|
||||
IDrmPort2_fnAddContentHandlers,
|
||||
IDrmPort2_fnForwardContentToDeviceObject
|
||||
};
|
||||
|
||||
NTSTATUS
|
||||
NewIDrmPort(
|
||||
OUT PDRMPORT2 *OutPort)
|
||||
{
|
||||
IDrmPort2Impl * This = ExAllocatePoolWithTag(NonPagedPool, sizeof(IDrmPort2Impl), TAG_PORTCLASS);
|
||||
if (!This)
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
|
||||
This->lpVtbl = &vt_IDrmPort2;
|
||||
This->ref = 1;
|
||||
|
||||
*OutPort = (PDRMPORT2)&This->lpVtbl;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
|
@ -13,6 +13,7 @@
|
|||
<file>dll.c</file>
|
||||
<file>dma_master.c</file>
|
||||
<file>dma_slave.c</file>
|
||||
<file>drm_port.c</file>
|
||||
<file>adapter.c</file>
|
||||
<file>irp.c</file>
|
||||
<file>interrupt.c</file>
|
||||
|
|
|
@ -74,6 +74,8 @@ NTSTATUS NewDmaChannelSlave(
|
|||
IN PDMA_ADAPTER Adapter,
|
||||
OUT PDMACHANNELSLAVE* DmaChannel);
|
||||
|
||||
NTSTATUS NewIDrmPort(
|
||||
OUT PDRMPORT2 *OutPort);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue