diff --git a/reactos/drivers/ksfilter/ks/irp.c b/reactos/drivers/ksfilter/ks/irp.c index 5eef3bfb338..722d1e1e659 100644 --- a/reactos/drivers/ksfilter/ks/irp.c +++ b/reactos/drivers/ksfilter/ks/irp.c @@ -759,7 +759,13 @@ KsCreate( } else if (DeviceHeader->ItemList[Index].bCreated && IoStack->FileObject->FileName.Buffer != NULL) { - ULONG Length = wcslen(DeviceHeader->ItemList[Index].ObjectHeader->CreateItem->ObjectClass.Buffer); + ULONG Length; + + ASSERT(DeviceHeader->ItemList[Index].ObjectHeader); + ASSERT(DeviceHeader->ItemList[Index].ObjectHeader->CreateItem); + ASSERT(DeviceHeader->ItemList[Index].ObjectHeader->CreateItem->ObjectClass.Buffer); + + Length = wcslen(DeviceHeader->ItemList[Index].ObjectHeader->CreateItem->ObjectClass.Buffer); /* filter for that type has already exists */ if (!_wcsnicmp(DeviceHeader->ItemList[Index].ObjectHeader->CreateItem->ObjectClass.Buffer, diff --git a/reactos/drivers/wdm/audio/filters/kmixer/filter.c b/reactos/drivers/wdm/audio/filters/kmixer/filter.c index 7bf41aed2dc..68400372d39 100644 --- a/reactos/drivers/wdm/audio/filters/kmixer/filter.c +++ b/reactos/drivers/wdm/audio/filters/kmixer/filter.c @@ -189,6 +189,7 @@ DispatchCreateKMix( KSOBJECT_HEADER ObjectHeader; PIO_STACK_LOCATION IoStatus; LPWSTR Buffer; + PKSOBJECT_CREATE_ITEM CreateItem; static LPWSTR KS_NAME_PIN = L"{146F1A80-4791-11D0-A5D6-28DB04C10000}"; @@ -211,8 +212,23 @@ DispatchCreateKMix( } } + /* allocate create item */ + CreateItem = ExAllocatePool(NonPagedPool, sizeof(KSOBJECT_CREATE_ITEM)); + if (!CreateItem) + { + Irp->IoStatus.Information = 0; + Irp->IoStatus.Status = STATUS_INSUFFICIENT_RESOURCES; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + return STATUS_INSUFFICIENT_RESOURCES; + } + + /* zero create struct */ + RtlZeroMemory(CreateItem, sizeof(KSOBJECT_CREATE_ITEM)); + + RtlInitUnicodeString(&CreateItem->ObjectClass, L"KMixer"); + /* allocate object header */ - Status = KsAllocateObjectHeader(&ObjectHeader, 0, NULL, Irp, &DispatchTable); + Status = KsAllocateObjectHeader(&ObjectHeader, 1, CreateItem, Irp, &DispatchTable); DPRINT("KsAllocateObjectHeader result %x\n", Status); /* complete the irp */ diff --git a/reactos/drivers/wdm/audio/legacy/wdmaud/mixer.c b/reactos/drivers/wdm/audio/legacy/wdmaud/mixer.c index 715342d52d9..4cdc139c6d0 100644 --- a/reactos/drivers/wdm/audio/legacy/wdmaud/mixer.c +++ b/reactos/drivers/wdm/audio/legacy/wdmaud/mixer.c @@ -133,7 +133,6 @@ GetNumOfMixerDevices( NTSTATUS Status; PWDMAUD_DEVICE_EXTENSION DeviceExtension; - Pin.Property.Set = KSPROPSETID_Sysaudio; Pin.Property.Id = KSPROPERTY_SYSAUDIO_DEVICE_COUNT; Pin.Property.Flags = KSPROPERTY_TYPE_GET; @@ -143,7 +142,7 @@ GetNumOfMixerDevices( Count = 0; Status = KsSynchronousIoControlDevice(DeviceExtension->FileObject, KernelMode, IOCTL_KS_PROPERTY, (PVOID)&Pin, sizeof(KSPROPERTY), (PVOID)&Count, sizeof(ULONG), &BytesReturned); if (!NT_SUCCESS(Status) || !Count) - return STATUS_UNSUCCESSFUL; + return 0; NumPins = 0; for(Index = 0; Index < Count; Index++) diff --git a/reactos/drivers/wdm/audio/sysaudio/control.c b/reactos/drivers/wdm/audio/sysaudio/control.c index 12da3d4a221..0d6484ed5a4 100644 --- a/reactos/drivers/wdm/audio/sysaudio/control.c +++ b/reactos/drivers/wdm/audio/sysaudio/control.c @@ -256,7 +256,7 @@ CreateMixerPinAndSetFormat( HANDLE PinHandle; PFILE_OBJECT FileObject; - Status = KsCreatePin(KMixerHandle, PinConnect, GENERIC_READ | GENERIC_WRITE, &PinHandle); + Status = KsoCreatePin(KMixerHandle, PinConnect, GENERIC_READ | GENERIC_WRITE, &PinHandle, L"KMixer"); if (!NT_SUCCESS(Status)) { @@ -419,7 +419,7 @@ CreatePinWorkerRoutine( DPRINT1("creating virtual pin\n"); /* now create the virtual audio pin which is exposed to wdmaud */ - Status = KsCreatePin(Filter, WorkerContext->PinConnect, GENERIC_READ | GENERIC_WRITE, &VirtualPinHandle); + Status = KsoCreatePin(Filter, WorkerContext->PinConnect, GENERIC_READ | GENERIC_WRITE, &VirtualPinHandle, L"SysAudio"); if (!NT_SUCCESS(Status)) { diff --git a/reactos/drivers/wdm/audio/sysaudio/dispatcher.c b/reactos/drivers/wdm/audio/sysaudio/dispatcher.c index a3fff3d7f43..4946ec64886 100644 --- a/reactos/drivers/wdm/audio/sysaudio/dispatcher.c +++ b/reactos/drivers/wdm/audio/sysaudio/dispatcher.c @@ -346,6 +346,7 @@ DispatchCreateSysAudio( /* store create context */ CreateItem->Context = (PVOID)Client; + RtlInitUnicodeString(&CreateItem->ObjectClass, L"SysAudio"); /* store the object in FsContext */ IoStatus->FileObject->FsContext2 = (PVOID)Client;