- Implement KsGetObjectFromFileObject, KsGetObjectFromFileObject, KsGetObjectTypeFromIrp, KsGetParent

svn path=/trunk/; revision=42268
This commit is contained in:
Johannes Anderwald 2009-07-28 13:52:57 +00:00
parent 5e12a7edb1
commit ca60ae56c0
6 changed files with 47 additions and 14 deletions

View file

@ -513,6 +513,11 @@ KsAllocateDeviceHeader(
/* initialize create item list */ /* initialize create item list */
InitializeListHead(&Header->ItemList); InitializeListHead(&Header->ItemList);
/* initialize basic header */
Header->BasicHeader.Type = KsObjectTypeDevice;
Header->BasicHeader.KsDevice = &Header->KsDevice;
Header->BasicHeader.Parent.KsDevice = &Header->KsDevice;
/* are there any create items provided */ /* are there any create items provided */
if (ItemsCount && ItemsList) if (ItemsCount && ItemsList)
{ {

View file

@ -653,7 +653,6 @@ KsInitializeDevice(
KsSetDevicePnpAndBaseObject(Header, PhysicalDeviceObject, NextDeviceObject); KsSetDevicePnpAndBaseObject(Header, PhysicalDeviceObject, NextDeviceObject);
/* initialize IKsDevice interface */ /* initialize IKsDevice interface */
Header->lpVtblIKsDevice = &vt_IKsDevice; Header->lpVtblIKsDevice = &vt_IKsDevice;
Header->Type = KsObjectTypeDevice;
Header->ref = 1; Header->ref = 1;
/* FIXME Power state */ /* FIXME Power state */

View file

@ -865,6 +865,7 @@ KspCreateFilter(
This->FilterFactory = iface; This->FilterFactory = iface;
This->FileObject = IoStack->FileObject; This->FileObject = IoStack->FileObject;
This->Header.KsDevice = &DeviceExtension->DeviceHeader->KsDevice; This->Header.KsDevice = &DeviceExtension->DeviceHeader->KsDevice;
This->Header.Parent.KsFilterFactory = iface->lpVtbl->GetStruct(iface);
This->Header.Type = KsObjectTypeFilter; This->Header.Type = KsObjectTypeFilter;
/* allocate the stream descriptors */ /* allocate the stream descriptors */
@ -919,6 +920,7 @@ KspCreateFilter(
This->Header.KsDevice = &DeviceExtension->DeviceHeader->KsDevice; This->Header.KsDevice = &DeviceExtension->DeviceHeader->KsDevice;
This->ObjectHeader->Type = KsObjectTypeFilter; This->ObjectHeader->Type = KsObjectTypeFilter;
This->ObjectHeader->Unknown = (PUNKNOWN)&This->lpVtbl; This->ObjectHeader->Unknown = (PUNKNOWN)&This->lpVtbl;
This->ObjectHeader->ObjectType = (PVOID)&This->Filter;
/* completed initialization */ /* completed initialization */

View file

@ -185,6 +185,7 @@ IKsFilterFactory_fnInitialize(
This->FilterFactory.FilterDescriptor = Descriptor; This->FilterFactory.FilterDescriptor = Descriptor;
This->Header.KsDevice = &DeviceExtension->DeviceHeader->KsDevice; This->Header.KsDevice = &DeviceExtension->DeviceHeader->KsDevice;
This->Header.Type = KsObjectTypeFilterFactory; This->Header.Type = KsObjectTypeFilterFactory;
This->Header.Parent.KsDevice = &DeviceExtension->DeviceHeader->KsDevice;
This->DeviceHeader = DeviceExtension->DeviceHeader; This->DeviceHeader = DeviceExtension->DeviceHeader;
InitializeListHead(&This->SymbolicLinkList); InitializeListHead(&This->SymbolicLinkList);

View file

@ -28,6 +28,7 @@ typedef struct
UNICODE_STRING ObjectClass; UNICODE_STRING ObjectClass;
PUNKNOWN Unknown; PUNKNOWN Unknown;
PVOID ObjectType;
PDEVICE_OBJECT TargetDevice; PDEVICE_OBJECT TargetDevice;
LIST_ENTRY TargetDeviceListEntry; LIST_ENTRY TargetDeviceListEntry;
@ -55,11 +56,17 @@ typedef struct
{ {
KSOBJECTTYPE Type; KSOBJECTTYPE Type;
PKSDEVICE KsDevice; PKSDEVICE KsDevice;
union
{
PKSDEVICE KsDevice;
PKSFILTERFACTORY KsFilterFactory;
PKSFILTER KsFilter;
}Parent;
}KSBASIC_HEADER, *PKSBASIC_HEADER; }KSBASIC_HEADER, *PKSBASIC_HEADER;
typedef struct typedef struct
{ {
KSOBJECTTYPE Type; KSBASIC_HEADER BasicHeader;
KSDEVICE KsDevice; KSDEVICE KsDevice;
IKsDeviceVtbl *lpVtblIKsDevice; IKsDeviceVtbl *lpVtblIKsDevice;

View file

@ -140,7 +140,7 @@ KspCopyCreateRequest(
} }
/* /*
@unimplemented @implemented
*/ */
KSDDKAPI KSDDKAPI
PVOID PVOID
@ -148,12 +148,17 @@ NTAPI
KsGetObjectFromFileObject( KsGetObjectFromFileObject(
IN PFILE_OBJECT FileObject) IN PFILE_OBJECT FileObject)
{ {
UNIMPLEMENTED PKSIOBJECT_HEADER ObjectHeader;
return NULL;
/* get object header */
ObjectHeader = (PKSIOBJECT_HEADER)FileObject->FsContext;
/* return associated object */
return ObjectHeader->ObjectType;
} }
/* /*
@unimplemented @implemented
*/ */
KSDDKAPI KSDDKAPI
KSOBJECTTYPE KSOBJECTTYPE
@ -161,20 +166,31 @@ NTAPI
KsGetObjectTypeFromFileObject( KsGetObjectTypeFromFileObject(
IN PFILE_OBJECT FileObject) IN PFILE_OBJECT FileObject)
{ {
UNIMPLEMENTED PKSIOBJECT_HEADER ObjectHeader;
return (KSOBJECTTYPE)-1;
/* get object header */
ObjectHeader = (PKSIOBJECT_HEADER)FileObject->FsContext;
/* return type */
return ObjectHeader->Type;
} }
/* /*
@unimplemented @implemented
*/ */
KSOBJECTTYPE KSOBJECTTYPE
NTAPI NTAPI
KsGetObjectTypeFromIrp( KsGetObjectTypeFromIrp(
IN PIRP Irp) IN PIRP Irp)
{ {
UNIMPLEMENTED PKSIOBJECT_HEADER ObjectHeader;
return (KSOBJECTTYPE)-1; 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;
} }
/* /*
@ -191,7 +207,7 @@ KsGetOuterUnknown(
} }
/* /*
@unimplemented @implemented
*/ */
KSDDKAPI KSDDKAPI
PVOID PVOID
@ -199,8 +215,11 @@ NTAPI
KsGetParent( KsGetParent(
IN PVOID Object) IN PVOID Object)
{ {
UNIMPLEMENTED PKSBASIC_HEADER BasicHeader = (PKSBASIC_HEADER)((ULONG_PTR)Object - sizeof(KSBASIC_HEADER));
return NULL; /* sanity check */
ASSERT(BasicHeader->Parent.KsDevice != NULL);
/* return object type */
return (PVOID)BasicHeader->Parent.KsDevice;
} }