[ros-diffs] [janderwald] 39650: - Start implementing KsValidateConnectRequest - Pass OBJ_OPENIF flag to KspCreateObjectType - KsCreatePin works now

janderwald at svn.reactos.org janderwald at svn.reactos.org
Tue Feb 17 20:30:40 CET 2009


Author: janderwald
Date: Tue Feb 17 13:30:40 2009
New Revision: 39650

URL: http://svn.reactos.org/svn/reactos?rev=39650&view=rev
Log:
- Start implementing KsValidateConnectRequest
- Pass OBJ_OPENIF flag to KspCreateObjectType
- KsCreatePin works now

Modified:
    trunk/reactos/drivers/ksfilter/ks/connectivity.c
    trunk/reactos/drivers/ksfilter/ks/topology.c

Modified: trunk/reactos/drivers/ksfilter/ks/connectivity.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/ksfilter/ks/connectivity.c?rev=39650&r1=39649&r2=39650&view=diff
==============================================================================
--- trunk/reactos/drivers/ksfilter/ks/connectivity.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/ksfilter/ks/connectivity.c [iso-8859-1] Tue Feb 17 13:30:40 2009
@@ -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 @@
     }
 
     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 @@
     return Irp->IoStatus.Status;
 }
 
+/*
+    @implemented
+*/
 KSDDKAPI
 NTSTATUS
 NTAPI

Modified: trunk/reactos/drivers/ksfilter/ks/topology.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/ksfilter/ks/topology.c?rev=39650&r1=39649&r2=39650&view=diff
==============================================================================
--- trunk/reactos/drivers/ksfilter/ks/topology.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/ksfilter/ks/topology.c [iso-8859-1] Tue Feb 17 13:30:40 2009
@@ -34,8 +34,7 @@
     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,



More information about the Ros-diffs mailing list