mirror of
https://github.com/reactos/reactos.git
synced 2024-07-28 07:08:59 +00:00
- 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:
parent
3147006bd2
commit
345900effc
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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}};
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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(
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue