[CMAKE]
[reactos.git] / drivers / wdm / audio / backpln / portcls / port_wavepci.cpp
index 81d6ed9..64e9009 100644 (file)
@@ -43,8 +43,6 @@ protected:
 
     PMINIPORTWAVEPCI m_Miniport;
     PDEVICE_OBJECT m_pDeviceObject;
-    BOOL m_bInitialized;
-    PRESOURCELIST m_pResourceList;
     PSERVICEGROUP m_ServiceGroup;
     PPINCOUNT m_pPinCount;
     PPOWERNOTIFY m_pPowerNotify;
@@ -187,6 +185,11 @@ CPortWavePci::QueryInterface(
         PUNKNOWN(*Output)->AddRef();
         return STATUS_SUCCESS;
     }
+    else if (IsEqualGUIDAligned(refiid, IID_IDrmPort) ||
+             IsEqualGUIDAligned(refiid, IID_IDrmPort2))
+    {
+        return NewIDrmPort((PDRMPORT2*)Output);
+    }
     else if (IsEqualGUIDAligned(refiid, IID_IPortClsVersion))
     {
         return NewPortClsVersion((PPORTCLSVERSION*)Output);
@@ -228,12 +231,6 @@ CPortWavePci::Init(
             this, DeviceObject, Irp, UnknownMiniport, UnknownAdapter, ResourceList);
     PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
 
-    if (m_bInitialized)
-    {
-        DPRINT("IPortWavePci_fnInit called again\n");
-        return STATUS_SUCCESS;
-    }
-
     Status = UnknownMiniport->QueryInterface(IID_IMiniportWavePci, (PVOID*)&Miniport);
     if (!NT_SUCCESS(Status))
     {
@@ -244,25 +241,20 @@ CPortWavePci::Init(
     // Initialize port object
     m_Miniport = Miniport;
     m_pDeviceObject = DeviceObject;
-    m_bInitialized = TRUE;
-    m_pResourceList = ResourceList;
+
     InitializeListHead(&m_EventList);
     KeInitializeSpinLock(&m_EventListLock);
 
     // increment reference on miniport adapter
     Miniport->AddRef();
-    // increment reference on resource list
-    ResourceList->AddRef();
 
     Status = Miniport->Init(UnknownAdapter, ResourceList, this, &ServiceGroup);
     if (!NT_SUCCESS(Status))
     {
         DPRINT("IPortWavePci_fnInit failed with %x\n", Status);
-        m_bInitialized = FALSE;
+
         // release reference on miniport adapter
         Miniport->Release();
-        // increment reference on resource list
-        ResourceList->Release();
         return Status;
     }
 
@@ -272,7 +264,6 @@ CPortWavePci::Init(
     {
         DPRINT("failed to get description\n");
         Miniport->Release();
-        m_bInitialized = FALSE;
         return Status;
     }
 
@@ -297,7 +288,6 @@ CPortWavePci::Init(
     {
         DPRINT("PcCreateSubdeviceDescriptor failed with %x\n", Status);
         Miniport->Release();
-        m_bInitialized = FALSE;
         return Status;
     }
 
@@ -314,6 +304,9 @@ CPortWavePci::Init(
         m_ServiceGroup->AddRef();
     }
 
+    // store for node property requests
+    m_SubDeviceDescriptor->UnknownMiniport = UnknownMiniport;
+
     // check if it supports IPinCount interface
     Status = UnknownMiniport->QueryInterface(IID_IPinCount, (PVOID*)&PinCount);
     if (NT_SUCCESS(Status))
@@ -348,18 +341,12 @@ CPortWavePci::NewRegistryKey(
     DPRINT("IPortWavePci_fnNewRegistryKey entered\n");
     PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
 
-    if (!m_bInitialized)
-    {
-        DPRINT("IPortWavePci_fnNewRegistryKey called w/o initiazed\n");
-        return STATUS_UNSUCCESSFUL;
-    }
-
     return PcNewRegistryKey(OutRegistryKey, 
                             OuterUnknown,
                             RegistryKeyType,
                             DesiredAccess,
                             m_pDeviceObject,
-                            NULL,//FIXME
+                            (ISubdevice*)this,
                             ObjectAttributes,
                             CreateOptions,
                             Disposition);
@@ -376,12 +363,6 @@ CPortWavePci::GetDeviceProperty(
     DPRINT("IPortWavePci_fnGetDeviceProperty entered\n");
     PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL);
 
-    if (!m_bInitialized)
-    {
-        DPRINT("IPortWavePci_fnNewRegistryKey called w/o initiazed\n");
-        return STATUS_UNSUCCESSFUL;
-    }
-
     return IoGetDeviceProperty(m_pDeviceObject, DeviceRegistryProperty, BufferLength, PropertyBuffer, ReturnLength);
 }
 
@@ -421,8 +402,6 @@ NTAPI
 CPortWavePci::Notify(
     IN  PSERVICEGROUP ServiceGroup)
 {
-    //IPortWavePciImpl * This = (IPortWavePciImpl*)iface;
-
     //DPRINT("IPortWavePci_fnNotify entered %p, ServiceGroup %p\n", This, ServiceGroup);
 
     if (ServiceGroup)
@@ -479,8 +458,6 @@ NTSTATUS
 NTAPI
 CPortWavePci::ReleaseChildren()
 {
-    //IPortWavePciImpl * This = (IPortWavePciImpl*)CONTAINING_RECORD(iface, IPortWavePciImpl, lpVtblSubDevice);
-
     UNIMPLEMENTED
     return STATUS_UNSUCCESSFUL;
 }