Author: janderwald Date: Mon Dec 6 01:06:37 2010 New Revision: 49958
URL: http://svn.reactos.org/svn/reactos?rev=49958&view=rev Log: [AUDIO-BRINGUP] - Fix the famous node property handler bug, leading to lots of audio related crashes
Modified: branches/audio-bringup/drivers/wdm/audio/backpln/portcls/undoc.cpp
Modified: branches/audio-bringup/drivers/wdm/audio/backpln/portcls/undoc.cpp URL: http://svn.reactos.org/svn/reactos/branches/audio-bringup/drivers/wdm/audio/... ============================================================================== --- branches/audio-bringup/drivers/wdm/audio/backpln/portcls/undoc.cpp [iso-8859-1] (original) +++ branches/audio-bringup/drivers/wdm/audio/backpln/portcls/undoc.cpp [iso-8859-1] Mon Dec 6 01:06:37 2010 @@ -165,7 +165,7 @@
// get instance / value size InstanceSize = IoStack->Parameters.DeviceIoControl.InputBufferLength; - Instance = Data; + Instance = Request; ValueSize = IoStack->Parameters.DeviceIoControl.OutputBufferLength;
// initialize property request @@ -273,18 +273,15 @@ if (PropertyRequest->PropertyItem && PropertyRequest->PropertyItem->Handler) { // now call the handler - UNICODE_STRING GuidBuffer; - RtlStringFromGUID(Property->Set, &GuidBuffer); - DPRINT1("Calling Node %lu MajorTarget %p MinorTarget %p PropertySet %S PropertyId %lu PropertyFlags %lx InstanceSize %lu ValueSize %lu Handler %p PropertyRequest %p PropertyItemFlags %lx PropertyItemId %lu\n", - PropertyRequest->Node, PropertyRequest->MajorTarget, PropertyRequest->MinorTarget, GuidBuffer.Buffer, Property->Id, Property->Flags, PropertyRequest->InstanceSize, PropertyRequest->ValueSize, - PropertyRequest->PropertyItem->Handler, PropertyRequest, PropertyRequest->PropertyItem->Flags, PropertyRequest->PropertyItem->Id); -#if 1 + //UNICODE_STRING GuidBuffer; + //RtlStringFromGUID(Property->Set, &GuidBuffer); + //DPRINT("Calling Node %lu MajorTarget %p MinorTarget %p PropertySet %S PropertyId %lu PropertyFlags %lx InstanceSize %lu ValueSize %lu Handler %p PropertyRequest %p PropertyItemFlags %lx PropertyItemId %lu\n", + // PropertyRequest->Node, PropertyRequest->MajorTarget, PropertyRequest->MinorTarget, GuidBuffer.Buffer, Property->Id, Property->Flags, PropertyRequest->InstanceSize, PropertyRequest->ValueSize, + // PropertyRequest->PropertyItem->Handler, PropertyRequest, PropertyRequest->PropertyItem->Flags, PropertyRequest->PropertyItem->Id); + Status = PropertyRequest->PropertyItem->Handler(PropertyRequest); - DPRINT1("Status %lx ValueSize %lu Information %lu\n", Status, PropertyRequest->ValueSize, Irp->IoStatus.Information); -#else - Status = STATUS_NOT_FOUND; -#endif - Irp->IoStatus.Information = PropertyRequest->ValueSize; + //DPRINT("Status %lx ValueSize %lu Information %lu\n", Status, PropertyRequest->ValueSize, Irp->IoStatus.Information); + Irp->IoStatus.Information = PropertyRequest->ValueSize;
if (Status != STATUS_PENDING) {