KsGetDevice(
IN PVOID Object)
{
- PKSBASIC_HEADER BasicHeader = (PKSBASIC_HEADER)(ULONG_PTR)Object - sizeof(KSBASIC_HEADER);
-
- ASSERT(BasicHeader->Type == KsObjectTypeFilterFactory || BasicHeader->Type == KsObjectTypeFilter || BasicHeader->Type == BasicHeader->Type);
+ PKSBASIC_HEADER BasicHeader = (PKSBASIC_HEADER)((ULONG_PTR)Object - sizeof(KSBASIC_HEADER));
+
+ DPRINT("KsGetDevice Type %lu KsDevice %p\n", BasicHeader->Type, BasicHeader->KsDevice);
+
+ ASSERT(BasicHeader->Type == KsObjectTypeFilterFactory || BasicHeader->Type == KsObjectTypeFilter || BasicHeader->Type == KsObjectTypePin);
+ ASSERT(BasicHeader->KsDevice);
+ ASSERT(BasicHeader->KsDevice->Descriptor);
+ ASSERT(BasicHeader->KsDevice->Bag);
+ ASSERT(BasicHeader->KsDevice->Context);
+ ASSERT(BasicHeader->KsDevice->FunctionalDeviceObject);
+ ASSERT(BasicHeader->KsDevice->PhysicalDeviceObject);
+ ASSERT(BasicHeader->KsDevice->NextDeviceObject);
+ ASSERT(BasicHeader->KsDevice->Started);
+ ASSERT(BasicHeader->KsDevice->SystemPowerState == PowerSystemWorking);
+ ASSERT(BasicHeader->KsDevice->DevicePowerState == PowerDeviceD0);
return BasicHeader->KsDevice;
}
if (!ExtensionSize)
ExtensionSize = sizeof(KSDEVICE_HEADER);
+ DPRINT("KsCreateDevice Descriptor %p ExtensionSize %lu\n", Descriptor, ExtensionSize);
+
Status = IoCreateDevice(DriverObject, ExtensionSize, NULL, FILE_DEVICE_KS, FILE_DEVICE_SECURE_OPEN, FALSE, &FunctionalDeviceObject);
if (!NT_SUCCESS(Status))
return Status;
const KSDEVICE_DESCRIPTOR *Descriptor = NULL;
/* get stored driver object extension */
- DriverObjectExtension = IoGetDriverObjectExtension(DriverObject, (PVOID)KsAddDevice);
+
+ DriverObjectExtension = IoGetDriverObjectExtension(DriverObject, (PVOID)KsInitializeDriver);
if (DriverObjectExtension)
{
)
{
PKS_DRIVER_EXTENSION DriverObjectExtension;
- NTSTATUS Status;
+ NTSTATUS Status = STATUS_SUCCESS;
+
+ DPRINT("KsInitializeDriver\n");
if (Descriptor)
{
- Status = IoAllocateDriverObjectExtension(DriverObject, (PVOID)KsAddDevice, sizeof(KS_DRIVER_EXTENSION), (PVOID*)&DriverObjectExtension);
+ Status = IoAllocateDriverObjectExtension(DriverObject, (PVOID)KsInitializeDriver, sizeof(KS_DRIVER_EXTENSION), (PVOID*)&DriverObjectExtension);
if (NT_SUCCESS(Status))
{
DriverObjectExtension->Descriptor = Descriptor;
}
}
+ /* sanity check */
+ ASSERT(Status == STATUS_SUCCESS);
+
+ if (!NT_SUCCESS(Status))
+ return Status;
+
/* Setting our IRP handlers */
DriverObject->MajorFunction[IRP_MJ_CREATE] = IKsDevice_Create;
DriverObject->MajorFunction[IRP_MJ_PNP] = IKsDevice_Pnp;
DriverObject->DriverExtension->AddDevice = KsAddDevice;
/* KS handles these */
- DPRINT1("Setting KS function handlers\n");
+ DPRINT1("KsInitializeDriver Setting KS function handlers\n");
KsSetMajorFunctionHandler(DriverObject, IRP_MJ_CLOSE);
KsSetMajorFunctionHandler(DriverObject, IRP_MJ_DEVICE_CONTROL);