mirror of
https://github.com/reactos/reactos.git
synced 2025-06-07 10:20:26 +00:00
- Implement KsGetObjectFromFileObject, KsGetObjectFromFileObject, KsGetObjectTypeFromIrp, KsGetParent
svn path=/trunk/; revision=42268
This commit is contained in:
parent
5e12a7edb1
commit
ca60ae56c0
6 changed files with 47 additions and 14 deletions
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue