From f8e5a94969ed52fedb0d72989cb157f3dca06509 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Wed, 14 Jan 2009 17:14:20 +0000 Subject: [PATCH] - Implement PcForwardIrpSynchronous svn path=/trunk/; revision=38762 --- .../drivers/wdm/audio/backpln/portcls/irp.c | 44 +++++++++++++++++-- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/reactos/drivers/wdm/audio/backpln/portcls/irp.c b/reactos/drivers/wdm/audio/backpln/portcls/irp.c index a5ff23de558..9617a8990b6 100644 --- a/reactos/drivers/wdm/audio/backpln/portcls/irp.c +++ b/reactos/drivers/wdm/audio/backpln/portcls/irp.c @@ -119,7 +119,7 @@ PortClsPnp( if ( ! NT_SUCCESS(status) ) { DPRINT("StartDevice returned a failure code [0x%8x]\n", status); - resource_list->lpVtbl->Release(resource_list); + //resource_list->lpVtbl->Release(resource_list); Irp->IoStatus.Status = status; IoCompleteRequest(Irp, IO_NO_INCREMENT); @@ -261,14 +261,50 @@ PcCompleteIrp( return STATUS_UNSUCCESSFUL; } +static +NTSTATUS +NTAPI +IrpCompletionRoutine( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN PVOID Context) +{ + KeSetEvent((PRKEVENT)Context, IO_NO_INCREMENT, FALSE); + return STATUS_SUCCESS; +} + + /* - * @unimplemented + * @implemented */ NTSTATUS NTAPI PcForwardIrpSynchronous( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) { - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; + KEVENT Event; + PCExtension* DeviceExt; + NTSTATUS Status; + + DPRINT1("PcRegisterSubdevice\n"); + + DeviceExt = (PCExtension*)DeviceObject->DeviceExtension; + + /* initialize the notification event */ + KeInitializeEvent(&Event, NotificationEvent, FALSE); + + /* setup a completion routine */ + IoSetCompletionRoutine(Irp, IrpCompletionRoutine, (PVOID)&Event, TRUE, FALSE, FALSE); + + /* now call the driver */ + Status = IoCallDriver(DeviceExt->PrevDeviceObject, Irp); + /* did the request complete yet */ + if (Status == STATUS_PENDING) + { + /* not yet, lets wait a bit */ + KeWaitForSingleObject(&Event, Executive, FALSE, FALSE, NULL); + Status = STATUS_SUCCESS; + } + + return Status; }