Author: janderwald
Date: Wed Jan 14 11:14:20 2009
New Revision: 38762
URL:
http://svn.reactos.org/svn/reactos?rev=38762&view=rev
Log:
- Implement PcForwardIrpSynchronous
Modified:
trunk/reactos/drivers/wdm/audio/backpln/portcls/irp.c
Modified: trunk/reactos/drivers/wdm/audio/backpln/portcls/irp.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/wdm/audio/backpln/…
==============================================================================
--- trunk/reactos/drivers/wdm/audio/backpln/portcls/irp.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/wdm/audio/backpln/portcls/irp.c [iso-8859-1] Wed Jan 14 11:14:20
2009
@@ -119,7 +119,7 @@
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 @@
return STATUS_UNSUCCESSFUL;
}
-/*
- * @unimplemented
+static
+NTSTATUS
+NTAPI
+IrpCompletionRoutine(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN PIRP Irp,
+ IN PVOID Context)
+{
+ KeSetEvent((PRKEVENT)Context, IO_NO_INCREMENT, FALSE);
+ return STATUS_SUCCESS;
+}
+
+
+/*
+ * @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;
+}