}
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,
KSOBJECT_HEADER ObjectHeader;
PIO_STACK_LOCATION IoStatus;
LPWSTR Buffer;
+ PKSOBJECT_CREATE_ITEM CreateItem;
static LPWSTR KS_NAME_PIN = L"{146F1A80-4791-11D0-A5D6-28DB04C10000}";
}
}
+ /* 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 */
NTSTATUS Status;
PWDMAUD_DEVICE_EXTENSION DeviceExtension;
-
Pin.Property.Set = KSPROPSETID_Sysaudio;
Pin.Property.Id = KSPROPERTY_SYSAUDIO_DEVICE_COUNT;
Pin.Property.Flags = KSPROPERTY_TYPE_GET;
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++)
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))
{
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))
{
/* store create context */
CreateItem->Context = (PVOID)Client;
+ RtlInitUnicodeString(&CreateItem->ObjectClass, L"SysAudio");
/* store the object in FsContext */
IoStatus->FileObject->FsContext2 = (PVOID)Client;