}
/*
- @unimplemented
+ @implemented
*/
KSDDKAPI
PVOID
KsGetObjectFromFileObject(
IN PFILE_OBJECT FileObject)
{
- UNIMPLEMENTED
- return NULL;
+ PKSIOBJECT_HEADER ObjectHeader;
+
+ /* get object header */
+ ObjectHeader = (PKSIOBJECT_HEADER)FileObject->FsContext;
+
+ /* return associated object */
+ return ObjectHeader->ObjectType;
}
/*
- @unimplemented
+ @implemented
*/
KSDDKAPI
KSOBJECTTYPE
KsGetObjectTypeFromFileObject(
IN PFILE_OBJECT FileObject)
{
- UNIMPLEMENTED
- return (KSOBJECTTYPE)-1;
+ PKSIOBJECT_HEADER ObjectHeader;
+
+ /* get object header */
+ ObjectHeader = (PKSIOBJECT_HEADER)FileObject->FsContext;
+ /* 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->FsContext;
+ /* return type */
+ return ObjectHeader->Type;
}
/*
}
/*
- @unimplemented
+ @implemented
*/
KSDDKAPI
PVOID
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;
}