mirror of
https://github.com/reactos/reactos.git
synced 2024-10-08 02:13:56 +00:00
- Store KSPROPERTY_SET in Irp when using KsPropertyHandler
- Fix a bug in KsPinDataIntersection svn path=/trunk/; revision=43369
This commit is contained in:
parent
8512a881b0
commit
aacb520dac
|
@ -291,7 +291,7 @@ KsPinPropertyHandler(
|
||||||
IoStack = IoGetCurrentIrpStackLocation(Irp);
|
IoStack = IoGetCurrentIrpStackLocation(Irp);
|
||||||
Buffer = Irp->UserBuffer;
|
Buffer = Irp->UserBuffer;
|
||||||
|
|
||||||
DPRINT("KsPinPropertyHandler Irp %p Property %p Data %p DescriptorsCount %u Descriptor %p OutputLength %u Id %x\n", Irp, Property, Data, DescriptorsCount, Descriptor, IoStack->Parameters.DeviceIoControl.OutputBufferLength, Property->Id);
|
DPRINT("KsPinPropertyHandler Irp %p Property %p Data %p DescriptorsCount %u Descriptor %p OutputLength %u Id %u\n", Irp, Property, Data, DescriptorsCount, Descriptor, IoStack->Parameters.DeviceIoControl.OutputBufferLength, Property->Id);
|
||||||
|
|
||||||
switch(Property->Id)
|
switch(Property->Id)
|
||||||
{
|
{
|
||||||
|
@ -584,6 +584,24 @@ KsPinPropertyHandler(
|
||||||
return Status;
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@implemented
|
@implemented
|
||||||
*/
|
*/
|
||||||
|
@ -627,7 +645,7 @@ KsPinDataIntersection(
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get start item */
|
/* get start item */
|
||||||
Item = (KSMULTIPLE_ITEM*)IoStack->Parameters.DeviceIoControl.Type3InputBuffer;
|
Item = (KSMULTIPLE_ITEM*)(Pin + 1);
|
||||||
/* get first data range */
|
/* get first data range */
|
||||||
DataRange = (KSDATARANGE*)(Item + 1);
|
DataRange = (KSDATARANGE*)(Item + 1);
|
||||||
/* iterate through all data ranges */
|
/* iterate through all data ranges */
|
||||||
|
|
|
@ -81,25 +81,6 @@ KspForwardIrpSynchronous(
|
||||||
return Status;
|
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
|
NTSTATUS
|
||||||
KspCopyCreateRequest(
|
KspCopyCreateRequest(
|
||||||
IN PIRP Irp,
|
IN PIRP Irp,
|
||||||
|
|
|
@ -18,7 +18,8 @@ FindPropertyHandler(
|
||||||
IN ULONG InputBufferLength,
|
IN ULONG InputBufferLength,
|
||||||
IN ULONG OutputBufferLength,
|
IN ULONG OutputBufferLength,
|
||||||
OUT PVOID OutputBuffer,
|
OUT PVOID OutputBuffer,
|
||||||
OUT PFNKSHANDLER *PropertyHandler)
|
OUT PFNKSHANDLER *PropertyHandler,
|
||||||
|
OUT PKSPROPERTY_SET * Set)
|
||||||
{
|
{
|
||||||
ULONG Index, ItemIndex;
|
ULONG Index, ItemIndex;
|
||||||
//PULONG Flags;
|
//PULONG Flags;
|
||||||
|
@ -93,6 +94,7 @@ FindPropertyHandler(
|
||||||
if (Property->Flags & KSPROPERTY_TYPE_GET)
|
if (Property->Flags & KSPROPERTY_TYPE_GET)
|
||||||
*PropertyHandler = PropertySet[Index].PropertyItem[ItemIndex].GetPropertyHandler;
|
*PropertyHandler = PropertySet[Index].PropertyItem[ItemIndex].GetPropertyHandler;
|
||||||
|
|
||||||
|
*Set = (PKSPROPERTY_SET)&PropertySet[Index];
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -111,6 +113,7 @@ KspPropertyHandler(
|
||||||
IN ULONG PropertyItemSize OPTIONAL)
|
IN ULONG PropertyItemSize OPTIONAL)
|
||||||
{
|
{
|
||||||
PKSPROPERTY Property;
|
PKSPROPERTY Property;
|
||||||
|
PKSPROPERTY_SET Set;
|
||||||
PIO_STACK_LOCATION IoStack;
|
PIO_STACK_LOCATION IoStack;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
PFNKSHANDLER PropertyHandler = NULL;
|
PFNKSHANDLER PropertyHandler = NULL;
|
||||||
|
@ -139,11 +142,12 @@ KspPropertyHandler(
|
||||||
ASSERT(PropertyItemSize == 0 || PropertyItemSize == sizeof(KSPROPERTY_ITEM));
|
ASSERT(PropertyItemSize == 0 || PropertyItemSize == sizeof(KSPROPERTY_ITEM));
|
||||||
|
|
||||||
/* find the property handler */
|
/* find the property handler */
|
||||||
Status = FindPropertyHandler(&Irp->IoStatus, PropertySet, PropertySetsCount, Property, IoStack->Parameters.DeviceIoControl.InputBufferLength, IoStack->Parameters.DeviceIoControl.OutputBufferLength, Irp->UserBuffer, &PropertyHandler);
|
Status = FindPropertyHandler(&Irp->IoStatus, PropertySet, PropertySetsCount, Property, IoStack->Parameters.DeviceIoControl.InputBufferLength, IoStack->Parameters.DeviceIoControl.OutputBufferLength, Irp->UserBuffer, &PropertyHandler, &Set);
|
||||||
|
|
||||||
if (NT_SUCCESS(Status) && PropertyHandler)
|
if (NT_SUCCESS(Status) && PropertyHandler)
|
||||||
{
|
{
|
||||||
/* call property handler */
|
/* call property handler */
|
||||||
|
KSPROPERTY_SET_IRP_STORAGE(Irp) = Set;
|
||||||
Status = PropertyHandler(Irp, Property, Irp->UserBuffer);
|
Status = PropertyHandler(Irp, Property, Irp->UserBuffer);
|
||||||
|
|
||||||
if (Status == STATUS_BUFFER_TOO_SMALL)
|
if (Status == STATUS_BUFFER_TOO_SMALL)
|
||||||
|
|
Loading…
Reference in a new issue