- Store KSPROPERTY_SET in Irp when using KsPropertyHandler
[reactos.git] / reactos / drivers / ksfilter / ks / misc.c
index b7af2bc..2e77824 100644 (file)
@@ -81,25 +81,6 @@ KspForwardIrpSynchronous(
     return Status;
 }
 
-/*
-    @unimplemented
-*/
-KSDDKAPI NTSTATUS NTAPI
-KsPinDataIntersectionEx(
-    IN  PIRP Irp,
-    IN  PKSP_PIN Pin,
-    OUT PVOID Data,
-    IN  ULONG DescriptorsCount,
-    IN  const KSPIN_DESCRIPTOR* Descriptor,
-    IN  ULONG DescriptorSize,
-    IN  PFNKSINTERSECTHANDLEREX IntersectHandler OPTIONAL,
-    IN  PVOID HandlerContext OPTIONAL)
-{
-    UNIMPLEMENTED;
-    return STATUS_UNSUCCESSFUL;
-}
-
-
 NTSTATUS
 KspCopyCreateRequest(
     IN PIRP Irp,
@@ -140,7 +121,7 @@ KspCopyCreateRequest(
 }
 
 /*
-    @unimplemented
+    @implemented
 */
 KSDDKAPI
 PVOID
@@ -148,12 +129,17 @@ NTAPI
 KsGetObjectFromFileObject(
     IN PFILE_OBJECT FileObject)
 {
-    UNIMPLEMENTED
-    return NULL;
+    PKSIOBJECT_HEADER ObjectHeader;
+
+    /* get object header */
+    ObjectHeader = (PKSIOBJECT_HEADER)FileObject->FsContext2;
+
+    /* return associated object */
+    return ObjectHeader->ObjectType;
 }
 
 /*
-    @unimplemented
+    @implemented
 */
 KSDDKAPI
 KSOBJECTTYPE
@@ -161,20 +147,31 @@ NTAPI
 KsGetObjectTypeFromFileObject(
     IN PFILE_OBJECT FileObject)
 {
-    UNIMPLEMENTED
-    return (KSOBJECTTYPE)-1;
+    PKSIOBJECT_HEADER ObjectHeader;
+
+    /* get object header */
+    ObjectHeader = (PKSIOBJECT_HEADER)FileObject->FsContext2;
+    /* return type */
+    return ObjectHeader->Type;
 }
 
 /*
-    @unimplemented
+    @implemented
 */
 KSOBJECTTYPE
 NTAPI
 KsGetObjectTypeFromIrp(
     IN PIRP  Irp)
 {
-    UNIMPLEMENTED
-    return (KSOBJECTTYPE)-1;
+    PKSIOBJECT_HEADER ObjectHeader;
+    PIO_STACK_LOCATION IoStack;
+
+    /* get current irp stack */
+    IoStack = IoGetCurrentIrpStackLocation(Irp);
+    /* get object header */
+    ObjectHeader = (PKSIOBJECT_HEADER)IoStack->FileObject->FsContext2;
+    /* return type */
+    return ObjectHeader->Type;
 }
 
 /*
@@ -191,7 +188,7 @@ KsGetOuterUnknown(
 }
 
 /*
-    @unimplemented
+    @implemented
 */
 KSDDKAPI
 PVOID
@@ -199,8 +196,11 @@ NTAPI
 KsGetParent(
     IN PVOID Object)
 {
-    UNIMPLEMENTED
-    return NULL;
+    PKSBASIC_HEADER BasicHeader = (PKSBASIC_HEADER)((ULONG_PTR)Object - sizeof(KSBASIC_HEADER));
+    /* sanity check */
+    ASSERT(BasicHeader->Parent.KsDevice != NULL);
+    /* return object type */
+    return (PVOID)BasicHeader->Parent.KsDevice;
 }