- Implement IDrmPort, IDrmPort2 interface

svn path=/trunk/; revision=38018
This commit is contained in:
Johannes Anderwald 2008-12-11 14:51:57 +00:00
parent 4e50d43e45
commit 9507d41bad
3 changed files with 169 additions and 0 deletions

View 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;
}

View file

@ -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>

View file

@ -74,6 +74,8 @@ NTSTATUS NewDmaChannelSlave(
IN PDMA_ADAPTER Adapter,
OUT PDMACHANNELSLAVE* DmaChannel);
NTSTATUS NewIDrmPort(
OUT PDRMPORT2 *OutPort);
typedef struct
{