2006-12-10 05:43:49 +00:00
|
|
|
/*
|
allocators.c
- Implement IKsAllocator interface and use it in new implemented KsCreateAllocator, KsCreateDefaultAllocatorEx, KsValidateAllocatorFramingEx
api.c
- Implement KsSetDevicePnpAndBaseObject, KsQueryDevicePnpObject, KsSetTargetState, KsSetTargetDeviceObject, KsSetPowerDispatch, KsFreeDeviceHeader, KsFreeObjectHeader, KsAllocateObjectCreateItem, KsFreeObjectCreateItem, KsFreeObjectCreateItemsByContext, KsCreateDefaultSecurity
clocks.c
- Implement KsCreateClock, KsCreateDefaultClock, partly implement KsAllocateDefaultClockEx, KsFreeDefaultClock, KsGetDefaultClockState, KsSetDefaultClockState, KsGetDefaultClockTime, KsSetDefaultClockTime
device.c
- Partly implement IKsDevice interface in order to let AVStream client devices initialize
- Implement KsInitializeDevice
- Implement registering of device interface for AVStream drivers
driver.c
- Implement KsGetDeviceForDeviceObject
- Set device flags for ks
- Store Address for client drivers device extension
filter.c
- Implement IKsFilter & IKsControl interface
- Handle KSPROPERTY requests
filterfactory.c
- Implement IKsFilterFactory interface
- Implement KsCreateFilterFactory, KsFilterFactorySetDeviceClassesState, KsFilterFactoryGetSymbolicLink, KsFilterFactoryAddCreateItem
- Add KsFilterFactoryUpdateCacheData
image.c
- Implement KsLoadResource
irp.c
- Implement KsDispatchQuerySecurity, KsDispatchSetSecurity, KsWriteFile, KsDefaultIoCompletion
svn path=/trunk/; revision=42109
2009-07-20 23:26:57 +00:00
|
|
|
* COPYRIGHT: See COPYING in the top level directory
|
|
|
|
* PROJECT: ReactOS Kernel Streaming
|
|
|
|
* FILE: drivers/ksfilter/ks/misc.c
|
|
|
|
* PURPOSE: KS Allocator functions
|
|
|
|
* PROGRAMMER: Johannes Anderwald
|
|
|
|
*/
|
2006-12-10 05:43:49 +00:00
|
|
|
|
2014-01-29 10:59:06 +00:00
|
|
|
#include "precomp.h"
|
2006-12-10 05:43:49 +00:00
|
|
|
|
2014-01-02 11:34:12 +00:00
|
|
|
#define NDEBUG
|
|
|
|
#include <debug.h>
|
|
|
|
|
2015-03-14 17:50:30 +00:00
|
|
|
#define TAG_KS 'ssKK'
|
|
|
|
|
2010-12-21 13:06:47 +00:00
|
|
|
VOID
|
|
|
|
CompleteRequest(
|
|
|
|
PIRP Irp,
|
|
|
|
CCHAR PriorityBoost)
|
|
|
|
{
|
|
|
|
DPRINT("Completing IRP %p Status %x\n", Irp, Irp->IoStatus.Status);
|
|
|
|
|
|
|
|
ASSERT(Irp->IoStatus.Status != STATUS_PENDING);
|
|
|
|
|
|
|
|
|
|
|
|
IoCompleteRequest(Irp, PriorityBoost);
|
|
|
|
}
|
|
|
|
|
allocators.c
- Implement IKsAllocator interface and use it in new implemented KsCreateAllocator, KsCreateDefaultAllocatorEx, KsValidateAllocatorFramingEx
api.c
- Implement KsSetDevicePnpAndBaseObject, KsQueryDevicePnpObject, KsSetTargetState, KsSetTargetDeviceObject, KsSetPowerDispatch, KsFreeDeviceHeader, KsFreeObjectHeader, KsAllocateObjectCreateItem, KsFreeObjectCreateItem, KsFreeObjectCreateItemsByContext, KsCreateDefaultSecurity
clocks.c
- Implement KsCreateClock, KsCreateDefaultClock, partly implement KsAllocateDefaultClockEx, KsFreeDefaultClock, KsGetDefaultClockState, KsSetDefaultClockState, KsGetDefaultClockTime, KsSetDefaultClockTime
device.c
- Partly implement IKsDevice interface in order to let AVStream client devices initialize
- Implement KsInitializeDevice
- Implement registering of device interface for AVStream drivers
driver.c
- Implement KsGetDeviceForDeviceObject
- Set device flags for ks
- Store Address for client drivers device extension
filter.c
- Implement IKsFilter & IKsControl interface
- Handle KSPROPERTY requests
filterfactory.c
- Implement IKsFilterFactory interface
- Implement KsCreateFilterFactory, KsFilterFactorySetDeviceClassesState, KsFilterFactoryGetSymbolicLink, KsFilterFactoryAddCreateItem
- Add KsFilterFactoryUpdateCacheData
image.c
- Implement KsLoadResource
irp.c
- Implement KsDispatchQuerySecurity, KsDispatchSetSecurity, KsWriteFile, KsDefaultIoCompletion
svn path=/trunk/; revision=42109
2009-07-20 23:26:57 +00:00
|
|
|
PVOID
|
|
|
|
AllocateItem(
|
|
|
|
IN POOL_TYPE PoolType,
|
|
|
|
IN SIZE_T NumberOfBytes)
|
2006-12-10 05:43:49 +00:00
|
|
|
{
|
2015-03-14 17:50:30 +00:00
|
|
|
PVOID Item = ExAllocatePoolWithTag(PoolType, NumberOfBytes, TAG_KS);
|
allocators.c
- Implement IKsAllocator interface and use it in new implemented KsCreateAllocator, KsCreateDefaultAllocatorEx, KsValidateAllocatorFramingEx
api.c
- Implement KsSetDevicePnpAndBaseObject, KsQueryDevicePnpObject, KsSetTargetState, KsSetTargetDeviceObject, KsSetPowerDispatch, KsFreeDeviceHeader, KsFreeObjectHeader, KsAllocateObjectCreateItem, KsFreeObjectCreateItem, KsFreeObjectCreateItemsByContext, KsCreateDefaultSecurity
clocks.c
- Implement KsCreateClock, KsCreateDefaultClock, partly implement KsAllocateDefaultClockEx, KsFreeDefaultClock, KsGetDefaultClockState, KsSetDefaultClockState, KsGetDefaultClockTime, KsSetDefaultClockTime
device.c
- Partly implement IKsDevice interface in order to let AVStream client devices initialize
- Implement KsInitializeDevice
- Implement registering of device interface for AVStream drivers
driver.c
- Implement KsGetDeviceForDeviceObject
- Set device flags for ks
- Store Address for client drivers device extension
filter.c
- Implement IKsFilter & IKsControl interface
- Handle KSPROPERTY requests
filterfactory.c
- Implement IKsFilterFactory interface
- Implement KsCreateFilterFactory, KsFilterFactorySetDeviceClassesState, KsFilterFactoryGetSymbolicLink, KsFilterFactoryAddCreateItem
- Add KsFilterFactoryUpdateCacheData
image.c
- Implement KsLoadResource
irp.c
- Implement KsDispatchQuerySecurity, KsDispatchSetSecurity, KsWriteFile, KsDefaultIoCompletion
svn path=/trunk/; revision=42109
2009-07-20 23:26:57 +00:00
|
|
|
if (!Item)
|
|
|
|
return Item;
|
2006-12-10 05:43:49 +00:00
|
|
|
|
allocators.c
- Implement IKsAllocator interface and use it in new implemented KsCreateAllocator, KsCreateDefaultAllocatorEx, KsValidateAllocatorFramingEx
api.c
- Implement KsSetDevicePnpAndBaseObject, KsQueryDevicePnpObject, KsSetTargetState, KsSetTargetDeviceObject, KsSetPowerDispatch, KsFreeDeviceHeader, KsFreeObjectHeader, KsAllocateObjectCreateItem, KsFreeObjectCreateItem, KsFreeObjectCreateItemsByContext, KsCreateDefaultSecurity
clocks.c
- Implement KsCreateClock, KsCreateDefaultClock, partly implement KsAllocateDefaultClockEx, KsFreeDefaultClock, KsGetDefaultClockState, KsSetDefaultClockState, KsGetDefaultClockTime, KsSetDefaultClockTime
device.c
- Partly implement IKsDevice interface in order to let AVStream client devices initialize
- Implement KsInitializeDevice
- Implement registering of device interface for AVStream drivers
driver.c
- Implement KsGetDeviceForDeviceObject
- Set device flags for ks
- Store Address for client drivers device extension
filter.c
- Implement IKsFilter & IKsControl interface
- Handle KSPROPERTY requests
filterfactory.c
- Implement IKsFilterFactory interface
- Implement KsCreateFilterFactory, KsFilterFactorySetDeviceClassesState, KsFilterFactoryGetSymbolicLink, KsFilterFactoryAddCreateItem
- Add KsFilterFactoryUpdateCacheData
image.c
- Implement KsLoadResource
irp.c
- Implement KsDispatchQuerySecurity, KsDispatchSetSecurity, KsWriteFile, KsDefaultIoCompletion
svn path=/trunk/; revision=42109
2009-07-20 23:26:57 +00:00
|
|
|
RtlZeroMemory(Item, NumberOfBytes);
|
|
|
|
return Item;
|
2006-12-10 05:43:49 +00:00
|
|
|
}
|
|
|
|
|
allocators.c
- Implement IKsAllocator interface and use it in new implemented KsCreateAllocator, KsCreateDefaultAllocatorEx, KsValidateAllocatorFramingEx
api.c
- Implement KsSetDevicePnpAndBaseObject, KsQueryDevicePnpObject, KsSetTargetState, KsSetTargetDeviceObject, KsSetPowerDispatch, KsFreeDeviceHeader, KsFreeObjectHeader, KsAllocateObjectCreateItem, KsFreeObjectCreateItem, KsFreeObjectCreateItemsByContext, KsCreateDefaultSecurity
clocks.c
- Implement KsCreateClock, KsCreateDefaultClock, partly implement KsAllocateDefaultClockEx, KsFreeDefaultClock, KsGetDefaultClockState, KsSetDefaultClockState, KsGetDefaultClockTime, KsSetDefaultClockTime
device.c
- Partly implement IKsDevice interface in order to let AVStream client devices initialize
- Implement KsInitializeDevice
- Implement registering of device interface for AVStream drivers
driver.c
- Implement KsGetDeviceForDeviceObject
- Set device flags for ks
- Store Address for client drivers device extension
filter.c
- Implement IKsFilter & IKsControl interface
- Handle KSPROPERTY requests
filterfactory.c
- Implement IKsFilterFactory interface
- Implement KsCreateFilterFactory, KsFilterFactorySetDeviceClassesState, KsFilterFactoryGetSymbolicLink, KsFilterFactoryAddCreateItem
- Add KsFilterFactoryUpdateCacheData
image.c
- Implement KsLoadResource
irp.c
- Implement KsDispatchQuerySecurity, KsDispatchSetSecurity, KsWriteFile, KsDefaultIoCompletion
svn path=/trunk/; revision=42109
2009-07-20 23:26:57 +00:00
|
|
|
VOID
|
|
|
|
FreeItem(
|
|
|
|
IN PVOID Item)
|
2006-12-10 05:43:49 +00:00
|
|
|
{
|
allocators.c
- Implement IKsAllocator interface and use it in new implemented KsCreateAllocator, KsCreateDefaultAllocatorEx, KsValidateAllocatorFramingEx
api.c
- Implement KsSetDevicePnpAndBaseObject, KsQueryDevicePnpObject, KsSetTargetState, KsSetTargetDeviceObject, KsSetPowerDispatch, KsFreeDeviceHeader, KsFreeObjectHeader, KsAllocateObjectCreateItem, KsFreeObjectCreateItem, KsFreeObjectCreateItemsByContext, KsCreateDefaultSecurity
clocks.c
- Implement KsCreateClock, KsCreateDefaultClock, partly implement KsAllocateDefaultClockEx, KsFreeDefaultClock, KsGetDefaultClockState, KsSetDefaultClockState, KsGetDefaultClockTime, KsSetDefaultClockTime
device.c
- Partly implement IKsDevice interface in order to let AVStream client devices initialize
- Implement KsInitializeDevice
- Implement registering of device interface for AVStream drivers
driver.c
- Implement KsGetDeviceForDeviceObject
- Set device flags for ks
- Store Address for client drivers device extension
filter.c
- Implement IKsFilter & IKsControl interface
- Handle KSPROPERTY requests
filterfactory.c
- Implement IKsFilterFactory interface
- Implement KsCreateFilterFactory, KsFilterFactorySetDeviceClassesState, KsFilterFactoryGetSymbolicLink, KsFilterFactoryAddCreateItem
- Add KsFilterFactoryUpdateCacheData
image.c
- Implement KsLoadResource
irp.c
- Implement KsDispatchQuerySecurity, KsDispatchSetSecurity, KsWriteFile, KsDefaultIoCompletion
svn path=/trunk/; revision=42109
2009-07-20 23:26:57 +00:00
|
|
|
ExFreePool(Item);
|
2006-12-10 05:43:49 +00:00
|
|
|
}
|
|
|
|
|
2009-07-22 19:08:57 +00:00
|
|
|
NTSTATUS
|
|
|
|
KspCopyCreateRequest(
|
|
|
|
IN PIRP Irp,
|
|
|
|
IN LPWSTR ObjectClass,
|
|
|
|
IN OUT PULONG Size,
|
|
|
|
OUT PVOID * Result)
|
|
|
|
{
|
|
|
|
PIO_STACK_LOCATION IoStack;
|
2014-05-10 10:02:09 +00:00
|
|
|
SIZE_T ObjectLength, ParametersLength;
|
2009-07-22 19:08:57 +00:00
|
|
|
PVOID Buffer;
|
|
|
|
|
|
|
|
/* get current irp stack */
|
|
|
|
IoStack = IoGetCurrentIrpStackLocation(Irp);
|
|
|
|
|
|
|
|
/* get object class length */
|
2010-11-02 09:37:30 +00:00
|
|
|
ObjectLength = (wcslen(ObjectClass) + 1) * sizeof(WCHAR);
|
2009-07-22 19:08:57 +00:00
|
|
|
|
|
|
|
/* check for minium length requirement */
|
|
|
|
if (ObjectLength + *Size > IoStack->FileObject->FileName.MaximumLength)
|
|
|
|
return STATUS_UNSUCCESSFUL;
|
|
|
|
|
|
|
|
/* extract parameters length */
|
|
|
|
ParametersLength = IoStack->FileObject->FileName.MaximumLength - ObjectLength;
|
|
|
|
|
|
|
|
/* allocate buffer */
|
|
|
|
Buffer = AllocateItem(NonPagedPool, ParametersLength);
|
|
|
|
if (!Buffer)
|
|
|
|
return STATUS_INSUFFICIENT_RESOURCES;
|
|
|
|
|
|
|
|
/* copy parameters */
|
|
|
|
RtlMoveMemory(Buffer, &IoStack->FileObject->FileName.Buffer[ObjectLength / sizeof(WCHAR)], ParametersLength);
|
|
|
|
|
|
|
|
/* store result */
|
|
|
|
*Result = Buffer;
|
2014-05-10 10:02:09 +00:00
|
|
|
*Size = (ULONG)ParametersLength;
|
2009-07-22 19:08:57 +00:00
|
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
|
|
}
|
|
|
|
|
2009-07-23 13:13:45 +00:00
|
|
|
/*
|
2009-07-28 13:52:57 +00:00
|
|
|
@implemented
|
2009-07-23 13:13:45 +00:00
|
|
|
*/
|
|
|
|
KSDDKAPI
|
|
|
|
PVOID
|
|
|
|
NTAPI
|
|
|
|
KsGetObjectFromFileObject(
|
|
|
|
IN PFILE_OBJECT FileObject)
|
|
|
|
{
|
2009-07-28 13:52:57 +00:00
|
|
|
PKSIOBJECT_HEADER ObjectHeader;
|
|
|
|
|
|
|
|
/* get object header */
|
2009-09-12 14:35:27 +00:00
|
|
|
ObjectHeader = (PKSIOBJECT_HEADER)FileObject->FsContext2;
|
2009-07-28 13:52:57 +00:00
|
|
|
|
|
|
|
/* return associated object */
|
|
|
|
return ObjectHeader->ObjectType;
|
2009-07-23 13:13:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
2009-07-28 13:52:57 +00:00
|
|
|
@implemented
|
2009-07-23 13:13:45 +00:00
|
|
|
*/
|
|
|
|
KSDDKAPI
|
|
|
|
KSOBJECTTYPE
|
|
|
|
NTAPI
|
|
|
|
KsGetObjectTypeFromFileObject(
|
|
|
|
IN PFILE_OBJECT FileObject)
|
|
|
|
{
|
2009-07-28 13:52:57 +00:00
|
|
|
PKSIOBJECT_HEADER ObjectHeader;
|
|
|
|
|
|
|
|
/* get object header */
|
2009-09-12 14:35:27 +00:00
|
|
|
ObjectHeader = (PKSIOBJECT_HEADER)FileObject->FsContext2;
|
2009-07-28 13:52:57 +00:00
|
|
|
/* return type */
|
|
|
|
return ObjectHeader->Type;
|
2009-07-23 13:13:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
2009-07-28 13:52:57 +00:00
|
|
|
@implemented
|
2009-07-23 13:13:45 +00:00
|
|
|
*/
|
|
|
|
KSOBJECTTYPE
|
|
|
|
NTAPI
|
|
|
|
KsGetObjectTypeFromIrp(
|
|
|
|
IN PIRP Irp)
|
|
|
|
{
|
2009-07-28 13:52:57 +00:00
|
|
|
PKSIOBJECT_HEADER ObjectHeader;
|
|
|
|
PIO_STACK_LOCATION IoStack;
|
|
|
|
|
|
|
|
/* get current irp stack */
|
|
|
|
IoStack = IoGetCurrentIrpStackLocation(Irp);
|
|
|
|
/* get object header */
|
2009-09-12 14:35:27 +00:00
|
|
|
ObjectHeader = (PKSIOBJECT_HEADER)IoStack->FileObject->FsContext2;
|
2009-07-28 13:52:57 +00:00
|
|
|
/* return type */
|
|
|
|
return ObjectHeader->Type;
|
2009-07-23 13:13:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
2010-04-15 10:07:38 +00:00
|
|
|
@implemented
|
2009-07-23 13:13:45 +00:00
|
|
|
*/
|
|
|
|
PUNKNOWN
|
|
|
|
NTAPI
|
|
|
|
KsGetOuterUnknown(
|
|
|
|
IN PVOID Object)
|
|
|
|
{
|
2010-04-15 10:07:38 +00:00
|
|
|
PKSBASIC_HEADER BasicHeader = (PKSBASIC_HEADER)((ULONG_PTR)Object - sizeof(KSBASIC_HEADER));
|
|
|
|
|
|
|
|
/* sanity check */
|
2014-05-10 10:02:09 +00:00
|
|
|
ASSERT(BasicHeader->Type == KsObjectTypeDevice || BasicHeader->Type == KsObjectTypeFilterFactory ||
|
2010-04-15 10:07:38 +00:00
|
|
|
BasicHeader->Type == KsObjectTypeFilter || BasicHeader->Type == KsObjectTypePin);
|
2009-07-23 13:13:45 +00:00
|
|
|
|
2010-04-15 10:07:38 +00:00
|
|
|
/* return objects outer unknown */
|
|
|
|
return BasicHeader->OuterUnknown;
|
2009-07-23 13:13:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
2009-07-28 13:52:57 +00:00
|
|
|
@implemented
|
2009-07-23 13:13:45 +00:00
|
|
|
*/
|
|
|
|
KSDDKAPI
|
|
|
|
PVOID
|
|
|
|
NTAPI
|
|
|
|
KsGetParent(
|
|
|
|
IN PVOID Object)
|
|
|
|
{
|
2009-07-28 13:52:57 +00:00
|
|
|
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;
|
2009-07-23 13:13:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|