- Start implementing KsValidateConnectRequest

- Pass OBJ_OPENIF flag to KspCreateObjectType
- KsCreatePin works now

svn path=/trunk/; revision=39650
This commit is contained in:
Johannes Anderwald 2009-02-17 19:30:40 +00:00
parent 3b2c9f5d55
commit 26f9765e9c
2 changed files with 72 additions and 5 deletions

View file

@ -1,6 +1,11 @@
#include "priv.h"
KSDDKAPI NTSTATUS NTAPI
/*
@implemented
*/
KSDDKAPI
NTSTATUS
NTAPI
KsCreatePin(
IN HANDLE FilterHandle,
IN PKSPIN_CONNECT Connect,
@ -17,23 +22,83 @@ KsCreatePin(
}
return KspCreateObjectType(FilterHandle,
L"{146F1A80-4791-11D0-A5D6-28DB04C10000}",
L"{146F1A80-4791-11D0-A5D6-28DB04C10000}", //KSNAME_Pin
(PVOID)Connect,
ConnectSize,
DesiredAccess,
ConnectionHandle);
}
KSDDKAPI NTSTATUS NTAPI
/*
@unimplemented
*/
KSDDKAPI
NTSTATUS
NTAPI
KsValidateConnectRequest(
IN PIRP Irp,
IN ULONG DescriptorsCount,
IN KSPIN_DESCRIPTOR* Descriptor,
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;
}
/*
@implemented
*/
KSDDKAPI
NTSTATUS
NTAPI
@ -241,6 +306,9 @@ KsPinPropertyHandler(
return Irp->IoStatus.Status;
}
/*
@implemented
*/
KSDDKAPI
NTSTATUS
NTAPI

View file

@ -34,8 +34,7 @@ KspCreateObjectType(
RtlMoveMemory(Name.Buffer + wcslen(ObjectType) +1, CreateParameters, CreateParametersSize);
Name.Buffer[Name.Length / 2] = L'\0';
InitializeObjectAttributes(&ObjectAttributes, &Name, OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE, ParentHandle, NULL);
InitializeObjectAttributes(&ObjectAttributes, &Name, OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE | OBJ_OPENIF, ParentHandle, NULL);
Status = IoCreateFile(NodeHandle,