- Fix mdl probe access rights
authorJohannes Anderwald <johannes.anderwald@reactos.org>
Fri, 29 Oct 2010 00:41:06 +0000 (00:41 +0000)
committerJohannes Anderwald <johannes.anderwald@reactos.org>
Fri, 29 Oct 2010 00:41:06 +0000 (00:41 +0000)
svn path=/trunk/; revision=49336

reactos/drivers/ksfilter/ks/irp.c

index 32ba84d..5ff56c9 100644 (file)
@@ -724,7 +724,16 @@ ProbeMdl:
                         Mdl = Irp->MdlAddress;
 
                         /* determine operation */
                         Mdl = Irp->MdlAddress;
 
                         /* determine operation */
-                        Operation = (ProbeFlags & KSPROBE_STREAMWRITE) ? IoWriteAccess : IoReadAccess;
+                        if (!(ProbeFlags & KSPROBE_STREAMWRITE) || (ProbeFlags & KSPROBE_MODIFY))
+                        {
+                            /* operation is read / modify stream, need write access */
+                            Operation = IoWriteAccess;
+                        }
+                        else
+                        {
+                            /* operation is write to device, so we need read access */
+                            Operation = IoReadAccess;
+                        }
 
                         do
                         {
 
                         do
                         {
@@ -859,7 +868,8 @@ ProbeMdl:
                 if (StreamHeader->FrameExtent)
                 {
                     /* allocate an mdl */
                 if (StreamHeader->FrameExtent)
                 {
                     /* allocate an mdl */
-                    Mdl = IoAllocateMdl(StreamHeader->Data, StreamHeader->FrameExtent, Irp->MdlAddress != NULL, TRUE, Irp);
+                    ASSERT(Irp->MdlAddress == NULL);
+                    Mdl = IoAllocateMdl(StreamHeader->Data, StreamHeader->FrameExtent, FALSE, TRUE, Irp);
                     if (!Mdl)
                     {
                         /* not enough memory */
                     if (!Mdl)
                     {
                         /* not enough memory */
@@ -880,10 +890,10 @@ ProbeMdl:
 
         /* now probe the allocated mdl's */
         if (!NT_SUCCESS(Status))
 
         /* now probe the allocated mdl's */
         if (!NT_SUCCESS(Status))
-               {
+        {
             DPRINT("Status %x\n", Status);
             return Status;
             DPRINT("Status %x\n", Status);
             return Status;
-               }
+        }
         else
             goto ProbeMdl;
     }
         else
             goto ProbeMdl;
     }