[CMAKE]
[reactos.git] / drivers / ksfilter / ks / misc.c
index 2e77824..057103d 100644 (file)
@@ -26,7 +26,6 @@ VOID
 FreeItem(
     IN PVOID Item)
 {
-
     ExFreePool(Item);
 }
 
@@ -70,7 +69,7 @@ KspForwardIrpSynchronous(
     IoSetCompletionRoutine(Irp, KspForwardIrpSynchronousCompletion, (PVOID)&Event, TRUE, TRUE, TRUE);
 
     /* now call the driver */
-    Status = IoCallDriver(DeviceHeader->BaseDevice, Irp);
+    Status = IoCallDriver(DeviceHeader->KsDevice.NextDeviceObject, Irp);
     /* did the request complete yet */
     if (Status == STATUS_PENDING)
     {
@@ -96,7 +95,7 @@ KspCopyCreateRequest(
     IoStack = IoGetCurrentIrpStackLocation(Irp);
 
     /* get object class length */
-    ObjectLength = (wcslen(ObjectClass) + 2) * sizeof(WCHAR);
+    ObjectLength = (wcslen(ObjectClass) + 1) * sizeof(WCHAR);
 
     /* check for minium length requirement */
     if (ObjectLength  + *Size > IoStack->FileObject->FileName.MaximumLength)
@@ -175,16 +174,21 @@ KsGetObjectTypeFromIrp(
 }
 
 /*
-    @unimplemented
+    @implemented
 */
 PUNKNOWN
 NTAPI
 KsGetOuterUnknown(
     IN PVOID  Object)
 {
-    UNIMPLEMENTED
-    return NULL;
+    PKSBASIC_HEADER BasicHeader = (PKSBASIC_HEADER)((ULONG_PTR)Object - sizeof(KSBASIC_HEADER));
+
+    /* sanity check */
+    ASSERT(BasicHeader->Type == KsObjectTypeDevice || BasicHeader->Type == KsObjectTypeFilterFactory || 
+           BasicHeader->Type == KsObjectTypeFilter || BasicHeader->Type == KsObjectTypePin);
 
+    /* return objects outer unknown */
+    return BasicHeader->OuterUnknown;
 }
 
 /*