[PORTCLS]
[reactos.git] / reactos / drivers / wdm / audio / backpln / portcls / irpstream.cpp
index f201db2..f806164 100644 (file)
@@ -145,7 +145,14 @@ CIrpQueue::AddMapping(
     }
 
     // get first stream header
-    Header = (PKSSTREAM_HEADER)Irp->AssociatedIrp.SystemBuffer;
+
+   if (Irp->RequestorMode == UserMode)
+       Header = (PKSSTREAM_HEADER)Irp->AssociatedIrp.SystemBuffer;
+   else
+       Header = (PKSSTREAM_HEADER)Irp->UserBuffer;
+
+    // sanity check
+    PC_ASSERT(Header);
 
     // calculate num headers
     NumHeaders = IoStack->Parameters.DeviceIoControl.OutputBufferLength / Header->Size;
@@ -156,7 +163,8 @@ CIrpQueue::AddMapping(
 
     // get first audio buffer
     Mdl = Irp->MdlAddress;
-
+    // sanity check
+    PC_ASSERT(Mdl);
 
     // store the current stream header
     Irp->Tail.Overlay.DriverContext[OFFSET_STREAMHEADER] = (PVOID)Header;
@@ -166,7 +174,6 @@ CIrpQueue::AddMapping(
     // store current header index
     Irp->Tail.Overlay.DriverContext[OFFSET_HEADERINDEX] = UlongToPtr(0);
 
-
     NumData = 0;
     // prepare all headers
     for(Index = 0; Index < NumHeaders; Index++)
@@ -175,7 +182,10 @@ CIrpQueue::AddMapping(
         PC_ASSERT(Header);
         PC_ASSERT(Mdl);
 
-        Header->Data = MmGetSystemAddressForMdlSafe(Mdl, NormalPagePriority);
+        if (Irp->RequestorMode == UserMode)
+        {
+            Header->Data = MmGetSystemAddressForMdlSafe(Mdl, NormalPagePriority);
+        }
 
         if (!Header->Data)
         {
@@ -344,10 +354,13 @@ CIrpQueue::UpdateMapping(
             return;
         }
 
-        // irp has been processed completly
+       // irp has been processed completly
 
         NumData = 0;
-        StreamHeader = (PKSSTREAM_HEADER)m_Irp->AssociatedIrp.SystemBuffer;
+        if (m_Irp->RequestorMode == KernelMode)
+            StreamHeader = (PKSSTREAM_HEADER)m_Irp->UserBuffer;
+        else
+            StreamHeader = (PKSSTREAM_HEADER)m_Irp->AssociatedIrp.SystemBuffer;
 
         // loop all stream headers
         for(Index = 0; Index < STREAMHEADER_COUNT(m_Irp); Index++)