- Silence tons of debug messages

- Add file headers for portcls
- Remove StringFromCLSID hack and replace it with RtlStringFromGUID
- Implement PcCompletePendingPropertyRequest, KsoGetIrpTargetFromIrp, KsoGetIrpTargetFromFileObject
- Re-use WorkItem  / WorkItem context in sysaudio

svn path=/trunk/; revision=40351
This commit is contained in:
Johannes Anderwald 2009-04-03 17:06:16 +00:00
parent 3147006bd2
commit 345900effc
47 changed files with 631 additions and 489 deletions

View file

@ -321,7 +321,7 @@ KsAllocateObjectHeader(
{ {
RtlMoveMemory(ObjectClass, IoStack->FileObject->FileName.Buffer, 38 * sizeof(WCHAR)); RtlMoveMemory(ObjectClass, IoStack->FileObject->FileName.Buffer, 38 * sizeof(WCHAR));
ObjectClass[38] = L'\0'; ObjectClass[38] = L'\0';
DPRINT1("ObjectClass %S\n", ObjectClass); DPRINT("ObjectClass %S\n", ObjectClass);
} }
} }
/* allocate the object header */ /* allocate the object header */
@ -369,7 +369,7 @@ KsAllocateObjectHeader(
*Header = ObjectHeader; *Header = ObjectHeader;
DPRINT1("KsAllocateObjectHeader ObjectClass %S FileObject %p, ObjectHeader %p\n", ObjectClass, IoStack->FileObject, ObjectHeader); DPRINT("KsAllocateObjectHeader ObjectClass %S FileObject %p, ObjectHeader %p\n", ObjectClass, IoStack->FileObject, ObjectHeader);
return STATUS_SUCCESS; return STATUS_SUCCESS;
@ -727,7 +727,7 @@ KsCreate(
NTSTATUS Status = STATUS_SUCCESS; NTSTATUS Status = STATUS_SUCCESS;
KIRQL OldLevel; KIRQL OldLevel;
DPRINT1("KS / CREATE\n"); DPRINT("KS / CREATE\n");
/* get current stack location */ /* get current stack location */
//IoStack = IoGetCurrentIrpStackLocation(Irp); //IoStack = IoGetCurrentIrpStackLocation(Irp);
/* get device extension */ /* get device extension */
@ -766,7 +766,7 @@ KsClose(
/* get current stack location */ /* get current stack location */
IoStack = IoGetCurrentIrpStackLocation(Irp); IoStack = IoGetCurrentIrpStackLocation(Irp);
DPRINT1("KS / CLOSE\n"); DPRINT("KS / CLOSE\n");
if (IoStack->FileObject && IoStack->FileObject->FsContext) if (IoStack->FileObject && IoStack->FileObject->FsContext)
{ {
@ -794,7 +794,7 @@ KsDeviceControl(
/* get current stack location */ /* get current stack location */
IoStack = IoGetCurrentIrpStackLocation(Irp); IoStack = IoGetCurrentIrpStackLocation(Irp);
DPRINT1("KS / DeviceControl\n"); DPRINT("KS / DeviceControl\n");
if (IoStack->FileObject && IoStack->FileObject->FsContext) if (IoStack->FileObject && IoStack->FileObject->FsContext)
{ {
ObjectHeader = (PKSIOBJECT_HEADER) IoStack->FileObject->FsContext; ObjectHeader = (PKSIOBJECT_HEADER) IoStack->FileObject->FsContext;
@ -822,7 +822,7 @@ KsRead(
/* get current stack location */ /* get current stack location */
IoStack = IoGetCurrentIrpStackLocation(Irp); IoStack = IoGetCurrentIrpStackLocation(Irp);
DPRINT1("KS / Read\n"); DPRINT("KS / Read\n");
if (IoStack->FileObject && IoStack->FileObject->FsContext) if (IoStack->FileObject && IoStack->FileObject->FsContext)
{ {
ObjectHeader = (PKSIOBJECT_HEADER) IoStack->FileObject->FsContext; ObjectHeader = (PKSIOBJECT_HEADER) IoStack->FileObject->FsContext;
@ -850,7 +850,7 @@ KsWrite(
/* get current stack location */ /* get current stack location */
IoStack = IoGetCurrentIrpStackLocation(Irp); IoStack = IoGetCurrentIrpStackLocation(Irp);
DPRINT1("KS / Write\n"); DPRINT("KS / Write\n");
if (IoStack->FileObject && IoStack->FileObject->FsContext) if (IoStack->FileObject && IoStack->FileObject->FsContext)
{ {
ObjectHeader = (PKSIOBJECT_HEADER) IoStack->FileObject->FsContext; ObjectHeader = (PKSIOBJECT_HEADER) IoStack->FileObject->FsContext;
@ -878,7 +878,7 @@ KsFlushBuffers(
/* get current stack location */ /* get current stack location */
IoStack = IoGetCurrentIrpStackLocation(Irp); IoStack = IoGetCurrentIrpStackLocation(Irp);
DPRINT1("KS / FlushBuffers\n"); DPRINT("KS / FlushBuffers\n");
if (IoStack->FileObject && IoStack->FileObject->FsContext) if (IoStack->FileObject && IoStack->FileObject->FsContext)
{ {
ObjectHeader = (PKSIOBJECT_HEADER) IoStack->FileObject->FsContext; ObjectHeader = (PKSIOBJECT_HEADER) IoStack->FileObject->FsContext;
@ -906,7 +906,7 @@ KsQuerySecurity(
/* get current stack location */ /* get current stack location */
IoStack = IoGetCurrentIrpStackLocation(Irp); IoStack = IoGetCurrentIrpStackLocation(Irp);
DPRINT1("KS / QuerySecurity\n"); DPRINT("KS / QuerySecurity\n");
if (IoStack->FileObject && IoStack->FileObject->FsContext) if (IoStack->FileObject && IoStack->FileObject->FsContext)
{ {
ObjectHeader = (PKSIOBJECT_HEADER) IoStack->FileObject->FsContext; ObjectHeader = (PKSIOBJECT_HEADER) IoStack->FileObject->FsContext;
@ -934,7 +934,7 @@ KsSetSecurity(
/* get current stack location */ /* get current stack location */
IoStack = IoGetCurrentIrpStackLocation(Irp); IoStack = IoGetCurrentIrpStackLocation(Irp);
DPRINT1("KS / SetSecurity\n"); DPRINT("KS / SetSecurity\n");
if (IoStack->FileObject && IoStack->FileObject->FsContext) if (IoStack->FileObject && IoStack->FileObject->FsContext)
{ {
ObjectHeader = (PKSIOBJECT_HEADER) IoStack->FileObject->FsContext; ObjectHeader = (PKSIOBJECT_HEADER) IoStack->FileObject->FsContext;
@ -1019,7 +1019,7 @@ KsDispatchIrp(
*/ */
IoStack = IoGetCurrentIrpStackLocation(Irp); IoStack = IoGetCurrentIrpStackLocation(Irp);
DPRINT1("KsDispatchIrp %x\n", IoStack->MajorFunction); DPRINT("KsDispatchIrp %x\n", IoStack->MajorFunction);
switch (IoStack->MajorFunction) switch (IoStack->MajorFunction)
{ {

View file

@ -3,6 +3,7 @@
#include <ntifs.h> #include <ntifs.h>
#include <ntddk.h> #include <ntddk.h>
#define NDEBUG
#include <debug.h> #include <debug.h>
#include <portcls.h> #include <portcls.h>
#include <ks.h> #include <ks.h>

View file

@ -1,7 +1,7 @@
/* /*
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming * PROJECT: ReactOS Kernel Streaming
* FILE: drivers/multimedia/portcls/adapter.c * FILE: drivers/wdm/audio/backpln/portcls/api.c
* PURPOSE: Port Class driver / DriverEntry and IRP handlers * PURPOSE: Port Class driver / DriverEntry and IRP handlers
* PROGRAMMER: Andrew Greenwood * PROGRAMMER: Andrew Greenwood
* *
@ -61,7 +61,7 @@ PcInitializeAdapterDriver(
DriverObject->DriverExtension->AddDevice = AddDevice; DriverObject->DriverExtension->AddDevice = AddDevice;
/* KS handles these */ /* KS handles these */
DPRINT1("Setting KS function handlers\n"); DPRINT("Setting KS function handlers\n");
KsSetMajorFunctionHandler(DriverObject, IRP_MJ_CLOSE); KsSetMajorFunctionHandler(DriverObject, IRP_MJ_CLOSE);
KsSetMajorFunctionHandler(DriverObject, IRP_MJ_DEVICE_CONTROL); KsSetMajorFunctionHandler(DriverObject, IRP_MJ_DEVICE_CONTROL);
KsSetMajorFunctionHandler(DriverObject, IRP_MJ_FLUSH_BUFFERS); KsSetMajorFunctionHandler(DriverObject, IRP_MJ_FLUSH_BUFFERS);
@ -70,7 +70,7 @@ PcInitializeAdapterDriver(
KsSetMajorFunctionHandler(DriverObject, IRP_MJ_SET_SECURITY); KsSetMajorFunctionHandler(DriverObject, IRP_MJ_SET_SECURITY);
KsSetMajorFunctionHandler(DriverObject, IRP_MJ_WRITE); KsSetMajorFunctionHandler(DriverObject, IRP_MJ_WRITE);
DPRINT1("PortCls has finished initializing the adapter driver\n"); DPRINT("PortCls has finished initializing the adapter driver\n");
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }

View file

@ -1,3 +1,11 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming
* FILE: drivers/wdm/audio/backpln/portcls/api.c
* PURPOSE: Port api functions
* PROGRAMMER: Johannes Anderwald
*/
#include "private.h" #include "private.h"
/* /*
@ -74,6 +82,38 @@ PcUnregisterIoTimeout(
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
/*
* @implemented
*/
NTSTATUS
NTAPI
PcCompletePendingPropertyRequest(
IN PPCPROPERTY_REQUEST PropertyRequest,
IN NTSTATUS NtStatus)
{
/* sanity checks */
if (!PropertyRequest)
return STATUS_INVALID_PARAMETER;
ASSERT(PropertyRequest->Irp);
ASSERT(NtStatus != STATUS_PENDING);
/* set the final status code */
PropertyRequest->Irp->IoStatus.Status = NtStatus;
/* complete the irp */
IoCompleteRequest(PropertyRequest->Irp, IO_SOUND_INCREMENT);
/* free the property request */
ExFreePool(PropertyRequest);
/* return success */
return STATUS_SUCCESS;
}
/* /*
* @implemented * @implemented
*/ */

View file

@ -1,3 +1,12 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming
* FILE: drivers/wdm/audio/backpln/portcls/connection.c
* PURPOSE: portcls physical connection registration
* PROGRAMMER: Johannes Anderwald
*/
#include "private.h" #include "private.h"
@ -106,7 +115,7 @@ PcRegisterPhysicalConnection(
IN ULONG ToPin) IN ULONG ToPin)
{ {
DPRINT1("PcRegisterPhysicalConnection\n"); DPRINT("PcRegisterPhysicalConnection\n");
if (!DeviceObject || !FromUnknown || !ToUnknown) if (!DeviceObject || !FromUnknown || !ToUnknown)
return STATUS_INVALID_PARAMETER; return STATUS_INVALID_PARAMETER;

View file

@ -1,3 +1,12 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming
* FILE: drivers/wdm/audio/backpln/portcls/dispatcher.c
* PURPOSE: portcls generic dispatcher
* PROGRAMMER: Johannes Anderwald
*/
#include "private.h" #include "private.h"
NTSTATUS NTSTATUS
@ -221,7 +230,7 @@ NewDispatchObject(
IoStack->FileObject->FsContext2 = (PVOID)Target; IoStack->FileObject->FsContext2 = (PVOID)Target;
Status = KsAllocateObjectHeader(&ObjectHeader, 1, CreateItem, Irp, &DispatchTable); Status = KsAllocateObjectHeader(&ObjectHeader, 1, CreateItem, Irp, &DispatchTable);
DPRINT1("KsAllocateObjectHeader result %x\n", Status); DPRINT("KsAllocateObjectHeader result %x\n", Status);
return Status; return Status;
} }

View file

@ -1,19 +1,19 @@
/* /*
ReactOS Kernel Streaming * COPYRIGHT: See COPYING in the top level directory
Port Class / Library Init and Cleanup * PROJECT: ReactOS Kernel Streaming
* FILE: drivers/wdm/audio/backpln/portcls/dll.c
* PURPOSE: portcls generic dispatcher
* PROGRAMMER: Andrew Greenwood
*/
Author: Andrew Greenwood
Notes:
-
*/
#include "private.h" #include "private.h"
/* /*
* @implemented * @implemented
*/ */
ULONG NTAPI ULONG
NTAPI
DllInitialize(ULONG Unknown) DllInitialize(ULONG Unknown)
{ {
return 0; return 0;
@ -22,7 +22,8 @@ DllInitialize(ULONG Unknown)
/* /*
* @implemented * @implemented
*/ */
ULONG NTAPI ULONG
NTAPI
DllUnload(VOID) DllUnload(VOID)
{ {
return 0; return 0;

View file

@ -1,3 +1,11 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming
* FILE: drivers/wdm/audio/backpln/portcls/dma_slave.c
* PURPOSE: portcls dma support object
* PROGRAMMER: Johannes Anderwald
*/
#include "private.h" #include "private.h"
@ -523,7 +531,7 @@ PcNewDmaChannel(
This->MaxMapRegisters = MapRegisters; This->MaxMapRegisters = MapRegisters;
*OutDmaChannel = (PVOID)(&This->lpVtbl); *OutDmaChannel = (PVOID)(&This->lpVtbl);
DPRINT1("PcNewDmaChannel result %p\n", *OutDmaChannel); DPRINT("PcNewDmaChannel result %p\n", *OutDmaChannel);
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }

View file

@ -1,20 +1,18 @@
/* /*
ReactOS Kernel Streaming * COPYRIGHT: See COPYING in the top level directory
Port Class / Digital Rights Management * PROJECT: ReactOS Kernel Streaming
* FILE: drivers/wdm/audio/backpln/portcls/drm.c
Author: Andrew Greenwood * PURPOSE: portcls drm functions
* PROGRAMMER: Andrew Greenwood
Notes: */
These are convenience functions for accessing DRM facilities, as
documented here:
http://www.osronline.com/ddkx/stream/aud-prop_9f77.htm
*/
#include "private.h" #include "private.h"
#include <portcls.h>
#include <drmk.h>
NTSTATUS NTAPI /*
* @implemented
*/
NTSTATUS
NTAPI
PcAddContentHandlers( PcAddContentHandlers(
IN ULONG ContentId, IN ULONG ContentId,
IN PVOID *paHandlers, IN PVOID *paHandlers,
@ -23,7 +21,11 @@ PcAddContentHandlers(
return DrmAddContentHandlers(ContentId, paHandlers, NumHandlers); return DrmAddContentHandlers(ContentId, paHandlers, NumHandlers);
} }
NTSTATUS NTAPI /*
* @implemented
*/
NTSTATUS
NTAPI
PcCreateContentMixed( PcCreateContentMixed(
IN PULONG paContentId, IN PULONG paContentId,
IN ULONG cContentId, IN ULONG cContentId,
@ -32,14 +34,22 @@ PcCreateContentMixed(
return DrmCreateContentMixed(paContentId, cContentId, pMixedContentId); return DrmCreateContentMixed(paContentId, cContentId, pMixedContentId);
} }
NTSTATUS NTAPI /*
* @implemented
*/
NTSTATUS
NTAPI
PcDestroyContent( PcDestroyContent(
IN ULONG ContentId) IN ULONG ContentId)
{ {
return DrmDestroyContent(ContentId); return DrmDestroyContent(ContentId);
} }
NTSTATUS NTAPI /*
* @implemented
*/
NTSTATUS
NTAPI
PcForwardContentToDeviceObject( PcForwardContentToDeviceObject(
IN ULONG ContentId, IN ULONG ContentId,
IN PVOID Reserved, IN PVOID Reserved,
@ -48,7 +58,11 @@ PcForwardContentToDeviceObject(
return DrmForwardContentToDeviceObject(ContentId, Reserved, DrmForward); return DrmForwardContentToDeviceObject(ContentId, Reserved, DrmForward);
} }
NTSTATUS NTAPI /*
* @implemented
*/
NTSTATUS
NTAPI
PcForwardContentToFileObject( PcForwardContentToFileObject(
IN ULONG ContentId, IN ULONG ContentId,
IN PFILE_OBJECT FileObject) IN PFILE_OBJECT FileObject)
@ -56,7 +70,11 @@ PcForwardContentToFileObject(
return DrmForwardContentToFileObject(ContentId, FileObject); return DrmForwardContentToFileObject(ContentId, FileObject);
} }
NTSTATUS NTAPI /*
* @implemented
*/
NTSTATUS
NTAPI
PcForwardContentToInterface( PcForwardContentToInterface(
IN ULONG ContentId, IN ULONG ContentId,
IN PUNKNOWN pUnknown, IN PUNKNOWN pUnknown,
@ -65,7 +83,11 @@ PcForwardContentToInterface(
return DrmForwardContentToInterface(ContentId, pUnknown, NumMethods); return DrmForwardContentToInterface(ContentId, pUnknown, NumMethods);
} }
NTSTATUS NTAPI /*
* @implemented
*/
NTSTATUS
NTAPI
PcGetContentRights( PcGetContentRights(
IN ULONG ContentId, IN ULONG ContentId,
OUT PDRMRIGHTS DrmRights) OUT PDRMRIGHTS DrmRights)

View file

@ -1,3 +1,11 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming
* FILE: drivers/wdm/audio/backpln/portcls/drm_port.c
* PURPOSE: portcls drm port object
* PROGRAMMER: Johannes Anderwald
*/
#include "private.h" #include "private.h"
typedef struct typedef struct
@ -43,7 +51,7 @@ IDrmPort2_fnQueryInterface(
IN REFIID refiid, IN REFIID refiid,
OUT PVOID* Output) OUT PVOID* Output)
{ {
WCHAR Buffer[100]; UNICODE_STRING GuidString;
IDrmPort2Impl * This = (IDrmPort2Impl*)iface; IDrmPort2Impl * This = (IDrmPort2Impl*)iface;
if (IsEqualGUIDAligned(refiid, &IID_IDrmPort) || if (IsEqualGUIDAligned(refiid, &IID_IDrmPort) ||
@ -55,8 +63,11 @@ IDrmPort2_fnQueryInterface(
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
StringFromCLSID(refiid, Buffer); if (RtlStringFromGUID(refiid, &GuidString) == STATUS_SUCCESS)
DPRINT1("IDrmPort2_QueryInterface no interface!!! iface %S\n", Buffer); {
DPRINT1("IDrmPort2_QueryInterface no interface!!! iface %S\n", GuidString.Buffer);
RtlFreeUnicodeString(&GuidString);
}
return STATUS_UNSUCCESSFUL; return STATUS_UNSUCCESSFUL;
} }

View file

@ -1,3 +1,11 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming
* FILE: drivers/wdm/audio/backpln/portcls/filter_wavecyclic.c
* PURPOSE: portcls wave cyclic filter
* PROGRAMMER: Johannes Anderwald
*/
#include "private.h" #include "private.h"
typedef struct typedef struct

View file

@ -1,8 +1,14 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming
* FILE: drivers/wdm/audio/backpln/portcls/guids.c
* PURPOSE: portcls guid mess
* PROGRAMMER: Johannes Anderwald
*/
#include "private.h" #include "private.h"
const GUID CLSID_PortTopology = {0xb4c90a32L, 0x5791, 0x11d0, {0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44}}; const GUID CLSID_PortTopology = {0xb4c90a32L, 0x5791, 0x11d0, {0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44}};
const GUID CLSID_PortMidi = {0xb4c90a43L, 0x5791, 0x11d0, {0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44}}; const GUID CLSID_PortMidi = {0xb4c90a43L, 0x5791, 0x11d0, {0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44}};
const GUID CLSID_PortWaveCyclic = {0xb4c90a2aL, 0x5791, 0x11d0, {0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44}}; const GUID CLSID_PortWaveCyclic = {0xb4c90a2aL, 0x5791, 0x11d0, {0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44}};

View file

@ -1,3 +1,12 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming
* FILE: drivers/wdm/audio/backpln/portcls/interrupt.c
* PURPOSE: portcls interrupt object
* PROGRAMMER: Johannes Anderwald
*/
#include "private.h" #include "private.h"
typedef struct typedef struct
@ -39,7 +48,7 @@ IInterruptSync_fnQueryInterface(
{ {
IInterruptSyncImpl * This = (IInterruptSyncImpl*)iface; IInterruptSyncImpl * This = (IInterruptSyncImpl*)iface;
DPRINT1("IInterruptSync_fnQueryInterface: This %p\n", This); DPRINT("IInterruptSync_fnQueryInterface: This %p\n", This);
if (IsEqualGUIDAligned(refiid, &IID_IInterruptSync) || if (IsEqualGUIDAligned(refiid, &IID_IInterruptSync) ||
IsEqualGUIDAligned(refiid, &IID_IUnknown)) IsEqualGUIDAligned(refiid, &IID_IUnknown))
@ -59,7 +68,7 @@ IInterruptSync_fnAddRef(
{ {
IInterruptSyncImpl * This = (IInterruptSyncImpl*)iface; IInterruptSyncImpl * This = (IInterruptSyncImpl*)iface;
DPRINT1("IInterruptSync_AddRef: This %p\n", This); DPRINT("IInterruptSync_AddRef: This %p\n", This);
return InterlockedIncrement(&This->ref); return InterlockedIncrement(&This->ref);
} }
@ -75,7 +84,7 @@ IInterruptSync_fnRelease(
InterlockedDecrement(&This->ref); InterlockedDecrement(&This->ref);
DPRINT1("IInterruptSync_Release: This %p new ref %u\n", This, This->ref); DPRINT("IInterruptSync_Release: This %p new ref %u\n", This, This->ref);
if (This->ref == 0) if (This->ref == 0)
{ {
@ -86,9 +95,8 @@ IInterruptSync_fnRelease(
FreeItem(Entry, TAG_PORTCLASS); FreeItem(Entry, TAG_PORTCLASS);
} }
//This->ResourceList->lpVtbl->Release(This->ResourceList); This->ResourceList->lpVtbl->Release(This->ResourceList);
//FreeItem(This, TAG_PORTCLASS); FreeItem(This, TAG_PORTCLASS);
DPRINT1("IInterruptSync_Release: complete\n");
return 0; return 0;
} }
/* Return new reference count */ /* Return new reference count */
@ -106,7 +114,7 @@ IInterruptSynchronizedRoutine(
IN PVOID ServiceContext) IN PVOID ServiceContext)
{ {
IInterruptSyncImpl * This = (IInterruptSyncImpl*)ServiceContext; IInterruptSyncImpl * This = (IInterruptSyncImpl*)ServiceContext;
//DPRINT1("IInterruptSynchronizedRoutine This %p SyncRoutine %p Context %p\n", This, This->SyncRoutine, This->DynamicContext); DPRINT("IInterruptSynchronizedRoutine This %p SyncRoutine %p Context %p\n", This, This->SyncRoutine, This->DynamicContext);
return This->SyncRoutine((IInterruptSync*)&This->lpVtbl, This->DynamicContext); return This->SyncRoutine((IInterruptSync*)&This->lpVtbl, This->DynamicContext);
} }
@ -120,7 +128,7 @@ IInterruptSync_fnCallSynchronizedRoutine(
KIRQL OldIrql; KIRQL OldIrql;
IInterruptSyncImpl * This = (IInterruptSyncImpl*)iface; IInterruptSyncImpl * This = (IInterruptSyncImpl*)iface;
//DPRINT1("IInterruptSync_fnCallSynchronizedRoutine This %p Routine %p DynamicContext %p Irql %x Interrupt %p\n", This, Routine, DynamicContext, KeGetCurrentIrql(), This->Interrupt); DPRINT("IInterruptSync_fnCallSynchronizedRoutine This %p Routine %p DynamicContext %p Irql %x Interrupt %p\n", This, Routine, DynamicContext, KeGetCurrentIrql(), This->Interrupt);
if (!This->Interrupt) if (!This->Interrupt)
{ {
@ -152,7 +160,7 @@ IInterruptSync_fnGetKInterrupt(
IN IInterruptSync * iface) IN IInterruptSync * iface)
{ {
IInterruptSyncImpl * This = (IInterruptSyncImpl*)iface; IInterruptSyncImpl * This = (IInterruptSyncImpl*)iface;
DPRINT1("IInterruptSynchronizedRoutine\n"); DPRINT("IInterruptSynchronizedRoutine\n");
return This->Interrupt; return This->Interrupt;
} }
@ -233,7 +241,7 @@ IInterruptSync_fnConnect(
NTSTATUS Status; NTSTATUS Status;
PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor; PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor;
DPRINT1("IInterruptSync_fnConnect\n"); DPRINT("IInterruptSync_fnConnect\n");
Descriptor = This->ResourceList->lpVtbl->FindTranslatedEntry(This->ResourceList, CmResourceTypeInterrupt, This->ResourceIndex); Descriptor = This->ResourceList->lpVtbl->FindTranslatedEntry(This->ResourceList, CmResourceTypeInterrupt, This->ResourceIndex);
if (!Descriptor) if (!Descriptor)
@ -254,7 +262,7 @@ IInterruptSync_fnConnect(
Descriptor->u.Interrupt.Affinity, Descriptor->u.Interrupt.Affinity,
FALSE); FALSE);
DPRINT1("IInterruptSync_fnConnect result %x\n", Status); DPRINT("IInterruptSync_fnConnect result %x\n", Status);
return Status; return Status;
} }
@ -265,7 +273,7 @@ IInterruptSync_fnDisconnect(
IN IInterruptSync * iface) IN IInterruptSync * iface)
{ {
IInterruptSyncImpl * This = (IInterruptSyncImpl*)iface; IInterruptSyncImpl * This = (IInterruptSyncImpl*)iface;
DPRINT1("IInterruptSync_fnDisconnect\n"); DPRINT("IInterruptSync_fnDisconnect\n");
if (!This->Interrupt) if (!This->Interrupt)
{ {
@ -288,7 +296,7 @@ IInterruptSync_fnRegisterServiceRoutine(
PSYNC_ENTRY NewEntry; PSYNC_ENTRY NewEntry;
IInterruptSyncImpl * This = (IInterruptSyncImpl*)iface; IInterruptSyncImpl * This = (IInterruptSyncImpl*)iface;
DPRINT1("IInterruptSync_fnRegisterServiceRoutine\n"); DPRINT("IInterruptSync_fnRegisterServiceRoutine\n");
NewEntry = AllocateItem(NonPagedPool, sizeof(SYNC_ENTRY), TAG_PORTCLASS); NewEntry = AllocateItem(NonPagedPool, sizeof(SYNC_ENTRY), TAG_PORTCLASS);
if (!NewEntry) if (!NewEntry)
@ -332,7 +340,7 @@ PcNewInterruptSync(
{ {
IInterruptSyncImpl * This; IInterruptSyncImpl * This;
DPRINT1("PcNewInterruptSync entered OutInterruptSync %p OuterUnknown %p ResourceList %p ResourceIndex %u Mode %d\n", DPRINT("PcNewInterruptSync entered OutInterruptSync %p OuterUnknown %p ResourceList %p ResourceIndex %u Mode %d\n",
OutInterruptSync, OuterUnknown, ResourceList, ResourceIndex, Mode); OutInterruptSync, OuterUnknown, ResourceList, ResourceIndex, Mode);
if (!OutInterruptSync || !ResourceList || Mode > InterruptSyncModeRepeat || Mode < 0) if (!OutInterruptSync || !ResourceList || Mode > InterruptSyncModeRepeat || Mode < 0)
@ -358,7 +366,7 @@ PcNewInterruptSync(
KeInitializeSpinLock(&This->Lock); KeInitializeSpinLock(&This->Lock);
*OutInterruptSync = (PINTERRUPTSYNC)&This->lpVtbl; *OutInterruptSync = (PINTERRUPTSYNC)&This->lpVtbl;
DPRINT1("PcNewInterruptSync success %p\n", *OutInterruptSync); DPRINT("PcNewInterruptSync success %p\n", *OutInterruptSync);
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }

View file

@ -1,10 +1,10 @@
/* /*
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS * PROJECT: ReactOS
* FILE: drivers/multimedia/portcls/irp.c * FILE: drivers/wdm/audio/backpln/portcls/irp.c
* PURPOSE: Port Class driver / IRP Handling * PURPOSE: Port Class driver / IRP Handling
* PROGRAMMER: Andrew Greenwood * PROGRAMMER: Andrew Greenwood
* * Johannes Anderwald
* HISTORY: * HISTORY:
* 27 Jan 07 Created * 27 Jan 07 Created
*/ */
@ -13,30 +13,6 @@
#include "private.h" #include "private.h"
#include <portcls.h> #include <portcls.h>
/*
A safe place for IRPs to be bounced to, if no handler has been
set. Whether this is a good idea or not...?
*/
#if 0
static
NTSTATUS
NTAPI
IrpStub(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp)
{
NTSTATUS status = STATUS_NOT_SUPPORTED;
Irp->IoStatus.Status = STATUS_NOT_SUPPORTED;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
DPRINT1("IRP Stub called\n");
return status;
}
#endif
/* /*
Handles IRP_MJ_CREATE, which occurs when someone wants to make use of Handles IRP_MJ_CREATE, which occurs when someone wants to make use of
a device. a device.
@ -47,7 +23,7 @@ PortClsCreate(
IN PDEVICE_OBJECT DeviceObject, IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp) IN PIRP Irp)
{ {
DPRINT1("PortClsCreate called\n"); DPRINT("PortClsCreate called\n");
return KsDispatchIrp(DeviceObject, Irp); return KsDispatchIrp(DeviceObject, Irp);
} }
@ -68,7 +44,7 @@ PortClsPnp(
PIO_STACK_LOCATION IoStack; PIO_STACK_LOCATION IoStack;
IResourceList* resource_list = NULL; IResourceList* resource_list = NULL;
DPRINT1("PortClsPnp called\n"); DPRINT("PortClsPnp called\n");
DeviceExt = (PPCLASS_DEVICE_EXTENSION) DeviceObject->DeviceExtension; DeviceExt = (PPCLASS_DEVICE_EXTENSION) DeviceObject->DeviceExtension;
IoStack = IoGetCurrentIrpStackLocation(Irp); IoStack = IoGetCurrentIrpStackLocation(Irp);
@ -165,7 +141,7 @@ PortClsPower(
IN PDEVICE_OBJECT DeviceObject, IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp) IN PIRP Irp)
{ {
DPRINT1("PortClsPower called\n"); DPRINT("PortClsPower called\n");
/* TODO */ /* TODO */
@ -186,7 +162,7 @@ PortClsSysControl(
IN PDEVICE_OBJECT DeviceObject, IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp) IN PIRP Irp)
{ {
DPRINT1("PortClsSysControl called\n"); DPRINT("PortClsSysControl called\n");
/* TODO */ /* TODO */
@ -215,7 +191,7 @@ PcDispatchIrp(
{ {
PIO_STACK_LOCATION IoStack; PIO_STACK_LOCATION IoStack;
DPRINT1("PcDispatchIrp called - handling IRP in PortCls\n"); DPRINT("PcDispatchIrp called - handling IRP in PortCls\n");
IoStack = IoGetCurrentIrpStackLocation(Irp); IoStack = IoGetCurrentIrpStackLocation(Irp);
@ -287,8 +263,6 @@ PcForwardIrpSynchronous(
PPCLASS_DEVICE_EXTENSION DeviceExt; PPCLASS_DEVICE_EXTENSION DeviceExt;
NTSTATUS Status; NTSTATUS Status;
DPRINT1("PcForwardIrpSynchronous\n");
DeviceExt = (PPCLASS_DEVICE_EXTENSION)DeviceObject->DeviceExtension; DeviceExt = (PPCLASS_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
/* initialize the notification event */ /* initialize the notification event */
@ -296,8 +270,6 @@ PcForwardIrpSynchronous(
IoCopyCurrentIrpStackLocationToNext(Irp); IoCopyCurrentIrpStackLocationToNext(Irp);
DPRINT1("PcForwardIrpSynchronous %p Irp %p\n", DeviceExt->PrevDeviceObject, Irp);
IoSetCompletionRoutine(Irp, CompletionRoutine, (PVOID)&Event, TRUE, TRUE, TRUE); IoSetCompletionRoutine(Irp, CompletionRoutine, (PVOID)&Event, TRUE, TRUE, TRUE);
/* now call the driver */ /* now call the driver */
@ -309,6 +281,5 @@ PcForwardIrpSynchronous(
KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL); KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
Status = STATUS_SUCCESS; Status = STATUS_SUCCESS;
} }
DPRINT1("Returning status %x\n", Status);
return Status; return Status;
} }

View file

@ -1,12 +1,9 @@
/* /*
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming * PROJECT: ReactOS Kernel Streaming
* FILE: drivers/multimedia/portcls/irpstream.c * FILE: drivers/wdm/audio/backpln/portcls/irpstream.c
* PURPOSE: IRP Stream handling * PURPOSE: IRP Stream handling
* PROGRAMMER: Johannes Anderwald * PROGRAMMER: Johannes Anderwald
*
* HISTORY:
* 27 Jan 07 Created
*/ */
#include "private.h" #include "private.h"

View file

@ -1,19 +1,13 @@
/* /*
ReactOS Operating System * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming
Port Class API * FILE: drivers/wdm/audio/backpln/portcls/miniport.c
IMiniPortMidi Implementation * PURPOSE: Miniport construction api
* PROGRAMMER: Andrew Greenwood
by Andrew Greenwood */
REFERENCE:
http://www.osronline.com/ddkx/stream/audmp-routines_64vn.htm
*/
#include "private.h" #include "private.h"
/* /*
* @implemented * @implemented
*/ */
@ -24,7 +18,7 @@ PcNewMiniport(
{ {
NTSTATUS Status = STATUS_INVALID_PARAMETER; NTSTATUS Status = STATUS_INVALID_PARAMETER;
DPRINT1("PcNewMiniport entered\n"); DPRINT("PcNewMiniport entered\n");
if (!OutMiniport) if (!OutMiniport)
{ {

View file

@ -1,3 +1,11 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming
* FILE: drivers/wdm/audio/backpln/portcls/miniport_dmus.c
* PURPOSE: DirectMusic miniport
* PROGRAMMER: Johannes Anderwald
*/
#include "private.h" #include "private.h"
typedef struct typedef struct

View file

@ -1,3 +1,11 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming
* FILE: drivers/wdm/audio/backpln/portcls/miniport_fmsynth.c
* PURPOSE: Miniport FM Synth
* PROGRAMMER: Johannes Anderwald
*/
#include "private.h" #include "private.h"

View file

@ -1,3 +1,11 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming
* FILE: drivers/wdm/audio/backpln/portcls/pin_wavecyclic.c
* PURPOSE: WaveCyclic IRP Audio Pin
* PROGRAMMER: Johannes Anderwald
*/
#include "private.h" #include "private.h"
typedef struct typedef struct
@ -335,7 +343,7 @@ IPortPinWaveCyclic_fnNewIrpTarget(
IN PIRP Irp, IN PIRP Irp,
IN KSOBJECT_CREATE *CreateObject) IN KSOBJECT_CREATE *CreateObject)
{ {
DPRINT1("IPortPinWaveCyclic_fnNewIrpTarget\n"); UNIMPLEMENTED
return STATUS_UNSUCCESSFUL; return STATUS_UNSUCCESSFUL;
} }
@ -353,7 +361,7 @@ IPortPinWaveCyclic_HandleKsProperty(
IoStack = IoGetCurrentIrpStackLocation(Irp); IoStack = IoGetCurrentIrpStackLocation(Irp);
//DPRINT1("IPortPinWave_HandleKsProperty entered\n"); DPRINT("IPortPinWave_HandleKsProperty entered\n");
if (IoStack->Parameters.DeviceIoControl.InputBufferLength < sizeof(KSPROPERTY)) if (IoStack->Parameters.DeviceIoControl.InputBufferLength < sizeof(KSPROPERTY))
{ {
@ -513,8 +521,7 @@ IPortPinWaveCyclic_HandleKsStream(
{ {
IPortPinWaveCyclicImpl * This = (IPortPinWaveCyclicImpl*)iface; IPortPinWaveCyclicImpl * This = (IPortPinWaveCyclicImpl*)iface;
DPRINT1("IPortPinWaveCyclic_HandleKsStream entered State %u Stream %p\n", This->State, This->Stream); DPRINT("IPortPinWaveCyclic_HandleKsStream entered State %u Stream %p\n", This->State, This->Stream);
DbgBreakPoint();
return STATUS_PENDING; return STATUS_PENDING;
} }
@ -783,7 +790,7 @@ IPortPinWaveCyclic_fnFastRead(
PIRP Irp; PIRP Irp;
IPortPinWaveCyclicImpl * This = (IPortPinWaveCyclicImpl*)iface; IPortPinWaveCyclicImpl * This = (IPortPinWaveCyclicImpl*)iface;
DPRINT1("IPortPinWaveCyclic_fnFastRead entered\n"); DPRINT("IPortPinWaveCyclic_fnFastRead entered\n");
Packet = (PCONTEXT_WRITE)Buffer; Packet = (PCONTEXT_WRITE)Buffer;
@ -798,7 +805,7 @@ IPortPinWaveCyclic_fnFastRead(
if (This->IrpQueue->lpVtbl->MinimumDataAvailable(This->IrpQueue) == TRUE && This->State != KSSTATE_RUN) if (This->IrpQueue->lpVtbl->MinimumDataAvailable(This->IrpQueue) == TRUE && This->State != KSSTATE_RUN)
{ {
/* some should initiate a state request but didnt do it */ /* some should initiate a state request but didnt do it */
DPRINT1("Starting stream with %lu mappings Offset %u\n", This->IrpQueue->lpVtbl->NumMappings(This->IrpQueue), This->ActiveIrpOffset); DPRINT1("Starting stream with %lu mappings\n", This->IrpQueue->lpVtbl->NumMappings(This->IrpQueue));
This->Stream->lpVtbl->SetState(This->Stream, KSSTATE_RUN); This->Stream->lpVtbl->SetState(This->Stream, KSSTATE_RUN);
This->State = KSSTATE_RUN; This->State = KSSTATE_RUN;
@ -827,7 +834,7 @@ IPortPinWaveCyclic_fnFastWrite(
PIRP Irp; PIRP Irp;
IPortPinWaveCyclicImpl * This = (IPortPinWaveCyclicImpl*)iface; IPortPinWaveCyclicImpl * This = (IPortPinWaveCyclicImpl*)iface;
//DPRINT1("IPortPinWaveCyclic_fnFastWrite entered\n"); DPRINT("IPortPinWaveCyclic_fnFastWrite entered\n");
Packet = (PCONTEXT_WRITE)Buffer; Packet = (PCONTEXT_WRITE)Buffer;
@ -854,7 +861,7 @@ IPortPinWaveCyclic_fnFastWrite(
if (This->IrpQueue->lpVtbl->MinimumDataAvailable(This->IrpQueue) == TRUE && This->State != KSSTATE_RUN) if (This->IrpQueue->lpVtbl->MinimumDataAvailable(This->IrpQueue) == TRUE && This->State != KSSTATE_RUN)
{ {
/* some should initiate a state request but didnt do it */ /* some should initiate a state request but didnt do it */
DPRINT1("Starting stream with %lu mappings Offset %u\n", This->IrpQueue->lpVtbl->NumMappings(This->IrpQueue), This->ActiveIrpOffset); DPRINT1("Starting stream with %lu\n", This->IrpQueue->lpVtbl->NumMappings(This->IrpQueue));
This->Stream->lpVtbl->SetState(This->Stream, KSSTATE_RUN); This->Stream->lpVtbl->SetState(This->Stream, KSSTATE_RUN);
This->State = KSSTATE_RUN; This->State = KSSTATE_RUN;

View file

@ -1,7 +1,13 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming
* FILE: drivers/wdm/audio/backpln/portcls/pool.c
* PURPOSE: Memory functions
* PROGRAMMER: Johannes Anderwald
*/
#include "private.h" #include "private.h"
PVOID PVOID
AllocateItem( AllocateItem(
IN POOL_TYPE PoolType, IN POOL_TYPE PoolType,

View file

@ -1,29 +1,14 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming
* FILE: drivers/wdm/audio/backpln/portcls/port.c
* PURPOSE: Port construction API
* PROGRAMMER: Johannes Anderwald
* Andrew Greenwood
*/
#include "private.h" #include "private.h"
NTSTATUS StringFromCLSID(
const CLSID *id, /* [in] GUID to be converted */
LPWSTR idstr /* [out] pointer to buffer to contain converted guid */
) {
static const char hex[] = "0123456789ABCDEF";
WCHAR *s;
int i;
swprintf(idstr, L"{%08X-%04X-%04X-%02X%02X-",
id->Data1, id->Data2, id->Data3,
id->Data4[0], id->Data4[1]);
s = &idstr[25];
/* 6 hex bytes */
for (i = 2; i < 8; i++) {
*s++ = hex[id->Data4[i]>>4];
*s++ = hex[id->Data4[i] & 0xf];
}
*s++ = '}';
*s++ = '\0';
return STATUS_SUCCESS;
}
NTSTATUS NTSTATUS
@ -33,9 +18,9 @@ PcNewPort(
IN REFCLSID ClassId) IN REFCLSID ClassId)
{ {
NTSTATUS Status; NTSTATUS Status;
WCHAR Buffer[100]; UNICODE_STRING GuidString;
DPRINT1("PcNewPort entered\n"); DPRINT("PcNewPort entered\n");
if (!OutPort) if (!OutPort)
{ {
@ -56,8 +41,11 @@ PcNewPort(
else else
{ {
StringFromCLSID(ClassId, Buffer); if (RtlStringFromGUID(ClassId, &GuidString) == STATUS_SUCCESS)
DPRINT1("unknown interface %S\n", Buffer); {
DPRINT1("unknown interface %S\n", GuidString.Buffer);
RtlFreeUnicodeString(&GuidString);
}
Status = STATUS_NOT_SUPPORTED; Status = STATUS_NOT_SUPPORTED;
return Status; return Status;

View file

@ -1,3 +1,11 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming
* FILE: drivers/wdm/audio/backpln/portcls/port_dmus.c
* PURPOSE: DirectMusic Port driver
* PROGRAMMER: Johannes Anderwald
*/
#include "private.h" #include "private.h"
typedef struct typedef struct

View file

@ -1,3 +1,11 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming
* FILE: drivers/wdm/audio/backpln/portcls/port_midi.c
* PURPOSE: Midi Port driver
* PROGRAMMER: Johannes Anderwald
*/
#include "private.h" #include "private.h"
typedef struct typedef struct
@ -45,10 +53,10 @@ IPortMidi_fnQueryInterface(
IN REFIID refiid, IN REFIID refiid,
OUT PVOID* Output) OUT PVOID* Output)
{ {
WCHAR Buffer[100]; UNICODE_STRING GuidString;
IPortMidiImpl * This = (IPortMidiImpl*)iface; IPortMidiImpl * This = (IPortMidiImpl*)iface;
DPRINT1("IPortMidi_fnQueryInterface\n"); DPRINT("IPortMidi_fnQueryInterface\n");
if (IsEqualGUIDAligned(refiid, &IID_IPortMidi) || if (IsEqualGUIDAligned(refiid, &IID_IPortMidi) ||
IsEqualGUIDAligned(refiid, &IID_IPort) || IsEqualGUIDAligned(refiid, &IID_IPort) ||
@ -74,9 +82,11 @@ IPortMidi_fnQueryInterface(
return NewIDrmPort((PDRMPORT2*)Output); return NewIDrmPort((PDRMPORT2*)Output);
} }
StringFromCLSID(refiid, Buffer); if (RtlStringFromGUID(refiid, &GuidString) == STATUS_SUCCESS)
DPRINT1("IPortMidi_fnQueryInterface no iface %S\n", Buffer); {
KeBugCheckEx(0, 0, 0, 0, 0); DPRINT1("IPortMidi_fnQueryInterface no interface!!! iface %S\n", GuidString.Buffer);
RtlFreeUnicodeString(&GuidString);
}
return STATUS_UNSUCCESSFUL; return STATUS_UNSUCCESSFUL;
} }
@ -148,7 +158,7 @@ IPortMidi_fnInit(
NTSTATUS Status; NTSTATUS Status;
IPortMidiImpl * This = (IPortMidiImpl*)iface; IPortMidiImpl * This = (IPortMidiImpl*)iface;
DPRINT1("IPortMidi_fnInit entered This %p DeviceObject %p Irp %p UnknownMiniport %p UnknownAdapter %p ResourceList %p\n", DPRINT("IPortMidi_fnInit entered This %p DeviceObject %p Irp %p UnknownMiniport %p UnknownAdapter %p ResourceList %p\n",
This, DeviceObject, Irp, UnknownMiniport, UnknownAdapter, ResourceList); This, DeviceObject, Irp, UnknownMiniport, UnknownAdapter, ResourceList);
if (This->bInitialized) if (This->bInitialized)
@ -210,7 +220,7 @@ IPortMidi_fnInit(
This->pDescriptor); This->pDescriptor);
DPRINT1("IPortMidi_fnInit success\n"); DPRINT("IPortMidi_fnInit success\n");
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
@ -331,9 +341,9 @@ ISubDevice_fnNewIrpTarget(
IN PIRP Irp, IN PIRP Irp,
IN KSOBJECT_CREATE *CreateObject) IN KSOBJECT_CREATE *CreateObject)
{ {
IPortMidiImpl * This = (IPortMidiImpl*)CONTAINING_RECORD(iface, IPortMidiImpl, lpVtblSubDevice); //IPortMidiImpl * This = (IPortMidiImpl*)CONTAINING_RECORD(iface, IPortMidiImpl, lpVtblSubDevice);
DPRINT1("ISubDevice_NewIrpTarget this %p\n", This); UNIMPLEMENTED
return STATUS_UNSUCCESSFUL; return STATUS_UNSUCCESSFUL;
} }
@ -343,9 +353,9 @@ NTAPI
ISubDevice_fnReleaseChildren( ISubDevice_fnReleaseChildren(
IN ISubdevice *iface) IN ISubdevice *iface)
{ {
IPortMidiImpl * This = (IPortMidiImpl*)CONTAINING_RECORD(iface, IPortMidiImpl, lpVtblSubDevice); //IPortMidiImpl * This = (IPortMidiImpl*)CONTAINING_RECORD(iface, IPortMidiImpl, lpVtblSubDevice);
DPRINT1("ISubDevice_ReleaseChildren this %p\n", This); UNIMPLEMENTED
return STATUS_UNSUCCESSFUL; return STATUS_UNSUCCESSFUL;
} }
@ -358,7 +368,7 @@ ISubDevice_fnGetDescriptor(
{ {
IPortMidiImpl * This = (IPortMidiImpl*)CONTAINING_RECORD(iface, IPortMidiImpl, lpVtblSubDevice); IPortMidiImpl * This = (IPortMidiImpl*)CONTAINING_RECORD(iface, IPortMidiImpl, lpVtblSubDevice);
DPRINT1("ISubDevice_GetDescriptor this %p\n", This); DPRINT("ISubDevice_GetDescriptor this %p\n", This);
*Descriptor = This->SubDeviceDescriptor; *Descriptor = This->SubDeviceDescriptor;
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
@ -459,7 +469,7 @@ NewPortMidi(
This->ref = 1; This->ref = 1;
*OutPort = (PPORT)(&This->lpVtbl); *OutPort = (PPORT)(&This->lpVtbl);
DPRINT1("NewPortMidi result %p\n", *OutPort); DPRINT("NewPortMidi result %p\n", *OutPort);
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }

View file

@ -1,3 +1,11 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming
* FILE: drivers/wdm/audio/backpln/portcls/port_topology.c
* PURPOSE: Topology Port driver
* PROGRAMMER: Johannes Anderwald
*/
#include "private.h" #include "private.h"
typedef struct typedef struct
@ -70,10 +78,10 @@ IPortTopology_fnQueryInterface(
IN REFIID refiid, IN REFIID refiid,
OUT PVOID* Output) OUT PVOID* Output)
{ {
WCHAR Buffer[100]; UNICODE_STRING GuidString;
IPortTopologyImpl * This = (IPortTopologyImpl*)iface; IPortTopologyImpl * This = (IPortTopologyImpl*)iface;
DPRINT1("IPortTopology_fnQueryInterface\n"); DPRINT("IPortTopology_fnQueryInterface\n");
if (IsEqualGUIDAligned(refiid, &IID_IPortTopology) || if (IsEqualGUIDAligned(refiid, &IID_IPortTopology) ||
IsEqualGUIDAligned(refiid, &IID_IPort) || IsEqualGUIDAligned(refiid, &IID_IPort) ||
@ -94,9 +102,11 @@ IPortTopology_fnQueryInterface(
return NewPortClsVersion((PPORTCLSVERSION*)Output); return NewPortClsVersion((PPORTCLSVERSION*)Output);
} }
StringFromCLSID(refiid, Buffer); if (RtlStringFromGUID(refiid, &GuidString) == STATUS_SUCCESS)
DPRINT1("IPortTopology_fnQueryInterface no iface %S\n", Buffer); {
KeBugCheckEx(0, 0, 0, 0, 0); DPRINT1("IPortTopology_fnQueryInterface no interface!!! iface %S\n", GuidString.Buffer);
RtlFreeUnicodeString(&GuidString);
}
return STATUS_UNSUCCESSFUL; return STATUS_UNSUCCESSFUL;
} }
@ -167,7 +177,7 @@ IPortTopology_fnInit(
NTSTATUS Status; NTSTATUS Status;
IPortTopologyImpl * This = (IPortTopologyImpl*)iface; IPortTopologyImpl * This = (IPortTopologyImpl*)iface;
DPRINT1("IPortTopology_fnInit entered This %p DeviceObject %p Irp %p UnknownMiniport %p UnknownAdapter %p ResourceList %p\n", DPRINT("IPortTopology_fnInit entered This %p DeviceObject %p Irp %p UnknownMiniport %p UnknownAdapter %p ResourceList %p\n",
This, DeviceObject, Irp, UnknownMiniport, UnknownAdapter, ResourceList); This, DeviceObject, Irp, UnknownMiniport, UnknownAdapter, ResourceList);
if (This->bInitialized) if (This->bInitialized)
@ -227,7 +237,7 @@ IPortTopology_fnInit(
This->pDescriptor); This->pDescriptor);
DPRINT1("IPortTopology_fnInit success\n"); DPRINT("IPortTopology_fnInit success\n");
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
@ -326,9 +336,9 @@ ISubDevice_fnNewIrpTarget(
IN PIRP Irp, IN PIRP Irp,
IN KSOBJECT_CREATE *CreateObject) IN KSOBJECT_CREATE *CreateObject)
{ {
IPortTopologyImpl * This = (IPortTopologyImpl*)CONTAINING_RECORD(iface, IPortTopologyImpl, lpVtblSubDevice); //IPortTopologyImpl * This = (IPortTopologyImpl*)CONTAINING_RECORD(iface, IPortTopologyImpl, lpVtblSubDevice);
DPRINT1("ISubDevice_NewIrpTarget this %p\n", This); UNIMPLEMENTED
return STATUS_UNSUCCESSFUL; return STATUS_UNSUCCESSFUL;
} }
@ -338,9 +348,9 @@ NTAPI
ISubDevice_fnReleaseChildren( ISubDevice_fnReleaseChildren(
IN ISubdevice *iface) IN ISubdevice *iface)
{ {
IPortTopologyImpl * This = (IPortTopologyImpl*)CONTAINING_RECORD(iface, IPortTopologyImpl, lpVtblSubDevice); //IPortTopologyImpl * This = (IPortTopologyImpl*)CONTAINING_RECORD(iface, IPortTopologyImpl, lpVtblSubDevice);
DPRINT1("ISubDevice_ReleaseChildren this %p\n", This); UNIMPLEMENTED
return STATUS_UNSUCCESSFUL; return STATUS_UNSUCCESSFUL;
} }
@ -353,7 +363,7 @@ ISubDevice_fnGetDescriptor(
{ {
IPortTopologyImpl * This = (IPortTopologyImpl*)CONTAINING_RECORD(iface, IPortTopologyImpl, lpVtblSubDevice); IPortTopologyImpl * This = (IPortTopologyImpl*)CONTAINING_RECORD(iface, IPortTopologyImpl, lpVtblSubDevice);
DPRINT1("ISubDevice_GetDescriptor this %p\n", This); DPRINT("ISubDevice_GetDescriptor this %p\n", This);
*Descriptor = This->SubDeviceDescriptor; *Descriptor = This->SubDeviceDescriptor;
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
@ -468,7 +478,7 @@ CreatePinWorkerRoutine(
DPRINT("Pin %p\n", Pin); DPRINT("Pin %p\n", Pin);
} }
DPRINT1("CreatePinWorkerRoutine completing irp %p\n", WorkerContext->Irp); DPRINT("CreatePinWorkerRoutine completing irp %p\n", WorkerContext->Irp);
WorkerContext->Irp->IoStatus.Status = Status; WorkerContext->Irp->IoStatus.Status = Status;
WorkerContext->Irp->IoStatus.Information = 0; WorkerContext->Irp->IoStatus.Information = 0;
IoCompleteRequest(WorkerContext->Irp, IO_SOUND_INCREMENT); IoCompleteRequest(WorkerContext->Irp, IO_SOUND_INCREMENT);
@ -492,7 +502,7 @@ PcCreateItemDispatch(
PPIN_WORKER_CONTEXT Context; PPIN_WORKER_CONTEXT Context;
PIO_WORKITEM WorkItem; PIO_WORKITEM WorkItem;
DPRINT1("PcCreateItemDispatch called DeviceObject %p\n", DeviceObject); DPRINT("PcCreateItemDispatch called DeviceObject %p\n", DeviceObject);
/* access the create item */ /* access the create item */
CreateItem = KSCREATE_ITEM_IRP_STORAGE(Irp); CreateItem = KSCREATE_ITEM_IRP_STORAGE(Irp);
@ -556,7 +566,7 @@ PcCreateItemDispatch(
NULL); NULL);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
DPRINT1("Failed to get filter object\n"); DPRINT("Failed to get filter object\n");
return Status; return Status;
} }
@ -566,7 +576,7 @@ PcCreateItemDispatch(
/* create the dispatch object */ /* create the dispatch object */
Status = NewDispatchObject(Irp, Filter); Status = NewDispatchObject(Irp, Filter);
DPRINT1("Filter %p\n", Filter); DPRINT("Filter %p\n", Filter);
} }
else else
{ {
@ -598,7 +608,7 @@ PcCreateItemDispatch(
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_INSUFFICIENT_RESOURCES; return STATUS_INSUFFICIENT_RESOURCES;
} }
DPRINT1("Queueing IRP %p Irql %u\n", Irp, KeGetCurrentIrql()); DPRINT("Queueing IRP %p Irql %u\n", Irp, KeGetCurrentIrql());
Irp->IoStatus.Information = 0; Irp->IoStatus.Information = 0;
Irp->IoStatus.Status = STATUS_PENDING; Irp->IoStatus.Status = STATUS_PENDING;
IoMarkIrpPending(Irp); IoMarkIrpPending(Irp);
@ -629,7 +639,7 @@ NewPortTopology(
This->lpVtblSubDevice = &vt_ISubdeviceVtbl; This->lpVtblSubDevice = &vt_ISubdeviceVtbl;
This->ref = 1; This->ref = 1;
*OutPort = (PPORT)(&This->lpVtbl); *OutPort = (PPORT)(&This->lpVtbl);
DPRINT1("NewPortTopology result %p\n", *OutPort); DPRINT("NewPortTopology result %p\n", *OutPort);
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }

View file

@ -1,3 +1,11 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming
* FILE: drivers/wdm/audio/backpln/portcls/port_wavecyclic.c
* PURPOSE: WaveCyclic Port Driver
* PROGRAMMER: Johannes Anderwald
*/
#include "private.h" #include "private.h"
typedef struct typedef struct
@ -96,7 +104,7 @@ IPortEvents_fnQueryInterface(
{ {
IPortWaveCyclicImpl * This = (IPortWaveCyclicImpl*)CONTAINING_RECORD(iface, IPortWaveCyclicImpl, lpVtblPortEvents); IPortWaveCyclicImpl * This = (IPortWaveCyclicImpl*)CONTAINING_RECORD(iface, IPortWaveCyclicImpl, lpVtblPortEvents);
DPRINT1("IPortEvents_fnQueryInterface entered\n"); DPRINT("IPortEvents_fnQueryInterface entered\n");
if (IsEqualGUIDAligned(refiid, &IID_IPortEvents) || if (IsEqualGUIDAligned(refiid, &IID_IPortEvents) ||
IsEqualGUIDAligned(refiid, &IID_IUnknown)) IsEqualGUIDAligned(refiid, &IID_IUnknown))
@ -115,7 +123,7 @@ IPortEvents_fnAddRef(
IPortEvents* iface) IPortEvents* iface)
{ {
IPortWaveCyclicImpl * This = (IPortWaveCyclicImpl*)CONTAINING_RECORD(iface, IPortWaveCyclicImpl, lpVtblPortEvents); IPortWaveCyclicImpl * This = (IPortWaveCyclicImpl*)CONTAINING_RECORD(iface, IPortWaveCyclicImpl, lpVtblPortEvents);
DPRINT1("IPortEvents_fnQueryInterface entered\n"); DPRINT("IPortEvents_fnQueryInterface entered\n");
return InterlockedIncrement(&This->ref); return InterlockedIncrement(&This->ref);
} }
@ -126,7 +134,8 @@ IPortEvents_fnRelease(
IPortEvents* iface) IPortEvents* iface)
{ {
IPortWaveCyclicImpl * This = (IPortWaveCyclicImpl*)CONTAINING_RECORD(iface, IPortWaveCyclicImpl, lpVtblPortEvents); IPortWaveCyclicImpl * This = (IPortWaveCyclicImpl*)CONTAINING_RECORD(iface, IPortWaveCyclicImpl, lpVtblPortEvents);
DPRINT1("IPortEvents_fnRelease entered\n");
DPRINT("IPortEvents_fnRelease entered\n");
InterlockedDecrement(&This->ref); InterlockedDecrement(&This->ref);
if (This->ref == 0) if (This->ref == 0)
@ -145,7 +154,7 @@ IPortEvents_fnAddEventToEventList(
IPortEvents* iface, IPortEvents* iface,
IN PKSEVENT_ENTRY EventEntry) IN PKSEVENT_ENTRY EventEntry)
{ {
DPRINT1("IPortEvents_fnAddEventToEventList stub\n"); UNIMPLEMENTED
} }
@ -161,7 +170,7 @@ IPortEvents_fnGenerateEventList(
IN BOOL NodeEvent, IN BOOL NodeEvent,
IN ULONG NodeId) IN ULONG NodeId)
{ {
DPRINT1("IPortEvents_fnGenerateEventList stub\n"); UNIMPLEMENTED
} }
static IPortEventsVtbl vt_IPortEvents = static IPortEventsVtbl vt_IPortEvents =
@ -184,8 +193,9 @@ IPortWaveCyclic_fnQueryInterface(
IN REFIID refiid, IN REFIID refiid,
OUT PVOID* Output) OUT PVOID* Output)
{ {
WCHAR Buffer[100]; UNICODE_STRING GuidString;
IPortWaveCyclicImpl * This = (IPortWaveCyclicImpl*)iface; IPortWaveCyclicImpl * This = (IPortWaveCyclicImpl*)iface;
if (IsEqualGUIDAligned(refiid, &IID_IPortWaveCyclic) || if (IsEqualGUIDAligned(refiid, &IID_IPortWaveCyclic) ||
IsEqualGUIDAligned(refiid, &IID_IUnknown)) IsEqualGUIDAligned(refiid, &IID_IUnknown))
{ {
@ -215,9 +225,11 @@ IPortWaveCyclic_fnQueryInterface(
return NewIDrmPort((PDRMPORT2*)Output); return NewIDrmPort((PDRMPORT2*)Output);
} }
StringFromCLSID(refiid, Buffer); if (RtlStringFromGUID(refiid, &GuidString) == STATUS_SUCCESS)
DPRINT1("IPortWaveCyclic_fnQueryInterface no interface!!! iface %S\n", Buffer); {
KeBugCheckEx(0, 0, 0, 0, 0); DPRINT1("IPortWaveCyclic_fnQueryInterface no interface!!! iface %S\n", GuidString.Buffer);
RtlFreeUnicodeString(&GuidString);
}
return STATUS_UNSUCCESSFUL; return STATUS_UNSUCCESSFUL;
} }
@ -301,7 +313,7 @@ IPortWaveCyclic_fnInit(
PPOWERNOTIFY PowerNotify; PPOWERNOTIFY PowerNotify;
IPortWaveCyclicImpl * This = (IPortWaveCyclicImpl*)iface; IPortWaveCyclicImpl * This = (IPortWaveCyclicImpl*)iface;
DPRINT1("IPortWaveCyclic_Init entered %p\n", This); DPRINT("IPortWaveCyclic_Init entered %p\n", This);
if (This->bInitialized) if (This->bInitialized)
{ {
@ -389,7 +401,7 @@ IPortWaveCyclic_fnInit(
ResourceList->lpVtbl->AddRef(ResourceList); ResourceList->lpVtbl->AddRef(ResourceList);
DPRINT1("IPortWaveCyclic successfully initialized\n"); DPRINT("IPortWaveCyclic successfully initialized\n");
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
@ -573,7 +585,7 @@ ISubDevice_fnNewIrpTarget(
IPortFilterWaveCyclic * Filter; IPortFilterWaveCyclic * Filter;
IPortWaveCyclicImpl * This = (IPortWaveCyclicImpl*)CONTAINING_RECORD(iface, IPortWaveCyclicImpl, lpVtblSubDevice); IPortWaveCyclicImpl * This = (IPortWaveCyclicImpl*)CONTAINING_RECORD(iface, IPortWaveCyclicImpl, lpVtblSubDevice);
DPRINT1("ISubDevice_NewIrpTarget this %p\n", This); DPRINT("ISubDevice_NewIrpTarget this %p\n", This);
if (This->Filter) if (This->Filter)
{ {
@ -605,9 +617,9 @@ NTAPI
ISubDevice_fnReleaseChildren( ISubDevice_fnReleaseChildren(
IN ISubdevice *iface) IN ISubdevice *iface)
{ {
IPortWaveCyclicImpl * This = (IPortWaveCyclicImpl*)CONTAINING_RECORD(iface, IPortWaveCyclicImpl, lpVtblSubDevice); //IPortWaveCyclicImpl * This = (IPortWaveCyclicImpl*)CONTAINING_RECORD(iface, IPortWaveCyclicImpl, lpVtblSubDevice);
DPRINT1("ISubDevice_ReleaseChildren this %p\n", This); UNIMPLEMENTED
return STATUS_UNSUCCESSFUL; return STATUS_UNSUCCESSFUL;
} }
@ -746,7 +758,7 @@ NewPortWaveCyclic(
This->ref = 1; This->ref = 1;
*OutPort = (PPORT)(&This->lpVtbl); *OutPort = (PPORT)(&This->lpVtbl);
DPRINT1("NewPortWaveCyclic %p\n", *OutPort); DPRINT("NewPortWaveCyclic %p\n", *OutPort);
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }

View file

@ -1,3 +1,11 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming
* FILE: drivers/wdm/audio/backpln/portcls/port_wavepci.c
* PURPOSE: Wave PCI Port driver
* PROGRAMMER: Johannes Anderwald
*/
#include "private.h" #include "private.h"
typedef struct typedef struct
@ -55,7 +63,7 @@ IPortEvents_fnQueryInterface(
{ {
IPortWavePciImpl * This = (IPortWavePciImpl*)CONTAINING_RECORD(iface, IPortWavePciImpl, lpVtblPortEvents); IPortWavePciImpl * This = (IPortWavePciImpl*)CONTAINING_RECORD(iface, IPortWavePciImpl, lpVtblPortEvents);
DPRINT1("IPortEvents_fnQueryInterface entered\n"); DPRINT("IPortEvents_fnQueryInterface entered\n");
if (IsEqualGUIDAligned(refiid, &IID_IPortEvents) || if (IsEqualGUIDAligned(refiid, &IID_IPortEvents) ||
IsEqualGUIDAligned(refiid, &IID_IUnknown)) IsEqualGUIDAligned(refiid, &IID_IUnknown))
@ -74,7 +82,7 @@ IPortEvents_fnAddRef(
IPortEvents* iface) IPortEvents* iface)
{ {
IPortWavePciImpl * This = (IPortWavePciImpl*)CONTAINING_RECORD(iface, IPortWavePciImpl, lpVtblPortEvents); IPortWavePciImpl * This = (IPortWavePciImpl*)CONTAINING_RECORD(iface, IPortWavePciImpl, lpVtblPortEvents);
DPRINT1("IPortEvents_fnAddRef entered\n"); DPRINT("IPortEvents_fnAddRef entered\n");
return InterlockedIncrement(&This->ref); return InterlockedIncrement(&This->ref);
} }
@ -85,7 +93,7 @@ IPortEvents_fnRelease(
IPortEvents* iface) IPortEvents* iface)
{ {
IPortWavePciImpl * This = (IPortWavePciImpl*)CONTAINING_RECORD(iface, IPortWavePciImpl, lpVtblPortEvents); IPortWavePciImpl * This = (IPortWavePciImpl*)CONTAINING_RECORD(iface, IPortWavePciImpl, lpVtblPortEvents);
DPRINT1("IPortEvents_fnRelease entered\n"); DPRINT("IPortEvents_fnRelease entered\n");
InterlockedDecrement(&This->ref); InterlockedDecrement(&This->ref);
if (This->ref == 0) if (This->ref == 0)
@ -104,7 +112,7 @@ IPortEvents_fnAddEventToEventList(
IPortEvents* iface, IPortEvents* iface,
IN PKSEVENT_ENTRY EventEntry) IN PKSEVENT_ENTRY EventEntry)
{ {
DPRINT1("IPortEvents_fnAddEventToEventList stub\n"); UNIMPLEMENTED
} }
@ -120,7 +128,7 @@ IPortEvents_fnGenerateEventList(
IN BOOL NodeEvent, IN BOOL NodeEvent,
IN ULONG NodeId) IN ULONG NodeId)
{ {
DPRINT1("IPortEvents_fnGenerateEventList stub\n"); UNIMPLEMENTED
} }
static IPortEventsVtbl vt_IPortEvents = static IPortEventsVtbl vt_IPortEvents =
@ -146,7 +154,7 @@ IServiceSink_fnQueryInterface(
{ {
IPortWavePciImpl * This = (IPortWavePciImpl*)CONTAINING_RECORD(iface, IPortWavePciImpl, lpVtblServiceSink); IPortWavePciImpl * This = (IPortWavePciImpl*)CONTAINING_RECORD(iface, IPortWavePciImpl, lpVtblServiceSink);
DPRINT1("IServiceSink_fnQueryInterface entered\n"); DPRINT("IServiceSink_fnQueryInterface entered\n");
if (IsEqualGUIDAligned(refiid, &IID_IServiceSink) || if (IsEqualGUIDAligned(refiid, &IID_IServiceSink) ||
IsEqualGUIDAligned(refiid, &IID_IUnknown)) IsEqualGUIDAligned(refiid, &IID_IUnknown))
@ -165,7 +173,7 @@ IServiceSink_fnAddRef(
IServiceSink* iface) IServiceSink* iface)
{ {
IPortWavePciImpl * This = (IPortWavePciImpl*)CONTAINING_RECORD(iface, IPortWavePciImpl, lpVtblServiceSink); IPortWavePciImpl * This = (IPortWavePciImpl*)CONTAINING_RECORD(iface, IPortWavePciImpl, lpVtblServiceSink);
DPRINT1("IServiceSink_fnAddRef entered\n"); DPRINT("IServiceSink_fnAddRef entered\n");
return InterlockedIncrement(&This->ref); return InterlockedIncrement(&This->ref);
} }
@ -176,7 +184,7 @@ IServiceSink_fnRelease(
IServiceSink* iface) IServiceSink* iface)
{ {
IPortWavePciImpl * This = (IPortWavePciImpl*)CONTAINING_RECORD(iface, IPortWavePciImpl, lpVtblServiceSink); IPortWavePciImpl * This = (IPortWavePciImpl*)CONTAINING_RECORD(iface, IPortWavePciImpl, lpVtblServiceSink);
DPRINT1("IServiceSink_fnRelease entered\n"); DPRINT("IServiceSink_fnRelease entered\n");
InterlockedDecrement(&This->ref); InterlockedDecrement(&This->ref);
if (This->ref == 0) if (This->ref == 0)
@ -195,7 +203,7 @@ IServiceSink_fnRequestService(
IServiceSink* iface) IServiceSink* iface)
{ {
IPortWavePciImpl * This = (IPortWavePciImpl*)CONTAINING_RECORD(iface, IPortWavePciImpl, lpVtblServiceSink); IPortWavePciImpl * This = (IPortWavePciImpl*)CONTAINING_RECORD(iface, IPortWavePciImpl, lpVtblServiceSink);
DPRINT1("IServiceSink_fnRequestService entered\n"); DPRINT("IServiceSink_fnRequestService entered\n");
if (This->Miniport) if (This->Miniport)
{ {
This->Miniport->lpVtbl->Service(This->Miniport); This->Miniport->lpVtbl->Service(This->Miniport);
@ -222,10 +230,10 @@ IPortWavePci_fnQueryInterface(
IN REFIID refiid, IN REFIID refiid,
OUT PVOID* Output) OUT PVOID* Output)
{ {
WCHAR Buffer[100]; UNICODE_STRING GuidString;
IPortWavePciImpl * This = (IPortWavePciImpl*)iface; IPortWavePciImpl * This = (IPortWavePciImpl*)iface;
DPRINT1("IPortWavePci_fnQueryInterface entered\n"); DPRINT("IPortWavePci_fnQueryInterface entered\n");
if (IsEqualGUIDAligned(refiid, &IID_IPortWavePci) || if (IsEqualGUIDAligned(refiid, &IID_IPortWavePci) ||
IsEqualGUIDAligned(refiid, &IID_IUnknown)) IsEqualGUIDAligned(refiid, &IID_IUnknown))
@ -257,9 +265,12 @@ IPortWavePci_fnQueryInterface(
return NewPortClsVersion((PPORTCLSVERSION*)Output); return NewPortClsVersion((PPORTCLSVERSION*)Output);
} }
StringFromCLSID(refiid, Buffer); if (RtlStringFromGUID(refiid, &GuidString) == STATUS_SUCCESS)
DPRINT1("IPortWavePci_fnQueryInterface no interface!!! iface %S\n", Buffer); {
KeBugCheckEx(0, 0, 0, 0, 0); DPRINT1("IPortWavePci_fnQueryInterface no interface!!! iface %S\n", GuidString.Buffer);
RtlFreeUnicodeString(&GuidString);
}
return STATUS_UNSUCCESSFUL; return STATUS_UNSUCCESSFUL;
} }
@ -271,7 +282,7 @@ IPortWavePci_fnAddRef(
{ {
IPortWavePciImpl * This = (IPortWavePciImpl*)iface; IPortWavePciImpl * This = (IPortWavePciImpl*)iface;
DPRINT1("IPortWavePci_fnAddRef entered\n"); DPRINT("IPortWavePci_fnAddRef entered\n");
return InterlockedIncrement(&This->ref); return InterlockedIncrement(&This->ref);
} }
@ -284,7 +295,7 @@ IPortWavePci_fnRelease(
{ {
IPortWavePciImpl * This = (IPortWavePciImpl*)iface; IPortWavePciImpl * This = (IPortWavePciImpl*)iface;
DPRINT1("IPortWavePci_fnRelease entered\n"); DPRINT("IPortWavePci_fnRelease entered\n");
InterlockedDecrement(&This->ref); InterlockedDecrement(&This->ref);
@ -305,12 +316,12 @@ ServiceNotifyRoutine(
IN PVOID SystemArgument1, IN PVOID SystemArgument1,
IN PVOID SystemArgument2) IN PVOID SystemArgument2)
{ {
DPRINT1("ServiceNotifyRoutine entered %p %p %p\n", DeferredContext, SystemArgument1, SystemArgument2); DPRINT("ServiceNotifyRoutine entered %p %p %p\n", DeferredContext, SystemArgument1, SystemArgument2);
IPortWavePciImpl * This = (IPortWavePciImpl*)DeferredContext; IPortWavePciImpl * This = (IPortWavePciImpl*)DeferredContext;
if (This->ServiceGroup && This->bInitialized) if (This->ServiceGroup && This->bInitialized)
{ {
DPRINT1("ServiceGroup %p\n", This->ServiceGroup); DPRINT("ServiceGroup %p\n", This->ServiceGroup);
This->ServiceGroup->lpVtbl->RequestService(This->ServiceGroup); This->ServiceGroup->lpVtbl->RequestService(This->ServiceGroup);
} }
} }
@ -334,7 +345,7 @@ IPortWavePci_fnInit(
PPOWERNOTIFY PowerNotify; PPOWERNOTIFY PowerNotify;
IPortWavePciImpl * This = (IPortWavePciImpl*)iface; IPortWavePciImpl * This = (IPortWavePciImpl*)iface;
DPRINT1("IPortWavePci_fnInit entered with This %p, DeviceObject %p Irp %p UnknownMiniport %p, UnknownAdapter %p ResourceList %p\n", DPRINT("IPortWavePci_fnInit entered with This %p, DeviceObject %p Irp %p UnknownMiniport %p, UnknownAdapter %p ResourceList %p\n",
This, DeviceObject, Irp, UnknownMiniport, UnknownAdapter, ResourceList); This, DeviceObject, Irp, UnknownMiniport, UnknownAdapter, ResourceList);
if (This->bInitialized) if (This->bInitialized)
@ -458,7 +469,7 @@ IPortWavePci_fnNewRegistryKey(
{ {
IPortWavePciImpl * This = (IPortWavePciImpl*)iface; IPortWavePciImpl * This = (IPortWavePciImpl*)iface;
DPRINT1("IPortWavePci_fnNewRegistryKey entered\n"); DPRINT("IPortWavePci_fnNewRegistryKey entered\n");
if (!This->bInitialized) if (!This->bInitialized)
{ {
@ -488,7 +499,7 @@ IPortWavePci_fnGetDeviceProperty(
{ {
IPortWavePciImpl * This = (IPortWavePciImpl*)iface; IPortWavePciImpl * This = (IPortWavePciImpl*)iface;
DPRINT1("IPortWavePci_fnGetDeviceProperty entered\n"); DPRINT("IPortWavePci_fnGetDeviceProperty entered\n");
if (!This->bInitialized) if (!This->bInitialized)
{ {
@ -520,7 +531,7 @@ IPortWavePci_fnNewMasterDmaChannel(
DEVICE_DESCRIPTION DeviceDescription; DEVICE_DESCRIPTION DeviceDescription;
IPortWavePciImpl * This = (IPortWavePciImpl*)iface; IPortWavePciImpl * This = (IPortWavePciImpl*)iface;
DPRINT1("IPortWavePci_fnNewMasterDmaChannel This %p entered\n", This); DPRINT("IPortWavePci_fnNewMasterDmaChannel This %p entered\n", This);
Status = PcDmaMasterDescription(ResourceList, ScatterGather, Dma32BitAddresses, IgnoreCount, Dma64BitAddresses, DmaWidth, DmaSpeed, MaximumLength, DmaPort, &DeviceDescription); Status = PcDmaMasterDescription(ResourceList, ScatterGather, Dma32BitAddresses, IgnoreCount, Dma64BitAddresses, DmaWidth, DmaSpeed, MaximumLength, DmaPort, &DeviceDescription);
if (NT_SUCCESS(Status)) if (NT_SUCCESS(Status))
@ -617,9 +628,9 @@ ISubDevice_fnNewIrpTarget(
IN PIRP Irp, IN PIRP Irp,
IN KSOBJECT_CREATE *CreateObject) IN KSOBJECT_CREATE *CreateObject)
{ {
IPortWavePciImpl * This = (IPortWavePciImpl*)CONTAINING_RECORD(iface, IPortWavePciImpl, lpVtblSubDevice); //IPortWavePciImpl * This = (IPortWavePciImpl*)CONTAINING_RECORD(iface, IPortWavePciImpl, lpVtblSubDevice);
DPRINT1("ISubDevice_NewIrpTarget this %p\n", This); UNIMPLEMENTED
return STATUS_UNSUCCESSFUL; return STATUS_UNSUCCESSFUL;
} }
@ -629,9 +640,9 @@ NTAPI
ISubDevice_fnReleaseChildren( ISubDevice_fnReleaseChildren(
IN ISubdevice *iface) IN ISubdevice *iface)
{ {
IPortWavePciImpl * This = (IPortWavePciImpl*)CONTAINING_RECORD(iface, IPortWavePciImpl, lpVtblSubDevice); //IPortWavePciImpl * This = (IPortWavePciImpl*)CONTAINING_RECORD(iface, IPortWavePciImpl, lpVtblSubDevice);
DPRINT1("ISubDevice_ReleaseChildren this %p\n", This); UNIMPLEMENTED
return STATUS_UNSUCCESSFUL; return STATUS_UNSUCCESSFUL;
} }
@ -746,6 +757,6 @@ NewPortWavePci(
This->ref = 1; This->ref = 1;
*OutPort = (PPORT)&This->lpVtbl; *OutPort = (PPORT)&This->lpVtbl;
DPRINT1("NewPortWavePci %p\n", *OutPort); DPRINT("NewPortWavePci %p\n", *OutPort);
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }

View file

@ -1,3 +1,11 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming
* FILE: drivers/wdm/audio/backpln/portcls/port_wavepcistream.c
* PURPOSE: Wave PCI Stream object
* PROGRAMMER: Johannes Anderwald
*/
#include "private.h" #include "private.h"
typedef struct typedef struct

View file

@ -23,7 +23,6 @@
<file>irpstream.c</file> <file>irpstream.c</file>
<file>interrupt.c</file> <file>interrupt.c</file>
<file>drm.c</file> <file>drm.c</file>
<file>stubs.c</file>
<file>undoc.c</file> <file>undoc.c</file>
<file>resource.c</file> <file>resource.c</file>
<file>registry.c</file> <file>registry.c</file>

View file

@ -1,7 +1,13 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming
* FILE: drivers/wdm/audio/backpln/portcls/power.c
* PURPOSE: Power support functions
* PROGRAMMER: Johannes Anderwald
*/
#include "private.h" #include "private.h"
/* /*
* @implemented * @implemented
*/ */
@ -17,7 +23,7 @@ PcRegisterAdapterPowerManagement(
PPCLASS_DEVICE_EXTENSION DeviceExt; PPCLASS_DEVICE_EXTENSION DeviceExt;
IAdapterPowerManagement * pPower; IAdapterPowerManagement * pPower;
DPRINT1("PcRegisterAdapterPowerManagement pUnknown %p pvContext %p\n", pUnknown, pvContext); DPRINT("PcRegisterAdapterPowerManagement pUnknown %p pvContext %p\n", pUnknown, pvContext);
if (!pUnknown || !pvContext) if (!pUnknown || !pvContext)
return STATUS_INVALID_PARAMETER; return STATUS_INVALID_PARAMETER;
@ -35,7 +41,7 @@ PcRegisterAdapterPowerManagement(
} }
DeviceExt->AdapterPowerManagement = pPower; DeviceExt->AdapterPowerManagement = pPower;
DPRINT1("PcRegisterAdapterPowerManagement success %x\n", Status); DPRINT("PcRegisterAdapterPowerManagement success %x\n", Status);
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }

View file

@ -109,10 +109,6 @@ FreeItem(
IN PVOID Item, IN PVOID Item,
IN ULONG Tag); IN ULONG Tag);
NTSTATUS StringFromCLSID(
const CLSID *id,
LPWSTR idstr);
NTSTATUS NTSTATUS
NTAPI NTAPI
NewIrpQueue( NewIrpQueue(

View file

@ -1,3 +1,11 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming
* FILE: drivers/wdm/audio/backpln/portcls/propertyhandler.c
* PURPOSE: Pin property handler
* PROGRAMMER: Johannes Anderwald
*/
#include "private.h" #include "private.h"
NTSTATUS NTSTATUS

View file

@ -1,3 +1,11 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming
* FILE: drivers/wdm/audio/backpln/portcls/registry.c
* PURPOSE: Registry access object
* PROGRAMMER: Johannes Anderwald
*/
#include "private.h" #include "private.h"
typedef struct typedef struct
@ -193,7 +201,7 @@ IRegistryKey_fnQueryValueKey(
OUT PULONG ResultLength) OUT PULONG ResultLength)
{ {
IRegistryKeyImpl * This = (IRegistryKeyImpl*)iface; IRegistryKeyImpl * This = (IRegistryKeyImpl*)iface;
DPRINT1("IRegistryKey_fnQueryValueKey entered %p value %wZ\n", This, ValueName); DPRINT("IRegistryKey_fnQueryValueKey entered %p value %wZ\n", This, ValueName);
return ZwQueryValueKey(This->hKey, ValueName, KeyValueInformationClass, KeyValueInformation, Length, ResultLength); return ZwQueryValueKey(This->hKey, ValueName, KeyValueInformationClass, KeyValueInformation, Length, ResultLength);
} }
@ -208,7 +216,7 @@ IRegistryKey_fnSetValueKey(
) )
{ {
IRegistryKeyImpl * This = (IRegistryKeyImpl*)iface; IRegistryKeyImpl * This = (IRegistryKeyImpl*)iface;
DPRINT1("IRegistryKey_fnSetValueKey entered %S\n", ValueName->Buffer); DPRINT("IRegistryKey_fnSetValueKey entered %S\n", ValueName->Buffer);
return ZwSetValueKey(This->hKey, ValueName, 0, Type, Data, DataSize); return ZwSetValueKey(This->hKey, ValueName, 0, Type, Data, DataSize);
} }

View file

@ -1,10 +1,10 @@
/* /*
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS * PROJECT: ReactOS
* FILE: drivers/multimedia/portcls/helpers/ResourceList.c * FILE: drivers/wdm/audio/backpln/portcls/resource.c
* PURPOSE: Port Class driver / ResourceList implementation * PURPOSE: Port Class driver / ResourceList implementation
* PROGRAMMER: Andrew Greenwood * PROGRAMMER: Andrew Greenwood
* * Johannes Anderwald
* HISTORY: * HISTORY:
* 27 Jan 07 Created * 27 Jan 07 Created
*/ */
@ -24,8 +24,6 @@ typedef struct CResourceList
PCM_RESOURCE_LIST UntranslatedResourceList; PCM_RESOURCE_LIST UntranslatedResourceList;
} IResourceListImpl; } IResourceListImpl;
/* /*
Basic IUnknown methods Basic IUnknown methods
*/ */
@ -37,7 +35,7 @@ IResourceList_fnQueryInterface(
IN REFIID refiid, IN REFIID refiid,
OUT PVOID* Output) OUT PVOID* Output)
{ {
WCHAR Buffer[100]; UNICODE_STRING GuidString;
IResourceListImpl * This = (IResourceListImpl*)iface; IResourceListImpl * This = (IResourceListImpl*)iface;
if (IsEqualGUIDAligned(refiid, &IID_IResourceList) || if (IsEqualGUIDAligned(refiid, &IID_IResourceList) ||
@ -47,16 +45,12 @@ IResourceList_fnQueryInterface(
InterlockedIncrement(&This->ref); InterlockedIncrement(&This->ref);
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
#if 0
else if (IsEqualGUIDAligned(refiid, &IID_IDrmPort) || if (RtlStringFromGUID(refiid, &GuidString) == STATUS_SUCCESS)
IsEqualGUIDAligned(refiid, &IID_IDrmPort2))
{ {
return NewIDrmPort((PDRMPORT2*)Output); DPRINT1("IResourceList_QueryInterface no interface!!! iface %S\n", GuidString.Buffer);
RtlFreeUnicodeString(&GuidString);
} }
#endif
StringFromCLSID(refiid, Buffer);
DPRINT1("IResourceList_fnQueryInterface no interface!!! iface %S\n", Buffer);
KeBugCheckEx(0, 0, 0, 0, 0);
return STATUS_UNSUCCESSFUL; return STATUS_UNSUCCESSFUL;
} }
@ -122,7 +116,7 @@ IResourceList_fnNumberOfEntriesOfType(
for (Index = 0; Index < This->TranslatedResourceList->List[0].PartialResourceList.Count; Index ++ ) for (Index = 0; Index < This->TranslatedResourceList->List[0].PartialResourceList.Count; Index ++ )
{ {
PartialDescriptor = &This->TranslatedResourceList->List[0].PartialResourceList.PartialDescriptors[Index]; PartialDescriptor = &This->TranslatedResourceList->List[0].PartialResourceList.PartialDescriptors[Index];
DPRINT1("Descriptor Type %u\n", PartialDescriptor->Type); DPRINT("Descriptor Type %u\n", PartialDescriptor->Type);
if (PartialDescriptor->Type == Type) if (PartialDescriptor->Type == Type)
{ {
/* Yay! Finally found one that matches! */ /* Yay! Finally found one that matches! */
@ -345,7 +339,7 @@ PcNewResourceList(
/* TODO: Validate parameters */ /* TODO: Validate parameters */
DPRINT1("PcNewResourceList\n"); DPRINT("PcNewResourceList\n");
NewList = AllocateItem(PoolType, sizeof(IResourceListImpl), TAG_PORTCLASS); NewList = AllocateItem(PoolType, sizeof(IResourceListImpl), TAG_PORTCLASS);
@ -411,7 +405,7 @@ PcNewResourceSublist(
Parent = (IResourceListImpl*)ParentList; Parent = (IResourceListImpl*)ParentList;
DPRINT1("PcNewResourceSublist entered\n"); DPRINT("PcNewResourceSublist entered\n");
if (!Parent->TranslatedResourceList->List->PartialResourceList.Count || if (!Parent->TranslatedResourceList->List->PartialResourceList.Count ||
!Parent->UntranslatedResourceList->List->PartialResourceList.Count) !Parent->UntranslatedResourceList->List->PartialResourceList.Count)
@ -453,6 +447,6 @@ PcNewResourceSublist(
*OutResourceList = (IResourceList*)&NewList->lpVtbl; *OutResourceList = (IResourceList*)&NewList->lpVtbl;
DPRINT1("PcNewResourceSublist OutResourceList %p OuterUnknown %p ParentList %p\n", *OutResourceList, OuterUnknown, ParentList); DPRINT("PcNewResourceSublist OutResourceList %p OuterUnknown %p ParentList %p\n", *OutResourceList, OuterUnknown, ParentList);
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }

View file

@ -1,3 +1,12 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming
* FILE: drivers/wdm/audio/backpln/portcls/service_group.c
* PURPOSE: ServiceGroup object implementation
* PROGRAMMER: Johannes Anderwald
*/
#include "private.h" #include "private.h"
typedef struct typedef struct
@ -35,8 +44,9 @@ IServiceGroup_fnQueryInterface(
IN REFIID refiid, IN REFIID refiid,
OUT PVOID* Output) OUT PVOID* Output)
{ {
WCHAR Buffer[100]; UNICODE_STRING GuidString;
IServiceGroupImpl * This = (IServiceGroupImpl*)iface; IServiceGroupImpl * This = (IServiceGroupImpl*)iface;
if (IsEqualGUIDAligned(refiid, &IID_IServiceGroup) || if (IsEqualGUIDAligned(refiid, &IID_IServiceGroup) ||
IsEqualGUIDAligned(refiid, &IID_IServiceSink) || IsEqualGUIDAligned(refiid, &IID_IServiceSink) ||
IsEqualGUIDAligned(refiid, &IID_IUnknown)) IsEqualGUIDAligned(refiid, &IID_IUnknown))
@ -46,8 +56,11 @@ IServiceGroup_fnQueryInterface(
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
StringFromCLSID(refiid, Buffer); if (RtlStringFromGUID(refiid, &GuidString) == STATUS_SUCCESS)
DPRINT1("IPortWaveCyclic_fnQueryInterface no interface!!! iface %S\n", Buffer); {
DPRINT1("IServiceGroup_fnQueryInterface no interface!!! iface %S\n", GuidString.Buffer);
RtlFreeUnicodeString(&GuidString);
}
return STATUS_UNSUCCESSFUL; return STATUS_UNSUCCESSFUL;
} }
@ -262,7 +275,7 @@ PcNewServiceGroup(
{ {
IServiceGroupImpl * This; IServiceGroupImpl * This;
DPRINT1("PcNewServiceGroup entered\n"); DPRINT("PcNewServiceGroup entered\n");
This = AllocateItem(NonPagedPool, sizeof(IServiceGroupImpl), TAG_PORTCLASS); This = AllocateItem(NonPagedPool, sizeof(IServiceGroupImpl), TAG_PORTCLASS);
if (!This) if (!This)

View file

@ -1,30 +0,0 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS
* FILE: drivers/multimedia/portcls/stubs.c
* PURPOSE: Port Class driver / Stubs
* PROGRAMMER: Andrew Greenwood
*
* HISTORY:
* 27 Jan 07 Created
*/
#include "private.h"
#include <portcls.h>
/* ===============================================================
Properties
*/
/*
* @unimplemented
*/
NTSTATUS NTAPI
PcCompletePendingPropertyRequest(
IN PPCPROPERTY_REQUEST PropertyRequest,
IN NTSTATUS NtStatus)
{
UNIMPLEMENTED;
return STATUS_UNSUCCESSFUL;
}

View file

@ -1,11 +1,22 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel Streaming
* FILE: drivers/wdm/audio/backpln/portcls/api.c
* PURPOSE: Port api functions
* PROGRAMMER: Johannes Anderwald
*/
/* /*
Undocumented PortCls exports Undocumented PortCls exports
*/ */
#include "private.h" #include "private.h"
#include <portcls.h>
/*
* @unimplemented
*/
NTSTATUS NTSTATUS
NTAPI
KsoDispatchCreateWithGenericFactory( KsoDispatchCreateWithGenericFactory(
LONG Unknown, LONG Unknown,
PIRP Irp) PIRP Irp)
@ -14,23 +25,42 @@ KsoDispatchCreateWithGenericFactory(
return STATUS_NOT_IMPLEMENTED; return STATUS_NOT_IMPLEMENTED;
} }
void /*
* @implemented
*/
IIrpTarget *
NTAPI
KsoGetIrpTargetFromFileObject( KsoGetIrpTargetFromFileObject(
LONG Unknown) PFILE_OBJECT FileObject)
{ {
UNIMPLEMENTED; ASSERT(FileObject);
return;
/* IrpTarget is stored in FsContext2 */
return FileObject->FsContext2;
} }
void /*
* @implemented
*/
IIrpTarget *
NTAPI
KsoGetIrpTargetFromIrp( KsoGetIrpTargetFromIrp(
LONG Unknown) PIRP Irp)
{ {
UNIMPLEMENTED; PKSOBJECT_CREATE_ITEM CreateItem;
return;
/* access the create item */
CreateItem = KSCREATE_ITEM_IRP_STORAGE(Irp);
/* IIrpTarget is stored in Context member */
return CreateItem->Context;
} }
void /*
* @unimplemented
*/
VOID
NTAPI
PcAcquireFormatResources( PcAcquireFormatResources(
LONG Unknown, LONG Unknown,
LONG Unknown2, LONG Unknown2,

View file

@ -18,8 +18,7 @@ Dispatch_fnDeviceIoControl(
IoStack = IoGetCurrentIrpStackLocation(Irp); IoStack = IoGetCurrentIrpStackLocation(Irp);
DPRINT1("Dispatch_fnDeviceIoControl Unhandeled %x\n", IoStack->Parameters.DeviceIoControl.IoControlCode); UNIMPLEMENTED
DbgBreakPoint();
Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
Irp->IoStatus.Information = 0; Irp->IoStatus.Information = 0;
@ -33,7 +32,7 @@ Dispatch_fnRead(
PDEVICE_OBJECT DeviceObject, PDEVICE_OBJECT DeviceObject,
PIRP Irp) PIRP Irp)
{ {
DPRINT1("Dispatch_fnRead called DeviceObject %p Irp %p\n", DeviceObject); UNIMPLEMENTED
Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
Irp->IoStatus.Information = 0; Irp->IoStatus.Information = 0;
@ -47,7 +46,7 @@ Dispatch_fnWrite(
PDEVICE_OBJECT DeviceObject, PDEVICE_OBJECT DeviceObject,
PIRP Irp) PIRP Irp)
{ {
DPRINT1("Dispatch_fnWrite called DeviceObject %p Irp %p\n", DeviceObject); UNIMPLEMENTED
Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
Irp->IoStatus.Information = 0; Irp->IoStatus.Information = 0;
@ -61,9 +60,7 @@ Dispatch_fnFlush(
PDEVICE_OBJECT DeviceObject, PDEVICE_OBJECT DeviceObject,
PIRP Irp) PIRP Irp)
{ {
DPRINT1("Dispatch_fnFlush called DeviceObject %p Irp %p\n", DeviceObject); UNIMPLEMENTED
//FIXME
// cleanup resources
Irp->IoStatus.Status = STATUS_SUCCESS; Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0; Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
@ -76,10 +73,8 @@ Dispatch_fnClose(
PDEVICE_OBJECT DeviceObject, PDEVICE_OBJECT DeviceObject,
PIRP Irp) PIRP Irp)
{ {
DPRINT1("Dispatch_fnClose called DeviceObject %p Irp %p\n", DeviceObject); UNIMPLEMENTED
//FIXME
// cleanup resources
Irp->IoStatus.Status = STATUS_SUCCESS; Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0; Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
@ -92,7 +87,7 @@ Dispatch_fnQuerySecurity(
PDEVICE_OBJECT DeviceObject, PDEVICE_OBJECT DeviceObject,
PIRP Irp) PIRP Irp)
{ {
DPRINT1("Dispatch_fnQuerySecurity called DeviceObject %p Irp %p\n", DeviceObject); UNIMPLEMENTED
Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
Irp->IoStatus.Information = 0; Irp->IoStatus.Information = 0;
@ -107,7 +102,7 @@ Dispatch_fnSetSecurity(
PIRP Irp) PIRP Irp)
{ {
DPRINT1("Dispatch_fnSetSecurity called DeviceObject %p Irp %p\n", DeviceObject); UNIMPLEMENTED
Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
Irp->IoStatus.Information = 0; Irp->IoStatus.Information = 0;
@ -128,7 +123,7 @@ Dispatch_fnFastDeviceIoControl(
PIO_STATUS_BLOCK IoStatus, PIO_STATUS_BLOCK IoStatus,
PDEVICE_OBJECT DeviceObject) PDEVICE_OBJECT DeviceObject)
{ {
DPRINT1("Dispatch_fnFastDeviceIoControl called DeviceObject %p Irp %p\n", DeviceObject); UNIMPLEMENTED
return FALSE; return FALSE;
@ -147,7 +142,7 @@ Dispatch_fnFastRead(
PIO_STATUS_BLOCK IoStatus, PIO_STATUS_BLOCK IoStatus,
PDEVICE_OBJECT DeviceObject) PDEVICE_OBJECT DeviceObject)
{ {
DPRINT1("Dispatch_fnFastRead called DeviceObject %p Irp %p\n", DeviceObject); UNIMPLEMENTED
return FALSE; return FALSE;
@ -165,7 +160,7 @@ Dispatch_fnFastWrite(
PIO_STATUS_BLOCK IoStatus, PIO_STATUS_BLOCK IoStatus,
PDEVICE_OBJECT DeviceObject) PDEVICE_OBJECT DeviceObject)
{ {
DPRINT1("Dispatch_fnFastWrite called DeviceObject %p Irp %p\n", DeviceObject); UNIMPLEMENTED
return FALSE; return FALSE;
} }
@ -200,7 +195,7 @@ DispatchCreateKMix(
IoStatus = IoGetCurrentIrpStackLocation(Irp); IoStatus = IoGetCurrentIrpStackLocation(Irp);
Buffer = IoStatus->FileObject->FileName.Buffer; Buffer = IoStatus->FileObject->FileName.Buffer;
DPRINT1("DispatchCreateKMix entered\n"); DPRINT("DispatchCreateKMix entered\n");
if (Buffer) if (Buffer)
{ {
@ -219,7 +214,7 @@ DispatchCreateKMix(
/* allocate object header */ /* allocate object header */
Status = KsAllocateObjectHeader(&ObjectHeader, 0, NULL, Irp, &DispatchTable); Status = KsAllocateObjectHeader(&ObjectHeader, 0, NULL, Irp, &DispatchTable);
DPRINT1("KsAllocateObjectHeader result %x\n", Status); DPRINT("KsAllocateObjectHeader result %x\n", Status);
/* complete the irp */ /* complete the irp */
Irp->IoStatus.Information = 0; Irp->IoStatus.Information = 0;
Irp->IoStatus.Status = Status; Irp->IoStatus.Status = Status;

View file

@ -5,7 +5,7 @@
#include <portcls.h> #include <portcls.h>
#include <ks.h> #include <ks.h>
#include <ksmedia.h> #include <ksmedia.h>
#define YDEBUG #define NDEBUG
#include <debug.h> #include <debug.h>
#include <samplerate.h> #include <samplerate.h>

View file

@ -210,7 +210,7 @@ Pin_fnRead(
PDEVICE_OBJECT DeviceObject, PDEVICE_OBJECT DeviceObject,
PIRP Irp) PIRP Irp)
{ {
DPRINT1("Pin_fnRead called DeviceObject %p Irp %p\n", DeviceObject); UNIMPLEMENTED
Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
Irp->IoStatus.Information = 0; Irp->IoStatus.Information = 0;
@ -218,29 +218,13 @@ Pin_fnRead(
return STATUS_UNSUCCESSFUL; return STATUS_UNSUCCESSFUL;
} }
NTSTATUS
NTAPI
PinWriteCompletionRoutine(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Context)
{
PIRP CIrp = (PIRP)Context;
CIrp->IoStatus.Status = STATUS_SUCCESS;
CIrp->IoStatus.Information = 0;
IoCompleteRequest(CIrp, IO_NO_INCREMENT);
return STATUS_SUCCESS;
}
NTSTATUS NTSTATUS
NTAPI NTAPI
Pin_fnWrite( Pin_fnWrite(
PDEVICE_OBJECT DeviceObject, PDEVICE_OBJECT DeviceObject,
PIRP Irp) PIRP Irp)
{ {
DPRINT1("Pin_fnWrite called DeviceObject %p Irp %p\n", DeviceObject); UNIMPLEMENTED
Irp->IoStatus.Information = 0; Irp->IoStatus.Information = 0;
Irp->IoStatus.Status = STATUS_SUCCESS; Irp->IoStatus.Status = STATUS_SUCCESS;
@ -254,7 +238,7 @@ Pin_fnFlush(
PDEVICE_OBJECT DeviceObject, PDEVICE_OBJECT DeviceObject,
PIRP Irp) PIRP Irp)
{ {
DPRINT1("Pin_fnFlush called DeviceObject %p Irp %p\n", DeviceObject); UNIMPLEMENTED
Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
Irp->IoStatus.Information = 0; Irp->IoStatus.Information = 0;
@ -268,7 +252,7 @@ Pin_fnClose(
PDEVICE_OBJECT DeviceObject, PDEVICE_OBJECT DeviceObject,
PIRP Irp) PIRP Irp)
{ {
DPRINT1("Pin_fnClose called DeviceObject %p Irp %p\n", DeviceObject); UNIMPLEMENTED
Irp->IoStatus.Status = STATUS_SUCCESS; Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0; Irp->IoStatus.Information = 0;
@ -282,7 +266,7 @@ Pin_fnQuerySecurity(
PDEVICE_OBJECT DeviceObject, PDEVICE_OBJECT DeviceObject,
PIRP Irp) PIRP Irp)
{ {
DPRINT1("Pin_fnQuerySecurity called DeviceObject %p Irp %p\n", DeviceObject); UNIMPLEMENTED
Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
Irp->IoStatus.Information = 0; Irp->IoStatus.Information = 0;
@ -297,7 +281,7 @@ Pin_fnSetSecurity(
PIRP Irp) PIRP Irp)
{ {
DPRINT1("Pin_fnSetSecurity called DeviceObject %p Irp %p\n", DeviceObject); UNIMPLEMENTED
Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
Irp->IoStatus.Information = 0; Irp->IoStatus.Information = 0;
@ -318,7 +302,7 @@ Pin_fnFastDeviceIoControl(
PIO_STATUS_BLOCK IoStatus, PIO_STATUS_BLOCK IoStatus,
PDEVICE_OBJECT DeviceObject) PDEVICE_OBJECT DeviceObject)
{ {
DPRINT1("Pin_fnFastDeviceIoControl called DeviceObject %p Irp %p\n", DeviceObject); UNIMPLEMENTED
return FALSE; return FALSE;
@ -337,8 +321,7 @@ Pin_fnFastRead(
PIO_STATUS_BLOCK IoStatus, PIO_STATUS_BLOCK IoStatus,
PDEVICE_OBJECT DeviceObject) PDEVICE_OBJECT DeviceObject)
{ {
DPRINT1("Pin_fnFastRead called DeviceObject %p Irp %p\n", DeviceObject); UNIMPLEMENTED
return FALSE; return FALSE;
} }
@ -362,7 +345,7 @@ Pin_fnFastWrite(
PKSDATAFORMAT_WAVEFORMATEX Formats; PKSDATAFORMAT_WAVEFORMATEX Formats;
PKSDATAFORMAT_WAVEFORMATEX InputFormat, OutputFormat; PKSDATAFORMAT_WAVEFORMATEX InputFormat, OutputFormat;
//DPRINT1("Pin_fnFastWrite called DeviceObject %p Irp %p\n", DeviceObject); DPRINT("Pin_fnFastWrite called DeviceObject %p Irp %p\n", DeviceObject);
Formats = (PKSDATAFORMAT_WAVEFORMATEX)FileObject->FsContext2; Formats = (PKSDATAFORMAT_WAVEFORMATEX)FileObject->FsContext2;
@ -370,12 +353,12 @@ Pin_fnFastWrite(
OutputFormat = (Formats + 1); OutputFormat = (Formats + 1);
StreamHeader = (PKSSTREAM_HEADER)Buffer; StreamHeader = (PKSSTREAM_HEADER)Buffer;
#if 0
DPRINT1("Num Channels %u Old Channels %u\n SampleRate %u Old SampleRate %u\n BitsPerSample %u Old BitsPerSample %u\n", DPRINT("Num Channels %u Old Channels %u\n SampleRate %u Old SampleRate %u\n BitsPerSample %u Old BitsPerSample %u\n",
InputFormat->WaveFormatEx.nChannels, OutputFormat->WaveFormatEx.nChannels, InputFormat->WaveFormatEx.nChannels, OutputFormat->WaveFormatEx.nChannels,
InputFormat->WaveFormatEx.nSamplesPerSec, OutputFormat->WaveFormatEx.nSamplesPerSec, InputFormat->WaveFormatEx.nSamplesPerSec, OutputFormat->WaveFormatEx.nSamplesPerSec,
InputFormat->WaveFormatEx.wBitsPerSample, OutputFormat->WaveFormatEx.wBitsPerSample); InputFormat->WaveFormatEx.wBitsPerSample, OutputFormat->WaveFormatEx.wBitsPerSample);
#endif
if (InputFormat->WaveFormatEx.wBitsPerSample != OutputFormat->WaveFormatEx.wBitsPerSample) if (InputFormat->WaveFormatEx.wBitsPerSample != OutputFormat->WaveFormatEx.wBitsPerSample)
{ {

View file

@ -98,7 +98,7 @@ WdmAudPnp(
{ {
PIO_STACK_LOCATION IrpStack; PIO_STACK_LOCATION IrpStack;
DPRINT1("WdmAudPnp called\n"); DPRINT("WdmAudPnp called\n");
IrpStack = IoGetCurrentIrpStackLocation(Irp); IrpStack = IoGetCurrentIrpStackLocation(Irp);
@ -124,7 +124,7 @@ WdmAudCreate(
PWDMAUD_DEVICE_EXTENSION DeviceExtension; PWDMAUD_DEVICE_EXTENSION DeviceExtension;
DPRINT1("WdmAudCreate\n"); DPRINT("WdmAudCreate\n");
DeviceExtension = (PWDMAUD_DEVICE_EXTENSION)DeviceObject->DeviceExtension; DeviceExtension = (PWDMAUD_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
@ -165,7 +165,7 @@ WdmAudClose(
IN PDEVICE_OBJECT DeviceObject, IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp) IN PIRP Irp)
{ {
DPRINT1("WdmAudClose\n"); DPRINT("WdmAudClose\n");
#if KS_IMPLEMENTED #if KS_IMPLEMENTED
Status = KsDereferenceSoftwareBusObject(DeviceExtension->DeviceHeader); Status = KsDereferenceSoftwareBusObject(DeviceExtension->DeviceHeader);
@ -194,7 +194,7 @@ WdmAudCleanup(
WDMAUD_CLIENT *pClient; WDMAUD_CLIENT *pClient;
ULONG Index; ULONG Index;
DPRINT1("WdmAudCleanup\n"); DPRINT("WdmAudCleanup\n");
IoStack = IoGetCurrentIrpStackLocation(Irp); IoStack = IoGetCurrentIrpStackLocation(Irp);
@ -224,7 +224,7 @@ WdmAudCleanup(
Irp->IoStatus.Status = STATUS_SUCCESS; Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0; Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
DPRINT1("WdmAudCleanup complete\n"); DPRINT("WdmAudCleanup complete\n");
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }

View file

@ -5,7 +5,7 @@
#include <ntddk.h> #include <ntddk.h>
#include <portcls.h> #include <portcls.h>
#include <ks.h> #include <ks.h>
#define YDEBUG #define NDEBUG
#include <debug.h> #include <debug.h>
#include <ksmedia.h> #include <ksmedia.h>
#include <mmsystem.h> #include <mmsystem.h>

View file

@ -6,14 +6,6 @@
* PROGRAMMER: Johannes Anderwald * PROGRAMMER: Johannes Anderwald
*/ */
#include <ntifs.h>
#include <ntddk.h>
#include <portcls.h>
#include <ks.h>
#include <ksmedia.h>
#include <math.h>
#define YDEBUG
#include <debug.h>
#include "sysaudio.h" #include "sysaudio.h"
const GUID KSPROPSETID_Sysaudio = {0xCBE3FAA0L, 0xCC75, 0x11D0, {0xB4, 0x65, 0x00, 0x00, 0x1A, 0x18, 0x18, 0xE6}}; const GUID KSPROPSETID_Sysaudio = {0xCBE3FAA0L, 0xCC75, 0x11D0, {0xB4, 0x65, 0x00, 0x00, 0x1A, 0x18, 0x18, 0xE6}};
@ -230,7 +222,6 @@ CreatePinWorkerRoutine(
SetIrpIoStatus(WorkerContext->Irp, STATUS_NO_MEMORY, 0); SetIrpIoStatus(WorkerContext->Irp, STATUS_NO_MEMORY, 0);
ExFreePool(WorkerContext->DispatchContext); ExFreePool(WorkerContext->DispatchContext);
ExFreePool(WorkerContext->MixerFormat); ExFreePool(WorkerContext->MixerFormat);
ExFreePool(WorkerContext);
return; return;
} }
@ -251,7 +242,6 @@ CreatePinWorkerRoutine(
DPRINT1("Failed to create Mixer Pin with %x\n", Status); DPRINT1("Failed to create Mixer Pin with %x\n", Status);
SetIrpIoStatus(WorkerContext->Irp, STATUS_UNSUCCESSFUL, 0); SetIrpIoStatus(WorkerContext->Irp, STATUS_UNSUCCESSFUL, 0);
ExFreePool(WorkerContext->DispatchContext); ExFreePool(WorkerContext->DispatchContext);
ExFreePool(WorkerContext);
return; return;
} }
} }
@ -268,7 +258,6 @@ CreatePinWorkerRoutine(
DPRINT1("Failed to create Mixer Pin with %x\n", Status); DPRINT1("Failed to create Mixer Pin with %x\n", Status);
SetIrpIoStatus(WorkerContext->Irp, STATUS_UNSUCCESSFUL, 0); SetIrpIoStatus(WorkerContext->Irp, STATUS_UNSUCCESSFUL, 0);
ExFreePool(WorkerContext->DispatchContext); ExFreePool(WorkerContext->DispatchContext);
ExFreePool(WorkerContext);
return; return;
} }
} }
@ -283,7 +272,7 @@ CreatePinWorkerRoutine(
else else
Status = KsCreatePin(WorkerContext->Entry->Handle, WorkerContext->PinConnect, GENERIC_READ | GENERIC_WRITE, &RealPinHandle); Status = KsCreatePin(WorkerContext->Entry->Handle, WorkerContext->PinConnect, GENERIC_READ | GENERIC_WRITE, &RealPinHandle);
DPRINT1("Status %x\n", Status); DPRINT("Status %x\n", Status);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
PKSDATAFORMAT_WAVEFORMATEX RequestedFormat = (PKSDATAFORMAT_WAVEFORMATEX)(WorkerContext->PinConnect + 1); PKSDATAFORMAT_WAVEFORMATEX RequestedFormat = (PKSDATAFORMAT_WAVEFORMATEX)(WorkerContext->PinConnect + 1);
@ -295,7 +284,7 @@ CreatePinWorkerRoutine(
/* The mixer pin format should have been accepted */ /* The mixer pin format should have been accepted */
ObDereferenceObject(WorkerContext->DispatchContext->MixerFileObject); ObDereferenceObject(WorkerContext->DispatchContext->MixerFileObject);
ZwClose(WorkerContext->DispatchContext->hMixerPin); ZwClose(WorkerContext->DispatchContext->hMixerPin);
ASSERT(0); KeBugCheck(0);
} }
SetIrpIoStatus(WorkerContext->Irp, STATUS_UNSUCCESSFUL, 0); SetIrpIoStatus(WorkerContext->Irp, STATUS_UNSUCCESSFUL, 0);
@ -314,7 +303,6 @@ CreatePinWorkerRoutine(
DPRINT1("Failed to get file object with %x\n", Status); DPRINT1("Failed to get file object with %x\n", Status);
SetIrpIoStatus(WorkerContext->Irp, STATUS_UNSUCCESSFUL, 0); SetIrpIoStatus(WorkerContext->Irp, STATUS_UNSUCCESSFUL, 0);
ExFreePool(WorkerContext->DispatchContext); ExFreePool(WorkerContext->DispatchContext);
ExFreePool(WorkerContext);
return; return;
} }
@ -346,7 +334,6 @@ CreatePinWorkerRoutine(
DPRINT1("Failed to get file object with %x %p\n", Status, WorkerContext->Entry->Pins[WorkerContext->PinConnect->PinId].PinHandle); DPRINT1("Failed to get file object with %x %p\n", Status, WorkerContext->Entry->Pins[WorkerContext->PinConnect->PinId].PinHandle);
SetIrpIoStatus(WorkerContext->Irp, STATUS_UNSUCCESSFUL, 0); SetIrpIoStatus(WorkerContext->Irp, STATUS_UNSUCCESSFUL, 0);
ExFreePool(WorkerContext->DispatchContext); ExFreePool(WorkerContext->DispatchContext);
ExFreePool(WorkerContext);
return; return;
} }
WorkerContext->DispatchContext->FileObject = FileObject; WorkerContext->DispatchContext->FileObject = FileObject;
@ -369,7 +356,7 @@ CreatePinWorkerRoutine(
} }
DPRINT("creating virtual pin\n"); DPRINT1("creating virtual pin\n");
/* now create the virtual audio pin which is exposed to wdmaud */ /* now create the virtual audio pin which is exposed to wdmaud */
Status = KsCreatePin(Filter, WorkerContext->PinConnect, GENERIC_READ | GENERIC_WRITE, &VirtualPinHandle); Status = KsCreatePin(Filter, WorkerContext->PinConnect, GENERIC_READ | GENERIC_WRITE, &VirtualPinHandle);
@ -384,7 +371,6 @@ CreatePinWorkerRoutine(
SetIrpIoStatus(WorkerContext->Irp, STATUS_UNSUCCESSFUL, 0); SetIrpIoStatus(WorkerContext->Irp, STATUS_UNSUCCESSFUL, 0);
ExFreePool(WorkerContext->DispatchContext); ExFreePool(WorkerContext->DispatchContext);
ExFreePool(WorkerContext);
return; return;
} }
@ -400,7 +386,6 @@ CreatePinWorkerRoutine(
ZwClose(VirtualPinHandle); ZwClose(VirtualPinHandle);
SetIrpIoStatus(WorkerContext->Irp, STATUS_UNSUCCESSFUL, 0); SetIrpIoStatus(WorkerContext->Irp, STATUS_UNSUCCESSFUL, 0);
ExFreePool(WorkerContext->DispatchContext); ExFreePool(WorkerContext->DispatchContext);
ExFreePool(WorkerContext);
return; return;
} }
@ -463,7 +448,6 @@ CreatePinWorkerRoutine(
*((PHANDLE)WorkerContext->Irp->UserBuffer) = VirtualPinHandle; *((PHANDLE)WorkerContext->Irp->UserBuffer) = VirtualPinHandle;
SetIrpIoStatus(WorkerContext->Irp, STATUS_SUCCESS, sizeof(HANDLE)); SetIrpIoStatus(WorkerContext->Irp, STATUS_SUCCESS, sizeof(HANDLE));
ExFreePool(WorkerContext);
} }
NTSTATUS NTSTATUS
@ -651,6 +635,61 @@ ComputeCompatibleFormat(
return STATUS_NOT_IMPLEMENTED; return STATUS_NOT_IMPLEMENTED;
} }
NTSTATUS
GetPinInstanceCount(
PKSAUDIO_DEVICE_ENTRY Entry,
PKSPIN_CINSTANCES PinInstances,
PKSPIN_CONNECT PinConnect)
{
KSP_PIN PinRequest;
ULONG BytesReturned;
/* query the instance count */
PinRequest.PinId = PinConnect->PinId;
PinRequest.Property.Set = KSPROPSETID_Pin;
PinRequest.Property.Flags = KSPROPERTY_TYPE_GET;
PinRequest.Property.Id = KSPROPERTY_PIN_CINSTANCES;
return KsSynchronousIoControlDevice(Entry->FileObject, KernelMode, IOCTL_KS_PROPERTY, (PVOID)&PinRequest, sizeof(KSP_PIN), (PVOID)PinInstances, sizeof(KSPIN_CINSTANCES), &BytesReturned);
}
VOID
CloseExistingPin(
PSYSAUDIO_CLIENT ClientInfo,
PSYSAUDIO_INSTANCE_INFO InstanceInfo,
PKSPIN_CONNECT PinConnect)
{
ULONG Index, SubIndex;
PDISPATCH_CONTEXT DispatchContext;
/* scan the clientinfo if the client has already opened device with the specified pin */
for (Index = 0; Index < ClientInfo->NumDevices; Index++)
{
if (ClientInfo->Devs[Index].DeviceId == InstanceInfo->DeviceNumber)
{
if (ClientInfo->Devs[Index].ClientHandlesCount)
{
for(SubIndex = 0; SubIndex < ClientInfo->Devs[Index].ClientHandlesCount; SubIndex++)
{
if (ClientInfo->Devs[Index].ClientHandles[SubIndex].PinId == PinConnect->PinId)
{
/* the pin has been already opened by the client, re-use it */
ASSERT(ClientInfo->Devs[Index].ClientHandles[SubIndex].bHandle == FALSE);
DispatchContext = ClientInfo->Devs[Index].ClientHandles[SubIndex].DispatchContext;
ObDereferenceObject(DispatchContext->MixerFileObject);
ObDereferenceObject(DispatchContext->FileObject);
ZwClose(DispatchContext->hMixerPin);
ZwClose(DispatchContext->Handle);
ClientInfo->Devs[Index].ClientHandles[SubIndex].PinId = (ULONG)-1;
}
}
}
}
}
}
NTSTATUS NTSTATUS
HandleSysAudioFilterPinCreation( HandleSysAudioFilterPinCreation(
@ -669,12 +708,9 @@ HandleSysAudioFilterPinCreation(
KSP_PIN PinRequest; KSP_PIN PinRequest;
NTSTATUS Status; NTSTATUS Status;
KSPIN_CINSTANCES PinInstances; KSPIN_CINSTANCES PinInstances;
PIO_WORKITEM WorkItem;
PPIN_WORKER_CONTEXT WorkerContext; PPIN_WORKER_CONTEXT WorkerContext;
PDISPATCH_CONTEXT DispatchContext; PDISPATCH_CONTEXT DispatchContext;
ULONG Index, SubIndex;
BOOL CreateMixerPin; BOOL CreateMixerPin;
ULONG DeviceId;
PKSDATAFORMAT_WAVEFORMATEX MixerFormat = NULL, ClientFormat; PKSDATAFORMAT_WAVEFORMATEX MixerFormat = NULL, ClientFormat;
@ -730,14 +766,11 @@ HandleSysAudioFilterPinCreation(
return SetIrpIoStatus(Irp, STATUS_INVALID_PARAMETER, 0); return SetIrpIoStatus(Irp, STATUS_INVALID_PARAMETER, 0);
} }
Retry: /* close existing pin first */
/* get the instances count */ CloseExistingPin(ClientInfo, InstanceInfo, PinConnect);
PinRequest.PinId = PinConnect->PinId;
PinRequest.Property.Set = KSPROPSETID_Pin;
PinRequest.Property.Flags = KSPROPERTY_TYPE_GET;
PinRequest.Property.Id = KSPROPERTY_PIN_CINSTANCES;
Status = KsSynchronousIoControlDevice(Entry->FileObject, KernelMode, IOCTL_KS_PROPERTY, (PVOID)&PinRequest, sizeof(KSP_PIN), (PVOID)&PinInstances, sizeof(KSPIN_CINSTANCES), &BytesReturned); /* query instance count */
Status = GetPinInstanceCount(Entry, &PinInstances, PinConnect);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
DPRINT("Property Request KSPROPERTY_PIN_GLOBALCINSTANCES failed with %x\n", Status); DPRINT("Property Request KSPROPERTY_PIN_GLOBALCINSTANCES failed with %x\n", Status);
@ -750,7 +783,6 @@ Retry:
return SetIrpIoStatus(Irp, STATUS_UNSUCCESSFUL, 0); return SetIrpIoStatus(Irp, STATUS_UNSUCCESSFUL, 0);
} }
/* check the format */ /* check the format */
PinRequest.PinId = PinConnect->PinId; PinRequest.PinId = PinConnect->PinId;
PinRequest.Property.Set = KSPROPSETID_Pin; PinRequest.Property.Set = KSPROPSETID_Pin;
@ -788,38 +820,6 @@ Retry:
CreateMixerPin = TRUE; CreateMixerPin = TRUE;
} }
DeviceId = (ULONG)-1;
/* scan the clientinfo if the client has already opened device with the specified pin */
for (Index = 0; Index < ClientInfo->NumDevices; Index++)
{
if (ClientInfo->Devs[Index].DeviceId == InstanceInfo->DeviceNumber)
{
DeviceId = Index;
if (ClientInfo->Devs[Index].ClientHandlesCount)
{
for(SubIndex = 0; SubIndex < ClientInfo->Devs[Index].ClientHandlesCount; SubIndex++)
{
if (ClientInfo->Devs[Index].ClientHandles[SubIndex].PinId == PinConnect->PinId)
{
/* the pin has been already opened by the client, re-use it */
ASSERT(ClientInfo->Devs[Index].ClientHandles[SubIndex].bHandle == FALSE);
DispatchContext = ClientInfo->Devs[Index].ClientHandles[SubIndex].DispatchContext;
ObDereferenceObject(DispatchContext->MixerFileObject);
ObDereferenceObject(DispatchContext->FileObject);
ZwClose(DispatchContext->hMixerPin);
ZwClose(DispatchContext->Handle);
ClientInfo->Devs[Index].ClientHandles[SubIndex].PinId = (ULONG)-1;
goto Retry;
}
}
}
}
}
ASSERT(DeviceId != (ULONG)-1);
if (PinInstances.CurrentCount == PinInstances.PossibleCount) if (PinInstances.CurrentCount == PinInstances.PossibleCount)
{ {
/* pin already exists */ /* pin already exists */
@ -834,44 +834,31 @@ Retry:
} }
} }
WorkItem = IoAllocateWorkItem(DeviceObject); ASSERT(DeviceExtension->WorkItem);
if (!WorkItem) ASSERT(DeviceExtension->WorkerContext);
{
if (MixerFormat)
ExFreePool(MixerFormat);
Irp->IoStatus.Information = 0;
Irp->IoStatus.Status = STATUS_INSUFFICIENT_RESOURCES;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_INSUFFICIENT_RESOURCES;
}
/* create worker context */
WorkerContext = ExAllocatePool(NonPagedPool, sizeof(PIN_WORKER_CONTEXT));
if (!WorkerContext)
{
/* invalid parameters */
if (MixerFormat)
ExFreePool(MixerFormat);
IoFreeWorkItem(WorkItem);
return SetIrpIoStatus(Irp, STATUS_NO_MEMORY, 0);
}
/* create worker context */ /* create worker context */
DispatchContext = ExAllocatePool(NonPagedPool, sizeof(DISPATCH_CONTEXT)); DispatchContext = ExAllocatePool(NonPagedPool, sizeof(DISPATCH_CONTEXT));
if (!DispatchContext) if (!DispatchContext)
{ {
/* invalid parameters */
if (MixerFormat) if (MixerFormat)
{
ExFreePool(MixerFormat); ExFreePool(MixerFormat);
IoFreeWorkItem(WorkItem); }
ExFreePool(WorkerContext);
return SetIrpIoStatus(Irp, STATUS_NO_MEMORY, 0); return SetIrpIoStatus(Irp, STATUS_NO_MEMORY, 0);
} }
// FIXME
// mutal exclusion
/* get worker context */
WorkerContext = (PPIN_WORKER_CONTEXT)DeviceExtension->WorkerContext;
/* prepare context */ /* prepare context */
RtlZeroMemory(WorkerContext, sizeof(PIN_WORKER_CONTEXT)); RtlZeroMemory(WorkerContext, sizeof(PIN_WORKER_CONTEXT));
RtlZeroMemory(DispatchContext, sizeof(DISPATCH_CONTEXT)); RtlZeroMemory(DispatchContext, sizeof(DISPATCH_CONTEXT));
DPRINT1("PinInstances.CurrentCount %u\n", PinInstances.CurrentCount); DPRINT("PinInstances.CurrentCount %u\n", PinInstances.CurrentCount);
if (PinInstances.CurrentCount < PinInstances.PossibleCount) if (PinInstances.CurrentCount < PinInstances.PossibleCount)
{ {
@ -893,7 +880,7 @@ Retry:
IoMarkIrpPending(Irp); IoMarkIrpPending(Irp);
Irp->IoStatus.Status = STATUS_PENDING; Irp->IoStatus.Status = STATUS_PENDING;
Irp->IoStatus.Information = 0; Irp->IoStatus.Information = 0;
IoQueueWorkItem(WorkItem, CreatePinWorkerRoutine, DelayedWorkQueue, (PVOID)WorkerContext); IoQueueWorkItem(DeviceExtension->WorkItem, CreatePinWorkerRoutine, DelayedWorkQueue, (PVOID)WorkerContext);
/* mark irp as pending */ /* mark irp as pending */
return STATUS_PENDING; return STATUS_PENDING;
@ -969,7 +956,7 @@ SysAudioHandleProperty(
Status = KsSynchronousIoControlDevice(Entry->FileObject, KernelMode, IOCTL_KS_PROPERTY, (PVOID)&PropertyRequest, sizeof(KSPROPERTY), (PVOID)&ComponentId, sizeof(KSCOMPONENTID), &BytesReturned); Status = KsSynchronousIoControlDevice(Entry->FileObject, KernelMode, IOCTL_KS_PROPERTY, (PVOID)&PropertyRequest, sizeof(KSPROPERTY), (PVOID)&ComponentId, sizeof(KSCOMPONENTID), &BytesReturned);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
DPRINT1("KsSynchronousIoControlDevice failed with %x for KSPROPERTY_GENERAL_COMPONENTID\n", Status); DPRINT("KsSynchronousIoControlDevice failed with %x for KSPROPERTY_GENERAL_COMPONENTID\n", Status);
return SetIrpIoStatus(Irp, Status, 0); return SetIrpIoStatus(Irp, Status, 0);
} }
RtlMoveMemory(Irp->UserBuffer, &ComponentId, sizeof(KSCOMPONENTID)); RtlMoveMemory(Irp->UserBuffer, &ComponentId, sizeof(KSCOMPONENTID));
@ -1019,14 +1006,13 @@ SysAudioHandleProperty(
else if (Property->Id == (ULONG)-1) else if (Property->Id == (ULONG)-1)
{ {
/* ros specific pin creation request */ /* ros specific pin creation request */
DPRINT1("Initiating create request\n"); DPRINT("Initiating create request\n");
return HandleSysAudioFilterPinCreation(Irp, Property, DeviceExtension, DeviceObject); return HandleSysAudioFilterPinCreation(Irp, Property, DeviceExtension, DeviceObject);
} }
} }
RtlStringFromGUID(&Property->Set, &GuidString); RtlStringFromGUID(&Property->Set, &GuidString);
DPRINT1("Unhandeled property Set |%S| Id %u Flags %x\n", GuidString.Buffer, Property->Id, Property->Flags); DPRINT1("Unhandeled property Set |%S| Id %u Flags %x\n", GuidString.Buffer, Property->Id, Property->Flags);
DbgBreakPoint();
RtlFreeUnicodeString(&GuidString); RtlFreeUnicodeString(&GuidString);
return SetIrpIoStatus(Irp, STATUS_UNSUCCESSFUL, 0); return SetIrpIoStatus(Irp, STATUS_UNSUCCESSFUL, 0);
} }

View file

@ -6,14 +6,6 @@
* PROGRAMMER: Johannes Anderwald * PROGRAMMER: Johannes Anderwald
*/ */
#include <ntifs.h>
#include <ntddk.h>
#include <portcls.h>
#include <ks.h>
#include <ksmedia.h>
#include <math.h>
#define YDEBUG
#include <debug.h>
#include "sysaudio.h" #include "sysaudio.h"
const GUID GUID_DEVICE_INTERFACE_ARRIVAL = {0xCB3A4004L, 0x46F0, 0x11D0, {0xB0, 0x8F, 0x00, 0x60, 0x97, 0x13, 0x05, 0x3F}}; const GUID GUID_DEVICE_INTERFACE_ARRIVAL = {0xCB3A4004L, 0x46F0, 0x11D0, {0xB0, 0x8F, 0x00, 0x60, 0x97, 0x13, 0x05, 0x3F}};
@ -38,7 +30,7 @@ FilterPinWorkerRoutine(
PKSAUDIO_DEVICE_ENTRY DeviceEntry = (PKSAUDIO_DEVICE_ENTRY)Context; PKSAUDIO_DEVICE_ENTRY DeviceEntry = (PKSAUDIO_DEVICE_ENTRY)Context;
DPRINT1("Querying filter...\n"); DPRINT("Querying filter...\n");
PropertyRequest.Set = KSPROPSETID_Pin; PropertyRequest.Set = KSPROPSETID_Pin;
PropertyRequest.Flags = KSPROPERTY_TYPE_GET; PropertyRequest.Flags = KSPROPERTY_TYPE_GET;

View file

@ -6,14 +6,6 @@
* PROGRAMMER: Johannes Anderwald * PROGRAMMER: Johannes Anderwald
*/ */
#include <ntifs.h>
#include <ntddk.h>
#include <portcls.h>
#include <ks.h>
#include <ksmedia.h>
#include <math.h>
#define YDEBUG
#include <debug.h>
#include "sysaudio.h" #include "sysaudio.h"
NTSTATUS NTSTATUS
@ -95,10 +87,10 @@ Dispatch_fnClose(
DeviceExtension = (PSYSAUDIODEVEXT)DeviceObject->DeviceExtension; DeviceExtension = (PSYSAUDIODEVEXT)DeviceObject->DeviceExtension;
DPRINT1("Client %p NumDevices %u\n", Client, Client->NumDevices); DPRINT("Client %p NumDevices %u\n", Client, Client->NumDevices);
for(Index = 0; Index < Client->NumDevices; Index++) for(Index = 0; Index < Client->NumDevices; Index++)
{ {
DPRINT1("Index %u Device %u Handels Count %u\n", Index, Client->Devs[Index].DeviceId, Client->Devs[Index].ClientHandlesCount); DPRINT("Index %u Device %u Handels Count %u\n", Index, Client->Devs[Index].DeviceId, Client->Devs[Index].ClientHandlesCount);
if (Client->Devs[Index].ClientHandlesCount) if (Client->Devs[Index].ClientHandlesCount)
{ {
Entry = GetListEntry(&DeviceExtension->KsAudioDeviceList, Client->Devs[Index].DeviceId); Entry = GetListEntry(&DeviceExtension->KsAudioDeviceList, Client->Devs[Index].DeviceId);
@ -111,7 +103,7 @@ Dispatch_fnClose(
if (Client->Devs[Index].ClientHandles[SubIndex].bHandle) if (Client->Devs[Index].ClientHandles[SubIndex].bHandle)
{ {
DPRINT1("Closing handle %p\n", Client->Devs[Index].ClientHandles[SubIndex].hPin); DPRINT("Closing handle %p\n", Client->Devs[Index].ClientHandles[SubIndex].hPin);
ZwClose(Client->Devs[Index].ClientHandles[SubIndex].hPin); ZwClose(Client->Devs[Index].ClientHandles[SubIndex].hPin);
Entry->Pins[Client->Devs[Index].ClientHandles[SubIndex].PinId].References--; Entry->Pins[Client->Devs[Index].ClientHandles[SubIndex].PinId].References--;
@ -132,7 +124,7 @@ Dispatch_fnClose(
//DPRINT1("Index %u DeviceIndex %u Pin %u References %u\n", Index, Client->Devs[Index].DeviceId, SubIndex, Entry->Pins[Client->Devs[Index].ClientHandles[SubIndex].PinId].References); //DPRINT1("Index %u DeviceIndex %u Pin %u References %u\n", Index, Client->Devs[Index].DeviceId, SubIndex, Entry->Pins[Client->Devs[Index].ClientHandles[SubIndex].PinId].References);
if (!Entry->Pins[Client->Devs[Index].ClientHandles[SubIndex].PinId].References) if (!Entry->Pins[Client->Devs[Index].ClientHandles[SubIndex].PinId].References)
{ {
DPRINT1("Closing pin %p\n", Entry->Pins[Client->Devs[Index].ClientHandles[SubIndex].PinId].PinHandle); DPRINT("Closing pin %p\n", Entry->Pins[Client->Devs[Index].ClientHandles[SubIndex].PinId].PinHandle);
ZwClose(Entry->Pins[Client->Devs[Index].ClientHandles[SubIndex].PinId].PinHandle); ZwClose(Entry->Pins[Client->Devs[Index].ClientHandles[SubIndex].PinId].PinHandle);
Entry->Pins[Client->Devs[Index].ClientHandles[SubIndex].PinId].PinHandle = NULL; Entry->Pins[Client->Devs[Index].ClientHandles[SubIndex].PinId].PinHandle = NULL;
@ -148,8 +140,6 @@ Dispatch_fnClose(
ExFreePool(Client); ExFreePool(Client);
//FIXME
// cleanup resources
Irp->IoStatus.Status = STATUS_SUCCESS; Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0; Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
@ -274,7 +264,7 @@ DispatchCreateSysAudio(
IoStatus = IoGetCurrentIrpStackLocation(Irp); IoStatus = IoGetCurrentIrpStackLocation(Irp);
Buffer = IoStatus->FileObject->FileName.Buffer; Buffer = IoStatus->FileObject->FileName.Buffer;
DPRINT1("DispatchCreateSysAudio entered\n"); DPRINT("DispatchCreateSysAudio entered\n");
if (Buffer) if (Buffer)
{ {

View file

@ -9,15 +9,6 @@
* 8 Jul 07 Started basic implementation * 8 Jul 07 Started basic implementation
*/ */
#include <ntifs.h>
#include <ntddk.h>
#include <portcls.h>
#include <ks.h>
#include <ksmedia.h>
#include <math.h>
#define YDEBUG
#include <debug.h>
//#include <dxsdk/mediaobj.h>
#include "sysaudio.h" #include "sysaudio.h"
@ -149,6 +140,23 @@ SysAudio_InstallDevice(
goto cleanup; goto cleanup;
} }
/* allocate work item */
DeviceExtension->WorkItem = IoAllocateWorkItem(DeviceObject);
if (!DeviceExtension->WorkItem)
{
DPRINT1("Failed to allocate work item\n");
goto cleanup;
}
/* allocate work item context */
DeviceExtension->WorkerContext = ExAllocatePool(NonPagedPool, sizeof(PIN_WORKER_CONTEXT));
if (!DeviceExtension->WorkerContext)
{
DPRINT1("Failed to allocate work item context\n");
goto cleanup;
}
/* Load kmixer */ /* Load kmixer */
Status = SysAudioOpenKMixer(DeviceExtension); Status = SysAudioOpenKMixer(DeviceExtension);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))

View file

@ -6,14 +6,6 @@
* PROGRAMMER: Johannes Anderwald * PROGRAMMER: Johannes Anderwald
*/ */
#include <ntifs.h>
#include <ntddk.h>
#include <portcls.h>
#include <ks.h>
#include <ksmedia.h>
#include <math.h>
#define YDEBUG
#include <debug.h>
#include "sysaudio.h" #include "sysaudio.h"
NTSTATUS NTSTATUS
@ -308,7 +300,6 @@ Pin_fnFastWrite(
Context = (PDISPATCH_CONTEXT)FileObject->FsContext2; Context = (PDISPATCH_CONTEXT)FileObject->FsContext2;
#if 1
if (Context->hMixerPin && Context->MixerFileObject) if (Context->hMixerPin && Context->MixerFileObject)
{ {
Status = KsStreamIo(Context->MixerFileObject, NULL, NULL, NULL, NULL, 0, IoStatus, Buffer, Length, KSSTREAM_WRITE, KernelMode); Status = KsStreamIo(Context->MixerFileObject, NULL, NULL, NULL, NULL, 0, IoStatus, Buffer, Length, KSSTREAM_WRITE, KernelMode);
@ -318,7 +309,7 @@ Pin_fnFastWrite(
return FALSE; return FALSE;
} }
} }
#endif
Status = KsStreamIo(Context->FileObject, NULL, NULL, NULL, NULL, 0, IoStatus, Buffer, Length, KSSTREAM_WRITE, KernelMode); Status = KsStreamIo(Context->FileObject, NULL, NULL, NULL, NULL, 0, IoStatus, Buffer, Length, KSSTREAM_WRITE, KernelMode);
if (Status == STATUS_SUCCESS) if (Status == STATUS_SUCCESS)
return TRUE; return TRUE;

View file

@ -1,6 +1,15 @@
#ifndef SYSAUDIO_H__ #ifndef SYSAUDIO_H__
#define SYSAUDIO_H__ #define SYSAUDIO_H__
#include <ntifs.h>
#include <ntddk.h>
#include <portcls.h>
#include <ks.h>
#include <ksmedia.h>
#include <math.h>
#define NDEBUG
#include <debug.h>
typedef struct typedef struct
{ {
BOOL bHandle; // indicates if an audio pin can be instantated more than once BOOL bHandle; // indicates if an audio pin can be instantated more than once
@ -66,6 +75,9 @@ typedef struct
PFILE_OBJECT KMixerFileObject; // mixer file object PFILE_OBJECT KMixerFileObject; // mixer file object
HANDLE KMixerHandle; // mixer file handle HANDLE KMixerHandle; // mixer file handle
PIO_WORKITEM WorkItem; // work item for pin creation
PVOID WorkerContext; // work item context
}SYSAUDIODEVEXT, *PSYSAUDIODEVEXT; }SYSAUDIODEVEXT, *PSYSAUDIODEVEXT;
// struct DISPATCH_CONTEXT // struct DISPATCH_CONTEXT