Author: janderwald
Date: Mon Sep 14 00:26:59 2009
New Revision: 43045
URL:
http://svn.reactos.org/svn/reactos?rev=43045&view=rev
Log:
- Remove obsolete code
- Fix closing of virtual audio devices introduced 43035
Modified:
trunk/reactos/drivers/wdm/audio/sysaudio/pin.c
Modified: trunk/reactos/drivers/wdm/audio/sysaudio/pin.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/sysaudio…
==============================================================================
--- trunk/reactos/drivers/wdm/audio/sysaudio/pin.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/wdm/audio/sysaudio/pin.c [iso-8859-1] Mon Sep 14 00:26:59 2009
@@ -61,31 +61,43 @@
return Status;
}
+
+
NTSTATUS
NTAPI
-Pin_fnRead(
+Pin_fnWrite(
PDEVICE_OBJECT DeviceObject,
PIRP Irp)
{
PDISPATCH_CONTEXT Context;
PIO_STACK_LOCATION IoStack;
- ULONG BytesReturned;
PFILE_OBJECT FileObject;
NTSTATUS Status;
+ ULONG Length;
/* Get current stack location */
IoStack = IoGetCurrentIrpStackLocation(Irp);
+ Length = IoStack->Parameters.Write.Length;
+
/* The dispatch context is stored in the FsContext member */
Context = (PDISPATCH_CONTEXT)IoStack->FileObject->FsContext;
/* Sanity check */
ASSERT(Context);
+ if (Context->hMixerPin)
+ {
+ // FIXME
+ // call kmixer to convert stream
+ UNIMPLEMENTED
+ }
+
/* acquire real pin file object */
Status = ObReferenceObjectByHandle(Context->Handle, GENERIC_WRITE,
IoFileObjectType, KernelMode, (PVOID*)&FileObject, NULL);
if (!NT_SUCCESS(Status))
{
+ DPRINT1("failed\n");
Irp->IoStatus.Information = 0;
Irp->IoStatus.Status = Status;
/* Complete the irp */
@@ -93,179 +105,19 @@
return Status;
}
- /* Re-dispatch the request to the real target pin */
- Status = KsSynchronousIoControlDevice(FileObject, KernelMode, IOCTL_KS_READ_STREAM,
- MmGetMdlVirtualAddress(Irp->MdlAddress),
- IoStack->Parameters.Read.Length,
- NULL,
- 0,
- &BytesReturned);
-
- /* release file object */
- ObDereferenceObject(FileObject);
-
- if (Context->hMixerPin)
- {
- // FIXME
- // call kmixer to convert stream
- UNIMPLEMENTED
- }
-
- /* Save status and information */
- Irp->IoStatus.Status = Status;
- Irp->IoStatus.Information = 0;
- /* Complete the irp */
- IoCompleteRequest(Irp, IO_NO_INCREMENT);
- /* Done */
- return Status;
-}
-
-NTSTATUS
-NTAPI
-Pin_fnWrite(
- PDEVICE_OBJECT DeviceObject,
- PIRP Irp)
-{
- PDISPATCH_CONTEXT Context;
- PIO_STACK_LOCATION IoStack;
- PFILE_OBJECT FileObject;
- PVOID Buffer;
- NTSTATUS Status;
- ULONG BytesReturned;
-
- /* Get current stack location */
- IoStack = IoGetCurrentIrpStackLocation(Irp);
-
- /* The dispatch context is stored in the FsContext member */
- Context = (PDISPATCH_CONTEXT)IoStack->FileObject->FsContext;
-
- /* Sanity check */
- ASSERT(Context);
-
- if (Context->hMixerPin)
- {
- // FIXME
- // call kmixer to convert stream
- UNIMPLEMENTED
- }
-
- /* acquire real pin file object */
- Status = ObReferenceObjectByHandle(Context->Handle, GENERIC_WRITE,
IoFileObjectType, KernelMode, (PVOID*)&FileObject, NULL);
- if (!NT_SUCCESS(Status))
- {
- Irp->IoStatus.Information = 0;
- Irp->IoStatus.Status = Status;
- /* Complete the irp */
- IoCompleteRequest(Irp, IO_NO_INCREMENT);
- return Status;
- }
-
- Buffer = MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority);
-
- if (!Buffer)
- {
- /* insufficient resources */
- Irp->IoStatus.Status = STATUS_INSUFFICIENT_RESOURCES;
- /* Complete the irp */
- IoCompleteRequest(Irp, IO_NO_INCREMENT);
- return STATUS_INSUFFICIENT_RESOURCES;
- }
-
-
- /* call the portcls audio pin */
- Status = KsSynchronousIoControlDevice(FileObject, KernelMode, IOCTL_KS_WRITE_STREAM,
- NULL,
- 0,
- Buffer,
- IoStack->Parameters.Write.Length,
- &BytesReturned);
-
- /* Release file object */
- ObDereferenceObject(FileObject);
-
- /* Save status and information */
- Irp->IoStatus.Status = Status;
- Irp->IoStatus.Information = BytesReturned;
- /* Complete the irp */
- IoCompleteRequest(Irp, IO_NO_INCREMENT);
- /* Done */
- return Status;
-}
-
-NTSTATUS
-NTAPI
-Pin_fnFlush(
- PDEVICE_OBJECT DeviceObject,
- PIRP Irp)
-{
- PDISPATCH_CONTEXT Context;
- PIO_STACK_LOCATION IoStack;
- PDEVICE_OBJECT PinDeviceObject;
- PIRP PinIrp;
- PFILE_OBJECT FileObject;
- IO_STATUS_BLOCK IoStatus;
- KEVENT Event;
- NTSTATUS Status = STATUS_UNSUCCESSFUL;
-
- /* Get current stack location */
- IoStack = IoGetCurrentIrpStackLocation(Irp);
-
- /* The dispatch context is stored in the FsContext member */
- Context = (PDISPATCH_CONTEXT)IoStack->FileObject->FsContext;
-
- /* Sanity check */
- ASSERT(Context);
-
-
- /* acquire real pin file object */
- Status = ObReferenceObjectByHandle(Context->Handle, GENERIC_WRITE,
IoFileObjectType, KernelMode, (PVOID*)&FileObject, NULL);
- if (!NT_SUCCESS(Status))
- {
- Irp->IoStatus.Information = 0;
- Irp->IoStatus.Status = Status;
- /* Complete the irp */
- IoCompleteRequest(Irp, IO_NO_INCREMENT);
- return Status;
- }
-
- /* Get Pin's device object */
- PinDeviceObject = IoGetRelatedDeviceObject(FileObject);
-
- /* release file object */
- ObDereferenceObject(FileObject);
-
- /* Initialize notification event */
- KeInitializeEvent(&Event, NotificationEvent, FALSE);
-
- /* build target irp */
- PinIrp = IoBuildSynchronousFsdRequest(IRP_MJ_FLUSH_BUFFERS, PinDeviceObject, NULL, 0,
NULL, &Event, &IoStatus);
- if (PinIrp)
- {
-
- /* Get the next stack location */
- IoStack = IoGetNextIrpStackLocation(PinIrp);
- /* The file object must be present in the irp as it contains the KSOBJECT_HEADER
*/
- IoStack->FileObject = FileObject;
-
- /* call the driver */
- Status = IoCallDriver(PinDeviceObject, PinIrp);
- /* Has request already completed ? */
- if (Status == STATUS_PENDING)
- {
- /* Wait untill the request has completed */
- KeWaitForSingleObject(&Event, UserRequest, KernelMode, FALSE, NULL);
- /* Update status */
- Status = IoStatus.Status;
- }
- }
-
- /* store status */
- Irp->IoStatus.Status = Status;
- Irp->IoStatus.Information = 0;
- /* Complete the irp */
- IoCompleteRequest(Irp, IO_NO_INCREMENT);
- /* Done */
- return Status;
+ /* skip current irp location */
+ IoSkipCurrentIrpStackLocation(Irp);
+
+ /* get next stack location */
+ IoStack = IoGetNextIrpStackLocation(Irp);
+ /* store file object of next device object */
+ IoStack->FileObject = FileObject;
+ IoStack->MajorFunction = IRP_MJ_DEVICE_CONTROL;
+ IoStack->Parameters.DeviceIoControl.IoControlCode = IOCTL_KS_WRITE_STREAM;
//FIXME
+ IoStack->Parameters.DeviceIoControl.OutputBufferLength = Length;
+
+ /* now call the driver */
+ return IoCallDriver(IoGetRelatedDeviceObject(FileObject), Irp);
}
NTSTATUS
@@ -297,68 +149,6 @@
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_SUCCESS;
-}
-
-NTSTATUS
-NTAPI
-Pin_fnQuerySecurity(
- PDEVICE_OBJECT DeviceObject,
- PIRP Irp)
-{
- DPRINT("Pin_fnQuerySecurity called DeviceObject %p Irp %p\n",
DeviceObject);
-
- Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
- Irp->IoStatus.Information = 0;
- IoCompleteRequest(Irp, IO_NO_INCREMENT);
- return STATUS_UNSUCCESSFUL;
-}
-
-NTSTATUS
-NTAPI
-Pin_fnSetSecurity(
- PDEVICE_OBJECT DeviceObject,
- PIRP Irp)
-{
-
- DPRINT("Pin_fnSetSecurity called DeviceObject %p Irp %p\n", DeviceObject);
-
- Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
- Irp->IoStatus.Information = 0;
- IoCompleteRequest(Irp, IO_NO_INCREMENT);
- return STATUS_UNSUCCESSFUL;
-}
-
-BOOLEAN
-NTAPI
-Pin_fnFastDeviceIoControl(
- PFILE_OBJECT FileObject,
- BOOLEAN Wait,
- PVOID InputBuffer,
- ULONG InputBufferLength,
- PVOID OutputBuffer,
- ULONG OutputBufferLength,
- ULONG IoControlCode,
- PIO_STATUS_BLOCK IoStatus,
- PDEVICE_OBJECT DeviceObject)
-{
- return FALSE;
-}
-
-
-BOOLEAN
-NTAPI
-Pin_fnFastRead(
- PFILE_OBJECT FileObject,
- PLARGE_INTEGER FileOffset,
- ULONG Length,
- BOOLEAN Wait,
- ULONG LockKey,
- PVOID Buffer,
- PIO_STATUS_BLOCK IoStatus,
- PDEVICE_OBJECT DeviceObject)
-{
- return FALSE;
-
}
BOOLEAN
@@ -404,7 +194,7 @@
Status = KsStreamIo(RealFileObject, NULL, NULL, NULL, NULL, 0, IoStatus, Buffer,
Length, KSSTREAM_WRITE, UserMode);
- //ObDereferenceObject(RealFileObject);
+ ObDereferenceObject(RealFileObject);
if (NT_SUCCESS(Status))
return TRUE;
@@ -415,14 +205,14 @@
static KSDISPATCH_TABLE PinTable =
{
Pin_fnDeviceIoControl,
- Pin_fnRead,
+ KsDispatchInvalidDeviceRequest,
Pin_fnWrite,
- Pin_fnFlush,
+ KsDispatchInvalidDeviceRequest,
Pin_fnClose,
- Pin_fnQuerySecurity,
- Pin_fnSetSecurity,
- Pin_fnFastDeviceIoControl,
- Pin_fnFastRead,
+ KsDispatchInvalidDeviceRequest,
+ KsDispatchInvalidDeviceRequest,
+ KsDispatchFastIoDeviceControlFailure,
+ KsDispatchFastReadFailure,
Pin_fnFastWrite,
};