Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygendrm_port.cpp
Go to the documentation of this file.
00001 /* 00002 * COPYRIGHT: See COPYING in the top level directory 00003 * PROJECT: ReactOS Kernel Streaming 00004 * FILE: drivers/wdm/audio/backpln/portcls/drm_port.cpp 00005 * PURPOSE: portcls drm port object 00006 * PROGRAMMER: Johannes Anderwald 00007 */ 00008 00009 #include "private.hpp" 00010 00011 class CDrmPort2 : public IDrmPort2 00012 { 00013 public: 00014 STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface); 00015 00016 STDMETHODIMP_(ULONG) AddRef() 00017 { 00018 InterlockedIncrement(&m_Ref); 00019 return m_Ref; 00020 } 00021 STDMETHODIMP_(ULONG) Release() 00022 { 00023 InterlockedDecrement(&m_Ref); 00024 00025 if (!m_Ref) 00026 { 00027 delete this; 00028 return 0; 00029 } 00030 return m_Ref; 00031 } 00032 IMP_IDrmPort2; 00033 CDrmPort2(IUnknown *OuterUnknown){} 00034 virtual ~CDrmPort2(){} 00035 00036 protected: 00037 LONG m_Ref; 00038 00039 }; 00040 00041 NTSTATUS 00042 NTAPI 00043 CDrmPort2::QueryInterface( 00044 IN REFIID refiid, 00045 OUT PVOID* Output) 00046 { 00047 UNICODE_STRING GuidString; 00048 00049 if (IsEqualGUIDAligned(refiid, IID_IDrmPort) || 00050 IsEqualGUIDAligned(refiid, IID_IDrmPort2) || 00051 IsEqualGUIDAligned(refiid, IID_IUnknown)) 00052 { 00053 *Output = PVOID(PUNKNOWN(this)); 00054 PUNKNOWN(*Output)->AddRef(); 00055 return STATUS_SUCCESS; 00056 } 00057 00058 if (RtlStringFromGUID(refiid, &GuidString) == STATUS_SUCCESS) 00059 { 00060 DPRINT("IDrmPort2_QueryInterface no interface!!! iface %S\n", GuidString.Buffer); 00061 RtlFreeUnicodeString(&GuidString); 00062 } 00063 return STATUS_UNSUCCESSFUL; 00064 } 00065 00066 NTSTATUS 00067 NTAPI 00068 CDrmPort2::CreateContentMixed( 00069 IN PULONG paContentId, 00070 IN ULONG cContentId, 00071 OUT PULONG pMixedContentId) 00072 { 00073 PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL); 00074 return DrmCreateContentMixed(paContentId, cContentId, pMixedContentId); 00075 } 00076 00077 NTSTATUS 00078 NTAPI 00079 CDrmPort2::DestroyContent( 00080 IN ULONG ContentId) 00081 { 00082 PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL); 00083 return DrmDestroyContent(ContentId); 00084 } 00085 00086 NTSTATUS 00087 NTAPI 00088 CDrmPort2::ForwardContentToFileObject( 00089 IN ULONG ContentId, 00090 IN PFILE_OBJECT FileObject) 00091 { 00092 return DrmForwardContentToFileObject(ContentId, FileObject); 00093 } 00094 00095 NTSTATUS 00096 NTAPI 00097 CDrmPort2::ForwardContentToInterface( 00098 IN ULONG ContentId, 00099 IN PUNKNOWN pUnknown, 00100 IN ULONG NumMethods) 00101 { 00102 PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL); 00103 return DrmForwardContentToInterface(ContentId, pUnknown, NumMethods); 00104 } 00105 00106 NTSTATUS 00107 NTAPI 00108 CDrmPort2::GetContentRights( 00109 IN ULONG ContentId, 00110 OUT PDRMRIGHTS DrmRights) 00111 { 00112 PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL); 00113 return DrmGetContentRights(ContentId, DrmRights); 00114 } 00115 00116 NTSTATUS 00117 NTAPI 00118 CDrmPort2::AddContentHandlers( 00119 IN ULONG ContentId, 00120 IN PVOID * paHandlers, 00121 IN ULONG NumHandlers) 00122 { 00123 PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL); 00124 return DrmAddContentHandlers(ContentId, paHandlers, NumHandlers); 00125 } 00126 00127 NTSTATUS 00128 NTAPI 00129 CDrmPort2::ForwardContentToDeviceObject( 00130 IN ULONG ContentId, 00131 IN PVOID Reserved, 00132 IN PCDRMFORWARD DrmForward) 00133 { 00134 PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL); 00135 return DrmForwardContentToDeviceObject(ContentId, Reserved, DrmForward); 00136 } 00137 00138 NTSTATUS 00139 NewIDrmPort( 00140 OUT PDRMPORT2 *OutPort) 00141 { 00142 CDrmPort2 * This = new(NonPagedPool, TAG_PORTCLASS)CDrmPort2(NULL); 00143 if (!This) 00144 return STATUS_INSUFFICIENT_RESOURCES; 00145 00146 This->AddRef(); 00147 00148 *OutPort = (PDRMPORT2)This; 00149 return STATUS_SUCCESS; 00150 } 00151 00152 Generated on Sat May 26 2012 04:27:07 for ReactOS by
1.7.6.1
|