[KS]
[reactos.git] / reactos / drivers / ksfilter / ks / driver.c
index ac28709..c0195a4 100644 (file)
@@ -37,9 +37,21 @@ NTAPI
 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;
 }
@@ -63,6 +75,8 @@ KsCreateDevice(
     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;
@@ -120,7 +134,8 @@ KsAddDevice(
     const KSDEVICE_DESCRIPTOR *Descriptor = NULL;
 
     /* get stored driver object extension */
-    DriverObjectExtension = IoGetDriverObjectExtension(DriverObject, (PVOID)KsAddDevice);
+
+    DriverObjectExtension = IoGetDriverObjectExtension(DriverObject, (PVOID)KsInitializeDriver);
 
     if (DriverObjectExtension)
     {
@@ -144,17 +159,25 @@ KsInitializeDriver(
 )
 {
     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;
@@ -168,7 +191,7 @@ KsInitializeDriver(
     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);