mirror of
https://github.com/reactos/reactos.git
synced 2025-05-07 02:41:22 +00:00
- Start implementing KsValidateConnectRequest
- Pass OBJ_OPENIF flag to KspCreateObjectType - KsCreatePin works now svn path=/trunk/; revision=39650
This commit is contained in:
parent
3b2c9f5d55
commit
26f9765e9c
2 changed files with 72 additions and 5 deletions
|
@ -1,6 +1,11 @@
|
||||||
#include "priv.h"
|
#include "priv.h"
|
||||||
|
|
||||||
KSDDKAPI NTSTATUS NTAPI
|
/*
|
||||||
|
@implemented
|
||||||
|
*/
|
||||||
|
KSDDKAPI
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
KsCreatePin(
|
KsCreatePin(
|
||||||
IN HANDLE FilterHandle,
|
IN HANDLE FilterHandle,
|
||||||
IN PKSPIN_CONNECT Connect,
|
IN PKSPIN_CONNECT Connect,
|
||||||
|
@ -17,23 +22,83 @@ KsCreatePin(
|
||||||
}
|
}
|
||||||
|
|
||||||
return KspCreateObjectType(FilterHandle,
|
return KspCreateObjectType(FilterHandle,
|
||||||
L"{146F1A80-4791-11D0-A5D6-28DB04C10000}",
|
L"{146F1A80-4791-11D0-A5D6-28DB04C10000}", //KSNAME_Pin
|
||||||
(PVOID)Connect,
|
(PVOID)Connect,
|
||||||
ConnectSize,
|
ConnectSize,
|
||||||
DesiredAccess,
|
DesiredAccess,
|
||||||
ConnectionHandle);
|
ConnectionHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
KSDDKAPI NTSTATUS NTAPI
|
/*
|
||||||
|
@unimplemented
|
||||||
|
*/
|
||||||
|
KSDDKAPI
|
||||||
|
NTSTATUS
|
||||||
|
NTAPI
|
||||||
KsValidateConnectRequest(
|
KsValidateConnectRequest(
|
||||||
IN PIRP Irp,
|
IN PIRP Irp,
|
||||||
IN ULONG DescriptorsCount,
|
IN ULONG DescriptorsCount,
|
||||||
IN KSPIN_DESCRIPTOR* Descriptor,
|
IN KSPIN_DESCRIPTOR* Descriptor,
|
||||||
OUT PKSPIN_CONNECT* Connect)
|
OUT PKSPIN_CONNECT* Connect)
|
||||||
{
|
{
|
||||||
|
PIO_STACK_LOCATION IoStack;
|
||||||
|
PKSPIN_CONNECT ConnectDetails;
|
||||||
|
LPWSTR PinName = L"{146F1A80-4791-11D0-A5D6-28DB04C10000}\\";
|
||||||
|
PKSDATAFORMAT DataFormat;
|
||||||
|
|
||||||
|
IoStack = IoGetCurrentIrpStackLocation(Irp);
|
||||||
|
if (!IoStack->FileObject->FileName.Buffer)
|
||||||
|
return STATUS_INVALID_PARAMETER;
|
||||||
|
|
||||||
|
if (wcsncmp(IoStack->FileObject->FileName.Buffer, PinName, wcslen(PinName)))
|
||||||
|
return STATUS_INVALID_PARAMETER;
|
||||||
|
|
||||||
|
ConnectDetails = (PKSPIN_CONNECT)(IoStack->FileObject->FileName.Buffer + wcslen(PinName));
|
||||||
|
|
||||||
|
if (ConnectDetails->PinToHandle != NULL)
|
||||||
|
{
|
||||||
|
UNIMPLEMENTED
|
||||||
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IoStack->FileObject->FileName.Length < wcslen(PinName) + sizeof(KSPIN_CONNECT) + sizeof(KSDATAFORMAT))
|
||||||
|
return STATUS_INVALID_PARAMETER;
|
||||||
|
|
||||||
|
ConnectDetails = (PKSPIN_CONNECT)(IoStack->FileObject->FileName.Buffer + wcslen(PinName));
|
||||||
|
|
||||||
|
if (ConnectDetails->PinId >= DescriptorsCount)
|
||||||
|
return STATUS_INVALID_PARAMETER;
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
if (!IsEqualGUIDAligned(&ConnectDetails->Interface.Set, &KSINTERFACESETID_Standard) &&
|
||||||
|
ConnectDetails->Interface.Id != KSINTERFACE_STANDARD_STREAMING)
|
||||||
|
{
|
||||||
|
//FIXME
|
||||||
|
// validate provided interface set
|
||||||
|
DPRINT1("FIXME\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!IsEqualGUIDAligned(&ConnectDetails->Medium.Set, &KSMEDIUMSETID_Standard) &&
|
||||||
|
ConnectDetails->Medium.Id != KSMEDIUM_TYPE_ANYINSTANCE)
|
||||||
|
{
|
||||||
|
//FIXME
|
||||||
|
// validate provided medium set
|
||||||
|
DPRINT1("FIXME\n");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// FIXME
|
||||||
|
/// implement format checking
|
||||||
|
|
||||||
|
DataFormat = (PKSDATAFORMAT) (ConnectDetails + 1);
|
||||||
|
*Connect = ConnectDetails;
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@implemented
|
||||||
|
*/
|
||||||
KSDDKAPI
|
KSDDKAPI
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -241,6 +306,9 @@ KsPinPropertyHandler(
|
||||||
return Irp->IoStatus.Status;
|
return Irp->IoStatus.Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@implemented
|
||||||
|
*/
|
||||||
KSDDKAPI
|
KSDDKAPI
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
|
|
|
@ -34,8 +34,7 @@ KspCreateObjectType(
|
||||||
RtlMoveMemory(Name.Buffer + wcslen(ObjectType) +1, CreateParameters, CreateParametersSize);
|
RtlMoveMemory(Name.Buffer + wcslen(ObjectType) +1, CreateParameters, CreateParametersSize);
|
||||||
|
|
||||||
Name.Buffer[Name.Length / 2] = L'\0';
|
Name.Buffer[Name.Length / 2] = L'\0';
|
||||||
|
InitializeObjectAttributes(&ObjectAttributes, &Name, OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE | OBJ_OPENIF, ParentHandle, NULL);
|
||||||
InitializeObjectAttributes(&ObjectAttributes, &Name, OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE, ParentHandle, NULL);
|
|
||||||
|
|
||||||
|
|
||||||
Status = IoCreateFile(NodeHandle,
|
Status = IoCreateFile(NodeHandle,
|
||||||
|
|
Loading…
Reference in a new issue