On 2016-09-18 16:24, janderw...@svn.reactos.org wrote: > +NTSTATUS > +SubmitUrbSync( > + IN PKSDEVICE Device, > + IN PURB Urb) > +{ > + PIRP Irp; > + KEVENT Event; > + PDEVICE_EXTENSION DeviceExtension; > + IO_STATUS_BLOCK IoStatus; > + PIO_STACK_LOCATION IoStack; > + NTSTATUS Status; > + > + // init event > + KeInitializeEvent(&Event, NotificationEvent, FALSE); > + > + // get device extension > + DeviceExtension = (PDEVICE_EXTENSION)Device->Context; > + > + // build irp > + Irp = IoBuildDeviceIoControlRequest(IOCTL_INTERNAL_USB_SUBMIT_URB, > + DeviceExtension->LowerDevice, > + NULL, > + 0, > + NULL, > + 0, > + TRUE, > + &Event, > + &IoStatus); > + > + if (!Irp) > + { > + // > + // no memory > + // > + return STATUS_INSUFFICIENT_RESOURCES; > + } > + > + // get next stack location > + IoStack = IoGetNextIrpStackLocation(Irp); > + > + // store urb > + IoStack->Parameters.Others.Argument1 = Urb; > + > + // set completion routine > + IoSetCompletionRoutine(Irp, USBAudioCancelCompleteSynch, &Event, TRUE, > TRUE, TRUE);
You don't need a completion routine here, completing the IRP will set the event specified in IoBuildDeviceIoControlRequest. See https://support.microsoft.com/en-us/kb/326315#bookmark-2 _______________________________________________ Ros-dev mailing list Ros-dev@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev