<div dir="ltr">This is extremely dangerous!, this can be working without any errors most of the time but in a rare cases this could<div>cause a crash - in case a non pageable function made pageable by this patch - which can be hard to troubleshoot!</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Sep 28, 2016 at 4:55 PM, Frediano Ziglio <span dir="ltr"><<a href="mailto:fziglio@redhat.com" target="_blank">fziglio@redhat.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">This make sure that these function goes into the non<br>
paged section.<br>
Also this change is much shorter than marking code if<br>
can be paged as almost code can be paged.<br>
It's also coherent with other source files.<br>
<br>
Signed-off-by: Frediano Ziglio <<a href="mailto:fziglio@redhat.com">fziglio@redhat.com</a>><br>
---<br>
 qxldod/QxlDod.cpp | 39 ++++++++++++++++++++++++------<wbr>---------<br>
 qxldod/QxlDod.h   | 50 ++++++++++++++++++++++++++----<wbr>--------------------<br>
 2 files changed, 50 insertions(+), 39 deletions(-)<br>
<br>
diff --git a/qxldod/QxlDod.cpp b/qxldod/QxlDod.cpp<br>
index d7830e5..b890a9a 100755<br>
--- a/qxldod/QxlDod.cpp<br>
+++ b/qxldod/QxlDod.cpp<br>
@@ -2,8 +2,7 @@<br>
 #include "qxldod.h"<br>
 #include "qxl_windows.h"<br>
<br>
-#pragma code_seg(push)<br>
-#pragma code_seg()<br>
+#pragma code_seg("PAGE")<br>
<br>
 #define WIN_QXL_INT_MASK ((QXL_INTERRUPT_DISPLAY) | \<br>
                           (QXL_INTERRUPT_CURSOR) | \<br>
@@ -47,8 +46,6 @@ BYTE PixelMask[BITS_PER_BYTE]  = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01<br>
                                        ((ULONG)LOWER_5_BITS((Pixel)) << SHIFT_LOWER_5_IN_565_BACK))<br>
<br>
<br>
-#pragma code_seg(pop)<br>
-<br>
 struct QXLEscape {<br>
     uint32_t ioctl;<br>
     union {<br>
@@ -1645,9 +1642,7 @@ NTSTATUS QxlDod::<wbr>UpdateActiveVidPnPresentPath(_<wbr>In_ CONST DXGKARG_UPDATEACTIVEVID<br>
 //<br>
 // Non-Paged Code<br>
 //<br>
-#pragma code_seg(push)<br>
-#pragma code_seg()<br>
-<br>
+QXL_NON_PAGED<br>
 VOID QxlDod::DpcRoutine(VOID)<br>
 {<br>
     DbgPrint(TRACE_LEVEL_<wbr>INFORMATION, ("---> %s\n", __FUNCTION__));<br>
@@ -1656,6 +1651,7 @@ VOID QxlDod::DpcRoutine(VOID)<br>
     DbgPrint(TRACE_LEVEL_<wbr>INFORMATION, ("<--- %s\n", __FUNCTION__));<br>
 }<br>
<br>
+QXL_NON_PAGED<br>
 BOOLEAN QxlDod::InterruptRoutine(_In_  ULONG MessageNumber)<br>
 {<br>
     DbgPrint(TRACE_LEVEL_<wbr>INFORMATION, ("<--> 0 %s\n", __FUNCTION__));<br>
@@ -1665,6 +1661,7 @@ BOOLEAN QxlDod::InterruptRoutine(_In_  ULONG MessageNumber)<br>
     return FALSE;<br>
 }<br>
<br>
+QXL_NON_PAGED<br>
 VOID QxlDod::ResetDevice(VOID)<br>
 {<br>
     DbgPrint(TRACE_LEVEL_VERBOSE, ("<---> %s\n", __FUNCTION__));<br>
@@ -1672,6 +1669,7 @@ VOID QxlDod::ResetDevice(VOID)<br>
 }<br>
<br>
 // Must be Non-Paged, as it sets up the display for a bugcheck<br>
+QXL_NON_PAGED<br>
 NTSTATUS QxlDod::SystemDisplayEnable(_<wbr>In_  D3DDDI_VIDEO_PRESENT_TARGET_ID TargetId,<br>
                                                    _In_  PDXGKARG_SYSTEM_DISPLAY_<wbr>ENABLE_FLAGS Flags,<br>
                                                    _Out_ UINT* pWidth,<br>
@@ -1728,6 +1726,7 @@ NTSTATUS QxlDod::SystemDisplayEnable(_<wbr>In_  D3DDDI_VIDEO_PRESENT_TARGET_ID Target<br>
 }<br>
<br>
 // Must be Non-Paged, as it is called to display the bugcheck screen<br>
+QXL_NON_PAGED<br>
 VOID QxlDod::SystemDisplayWrite(_<wbr>In_reads_bytes_(SourceHeight * SourceStride) VOID* pSource,<br>
                                               _In_ UINT SourceWidth,<br>
                                               _In_ UINT SourceHeight,<br>
@@ -1774,7 +1773,7 @@ VOID QxlDod::SystemDisplayWrite(_<wbr>In_reads_bytes_(SourceHeight * SourceStride) VO<br>
<br>
 }<br>
<br>
-#pragma code_seg(pop) // End Non-Paged Code<br>
+// End Non-Paged Code<br>
<br>
 NTSTATUS QxlDod::WriteHWInfoStr(_In_ HANDLE DevInstRegKeyHandle, _In_ PCWSTR pszwValueName, _In_ PCSTR pszValue)<br>
 {<br>
@@ -1949,11 +1948,7 @@ NTSTATUS QxlDod::ReadConfiguration()<br>
     return Status;<br>
 }<br>
<br>
-//<br>
-// Non-Paged Code<br>
-//<br>
-#pragma code_seg(push)<br>
-#pragma code_seg()<br>
+QXL_NON_PAGED<br>
 D3DDDI_VIDEO_PRESENT_SOURCE_ID QxlDod::FindSourceForTarget(<wbr>D3DDDI_VIDEO_PRESENT_TARGET_ID TargetId, BOOLEAN DefaultToZero)<br>
 {<br>
     UNREFERENCED_PARAMETER(<wbr>TargetId);<br>
@@ -1968,8 +1963,6 @@ D3DDDI_VIDEO_PRESENT_SOURCE_ID QxlDod::FindSourceForTarget(<wbr>D3DDDI_VIDEO_PRESENT_<br>
     return DefaultToZero ? 0 : D3DDDI_ID_UNINITIALIZED;<br>
 }<br>
<br>
-#pragma code_seg(pop) // End Non-Paged Code<br>
-<br>
 //<br>
 // Frame buffer map/unmap<br>
 //<br>
@@ -2049,6 +2042,7 @@ UnmapFrameBuffer(<br>
<br>
 // HW specific code<br>
<br>
+QXL_NON_PAGED<br>
 VOID GetPitches(_In_ CONST BLT_INFO* pBltInfo, _Out_ LONG* pPixelPitch, _Out_ LONG* pRowPitch)<br>
 {<br>
     switch (pBltInfo->Rotation)<br>
@@ -2087,6 +2081,7 @@ VOID GetPitches(_In_ CONST BLT_INFO* pBltInfo, _Out_ LONG* pPixelPitch, _Out_ LO<br>
     }<br>
 }<br>
<br>
+QXL_NON_PAGED<br>
 BYTE* GetRowStart(_In_ CONST BLT_INFO* pBltInfo, CONST RECT* pRect)<br>
 {<br>
     BYTE* pRet = NULL;<br>
@@ -2150,6 +2145,7 @@ BYTE* GetRowStart(_In_ CONST BLT_INFO* pBltInfo, CONST RECT* pRect)<br>
  *<br>
 \*****************************<wbr>******************************<wbr>***************/<br>
<br>
+QXL_NON_PAGED<br>
 VOID CopyBitsGeneric(<br>
     BLT_INFO* pDst,<br>
     CONST BLT_INFO* pSrc,<br>
@@ -2244,6 +2240,7 @@ VOID CopyBitsGeneric(<br>
 }<br>
<br>
<br>
+QXL_NON_PAGED<br>
 VOID CopyBits32_32(<br>
     BLT_INFO* pDst,<br>
     CONST BLT_INFO* pSrc,<br>
@@ -2285,6 +2282,7 @@ VOID CopyBits32_32(<br>
 }<br>
<br>
<br>
+QXL_NON_PAGED<br>
 VOID BltBits (<br>
     BLT_INFO* pDst,<br>
     CONST BLT_INFO* pSrc,<br>
@@ -2913,6 +2911,7 @@ VOID VgaDevice::BlackOutScreen(<wbr>CURRENT_BDD_MODE* pCurrentBddMod)<br>
     pCurrentBddMod->ZeroedOutEnd.<wbr>QuadPart = NewPhysAddrEnd.QuadPart;<br>
 }<br>
<br>
+QXL_NON_PAGED<br>
 BOOLEAN VgaDevice::InterruptRoutine(_<wbr>In_ PDXGKRNL_INTERFACE pDxgkInterface, _In_  ULONG MessageNumber)<br>
 {<br>
     UNREFERENCED_PARAMETER(<wbr>pDxgkInterface);<br>
@@ -2920,10 +2919,12 @@ BOOLEAN VgaDevice::InterruptRoutine(_<wbr>In_ PDXGKRNL_INTERFACE pDxgkInterface, _In_<br>
     return FALSE;<br>
 }<br>
<br>
+QXL_NON_PAGED<br>
 VOID VgaDevice::DpcRoutine(PVOID)<br>
 {<br>
 }<br>
<br>
+QXL_NON_PAGED<br>
 VOID VgaDevice::ResetDevice(VOID)<br>
 {<br>
 }<br>
@@ -3652,6 +3653,7 @@ void QxlDevice::InitMspace(UINT32 mspace_type, UINT8 *start, size_t capacity)<br>
     DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s _mspace = %p\n", __FUNCTION__, m_MSInfo[mspace_type]._mspace)<wbr>);<br>
 }<br>
<br>
+QXL_NON_PAGED<br>
 void QxlDevice::ResetDevice(void)<br>
 {<br>
     DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));<br>
@@ -4717,6 +4719,7 @@ VOID QxlDevice::PushCursor(VOID)<br>
     DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s notify = %d\n", __FUNCTION__, notify));<br>
 }<br>
<br>
+QXL_NON_PAGED<br>
 BOOLEAN QxlDevice::InterruptRoutine(_<wbr>In_ PDXGKRNL_INTERFACE pDxgkInterface, _In_  ULONG MessageNumber)<br>
 {<br>
     UNREFERENCED_PARAMETER(<wbr>MessageNumber);<br>
@@ -4737,6 +4740,7 @@ BOOLEAN QxlDevice::InterruptRoutine(_<wbr>In_ PDXGKRNL_INTERFACE pDxgkInterface, _In_<br>
     return TRUE;<br>
 }<br>
<br>
+QXL_NON_PAGED<br>
 VOID QxlDevice::DpcRoutine(PVOID ptr)<br>
 {<br>
     PDXGKRNL_INTERFACE pDxgkInterface = (PDXGKRNL_INTERFACE)ptr;<br>
@@ -4773,6 +4777,7 @@ VOID QxlDevice::DpcRoutine(PVOID ptr)<br>
<br>
 VOID QxlDevice::UpdateArea(CONST RECT* area, UINT32 surface_id)<br>
 {<br>
+    PAGED_CODE();<br>
     DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));<br>
     CopyRect(&m_RamHdr->update_<wbr>area, area);<br>
     m_RamHdr->update_surface = surface_id;<br>
@@ -4781,6 +4786,7 @@ VOID QxlDevice::UpdateArea(CONST RECT* area, UINT32 surface_id)<br>
     DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));<br>
 }<br>
<br>
+QXL_NON_PAGED<br>
 BOOLEAN QxlDevice:: DpcCallbackEx(PVOID ptr)<br>
 {<br>
     DbgPrint(TRACE_LEVEL_VERBOSE, ("<--> %s\n", __FUNCTION__));<br>
@@ -4790,6 +4796,7 @@ BOOLEAN QxlDevice:: DpcCallbackEx(PVOID ptr)<br>
     return TRUE;<br>
 }<br>
<br>
+QXL_NON_PAGED<br>
 VOID QxlDevice::DpcCallback(PDPC_<wbr>CB_CONTEXT ctx)<br>
 {<br>
     ctx->data = m_Pending;<br>
@@ -4797,6 +4804,7 @@ VOID QxlDevice::DpcCallback(PDPC_<wbr>CB_CONTEXT ctx)<br>
<br>
 }<br>
<br>
+QXL_NON_PAGED<br>
 UINT BPPFromPixelFormat(<wbr>D3DDDIFORMAT Format)<br>
 {<br>
     switch (Format)<br>
@@ -4812,6 +4820,7 @@ UINT BPPFromPixelFormat(<wbr>D3DDDIFORMAT Format)<br>
 }<br>
<br>
 // Given bits per pixel, return the pixel format at the same bpp<br>
+QXL_NON_PAGED<br>
 D3DDDIFORMAT PixelFormatFromBPP(UINT BPP)<br>
 {<br>
     switch (BPP)<br>
diff --git a/qxldod/QxlDod.h b/qxldod/QxlDod.h<br>
index bf16724..90d7937 100755<br>
--- a/qxldod/QxlDod.h<br>
+++ b/qxldod/QxlDod.h<br>
@@ -14,6 +14,8 @@<br>
 #define QXL_BPP                    32<br>
 #define VGA_BPP                    24<br>
<br>
+#define QXL_NON_PAGED __declspec(code_seg(".text"))<br>
+<br>
 typedef struct _QXL_FLAGS<br>
 {<br>
     UINT DriverStarted           : 1; // ( 1) 1 after StartDevice and 0 after StopDevice<br>
@@ -222,9 +224,9 @@ public:<br>
     virtual NTSTATUS SetPowerState(DEVICE_POWER_<wbr>STATE DevicePowerState, DXGK_DISPLAY_INFORMATION* pDispInfo) = 0;<br>
     virtual NTSTATUS HWInit(PCM_RESOURCE_LIST pResList, DXGK_DISPLAY_INFORMATION* pDispInfo) = 0;<br>
     virtual NTSTATUS HWClose(void) = 0;<br>
-    virtual BOOLEAN InterruptRoutine(_In_ PDXGKRNL_INTERFACE pDxgkInterface, _In_  ULONG MessageNumber) = 0;<br>
-    virtual VOID DpcRoutine(PVOID) = 0;<br>
-    virtual VOID ResetDevice(void) = 0;<br>
+    QXL_NON_PAGED virtual BOOLEAN InterruptRoutine(_In_ PDXGKRNL_INTERFACE pDxgkInterface, _In_  ULONG MessageNumber) = 0;<br>
+    QXL_NON_PAGED virtual VOID DpcRoutine(PVOID) = 0;<br>
+    QXL_NON_PAGED virtual VOID ResetDevice(void) = 0;<br>
     virtual NTSTATUS AcquireFrameBuffer(CURRENT_<wbr>BDD_MODE* pCurrentBddMode) { return STATUS_SUCCESS; }<br>
     virtual NTSTATUS ReleaseFrameBuffer(CURRENT_<wbr>BDD_MODE* pCurrentBddMode) { return STATUS_SUCCESS; }<br>
<br>
@@ -289,9 +291,9 @@ public:<br>
                                  _In_ D3DKMDT_VIDPN_PRESENT_PATH_<wbr>ROTATION Rotation,<br>
                                  _In_ const CURRENT_BDD_MODE* pModeCur);<br>
     VOID BlackOutScreen(CURRENT_BDD_<wbr>MODE* pCurrentBddMod);<br>
-    BOOLEAN InterruptRoutine(_In_ PDXGKRNL_INTERFACE pDxgkInterface, _In_  ULONG MessageNumber);<br>
-    VOID DpcRoutine(PVOID);<br>
-    VOID ResetDevice(VOID);<br>
+    QXL_NON_PAGED BOOLEAN InterruptRoutine(_In_ PDXGKRNL_INTERFACE pDxgkInterface, _In_  ULONG MessageNumber);<br>
+    QXL_NON_PAGED VOID DpcRoutine(PVOID);<br>
+    QXL_NON_PAGED VOID ResetDevice(VOID);<br>
     NTSTATUS AcquireFrameBuffer(CURRENT_<wbr>BDD_MODE* pCurrentBddMode);<br>
     NTSTATUS ReleaseFrameBuffer(CURRENT_<wbr>BDD_MODE* pCurrentBddMode);<br>
     NTSTATUS SetPointerShape(_In_ CONST DXGKARG_SETPOINTERSHAPE* pSetPointerShape);<br>
@@ -464,9 +466,9 @@ public:<br>
                     _In_ D3DKMDT_VIDPN_PRESENT_PATH_<wbr>ROTATION Rotation,<br>
                     _In_ const CURRENT_BDD_MODE* pModeCur);<br>
     VOID BlackOutScreen(CURRENT_BDD_<wbr>MODE* pCurrentBddMod);<br>
-    BOOLEAN InterruptRoutine(_In_ PDXGKRNL_INTERFACE pDxgkInterface, _In_  ULONG MessageNumber);<br>
-    VOID DpcRoutine(PVOID);<br>
-    VOID ResetDevice(VOID);<br>
+    QXL_NON_PAGED BOOLEAN InterruptRoutine(_In_ PDXGKRNL_INTERFACE pDxgkInterface, _In_  ULONG MessageNumber);<br>
+    QXL_NON_PAGED VOID DpcRoutine(PVOID);<br>
+    QXL_NON_PAGED VOID ResetDevice(VOID);<br>
     NTSTATUS SetPointerShape(_In_ CONST DXGKARG_SETPOINTERSHAPE* pSetPointerShape);<br>
     NTSTATUS SetPointerPosition(_In_ CONST DXGKARG_SETPOINTERPOSITION* pSetPointerPosition);<br>
     NTSTATUS Escape(_In_ CONST DXGKARG_ESCAPE* pEscap);<br>
@@ -534,8 +536,8 @@ private:<br>
     void PutBytesAlign(QXLDataChunk **chunk_ptr, UINT8 **now_ptr,<br>
                             UINT8 **end_ptr, UINT8 *src, int size,<br>
                             size_t alloc_size, uint32_t alignment);<br>
-    BOOLEAN static DpcCallbackEx(PVOID);<br>
-    void DpcCallback(PDPC_CB_CONTEXT);<br>
+    QXL_NON_PAGED BOOLEAN static DpcCallbackEx(PVOID);<br>
+    QXL_NON_PAGED void DpcCallback(PDPC_CB_CONTEXT);<br>
     void AsyncIo(UCHAR  Port, UCHAR Value);<br>
     void SyncIo(UCHAR  Port, UCHAR Value);<br>
     NTSTATUS UpdateChildStatus(BOOLEAN connect);<br>
@@ -628,7 +630,7 @@ public:<br>
                          _Out_ ULONG*             pNumberOfChildren);<br>
     NTSTATUS StopDevice(VOID);<br>
     // Must be Non-Paged<br>
-    VOID ResetDevice(VOID);<br>
+    QXL_NON_PAGED VOID ResetDevice(VOID);<br>
<br>
     NTSTATUS DispatchIoRequest(_In_  ULONG VidPnSourceId,<br>
                                _In_  VIDEO_REQUEST_PACKET* pVideoRequestPacket);<br>
@@ -648,9 +650,9 @@ public:<br>
<br>
     // Must be Non-Paged<br>
     // BDD doesn't have interrupts, so just returns false<br>
-    BOOLEAN InterruptRoutine(_In_  ULONG MessageNumber);<br>
+    QXL_NON_PAGED BOOLEAN InterruptRoutine(_In_  ULONG MessageNumber);<br>
<br>
-    VOID DpcRoutine(VOID);<br>
+    QXL_NON_PAGED VOID DpcRoutine(VOID);<br>
<br>
     // Return DriverCaps, doesn't support other queries though<br>
     NTSTATUS QueryAdapterInfo(_In_ CONST DXGKARG_QUERYADAPTERINFO* pQueryAdapterInfo);<br>
@@ -689,7 +691,7 @@ public:<br>
<br>
     // Must be Non-Paged<br>
     // Call to initialize as part of bugcheck<br>
-    NTSTATUS SystemDisplayEnable(_In_  D3DDDI_VIDEO_PRESENT_TARGET_ID       TargetId,<br>
+    QXL_NON_PAGED NTSTATUS SystemDisplayEnable(_In_  D3DDDI_VIDEO_PRESENT_TARGET_ID       TargetId,<br>
                                  _In_  PDXGKARG_SYSTEM_DISPLAY_<wbr>ENABLE_FLAGS Flags,<br>
                                  _Out_ UINT*                                pWidth,<br>
                                  _Out_ UINT*                                pHeight,<br>
@@ -697,7 +699,7 @@ public:<br>
<br>
     // Must be Non-Paged<br>
     // Write out pixels as part of bugcheck<br>
-    VOID SystemDisplayWrite(_In_reads_<wbr>bytes_(SourceHeight * SourceStride) VOID* pSource,<br>
+    QXL_NON_PAGED VOID SystemDisplayWrite(_In_reads_<wbr>bytes_(SourceHeight * SourceStride) VOID* pSource,<br>
                                  _In_                                     UINT  SourceWidth,<br>
                                  _In_                                     UINT  SourceHeight,<br>
                                  _In_                                     UINT  SourceStride,<br>
@@ -725,7 +727,7 @@ private:<br>
                                  D3DKMDT_HVIDPNTARGETMODESET hVidPnTargetModeSet,<br>
                                  _In_opt_ CONST D3DKMDT_VIDPN_SOURCE_MODE* pVidPnPinnedSourceModeInfo,<br>
                                  D3DDDI_VIDEO_PRESENT_SOURCE_ID SourceId);<br>
-    D3DDDI_VIDEO_PRESENT_SOURCE_ID FindSourceForTarget(D3DDDI_<wbr>VIDEO_PRESENT_TARGET_ID TargetId, BOOLEAN DefaultToZero);<br>
+    QXL_NON_PAGED D3DDDI_VIDEO_PRESENT_SOURCE_ID FindSourceForTarget(D3DDDI_<wbr>VIDEO_PRESENT_TARGET_ID TargetId, BOOLEAN DefaultToZero);<br>
     NTSTATUS IsVidPnSourceModeFieldsValid(<wbr>CONST D3DKMDT_VIDPN_SOURCE_MODE* pSourceMode) const;<br>
     NTSTATUS IsVidPnPathFieldsValid(CONST D3DKMDT_VIDPN_PRESENT_PATH* pPath) const;<br>
     NTSTATUS RegisterHWInfo(_In_ ULONG Id);<br>
@@ -743,26 +745,26 @@ UnmapFrameBuffer(<br>
     _In_reads_bytes_(Length) VOID* VirtualAddress,<br>
     _In_                ULONG Length);<br>
<br>
-UINT BPPFromPixelFormat(<wbr>D3DDDIFORMAT Format);<br>
-D3DDDIFORMAT PixelFormatFromBPP(UINT BPP);<br>
+QXL_NON_PAGED UINT BPPFromPixelFormat(<wbr>D3DDDIFORMAT Format);<br>
+QXL_NON_PAGED D3DDDIFORMAT PixelFormatFromBPP(UINT BPP);<br>
 UINT SpiceFromPixelFormat(<wbr>D3DDDIFORMAT Format);<br>
<br>
-VOID CopyBitsGeneric(<br>
+QXL_NON_PAGED VOID CopyBitsGeneric(<br>
                         BLT_INFO* pDst,<br>
                         CONST BLT_INFO* pSrc,<br>
                         UINT  NumRects,<br>
                         _In_reads_(NumRects) CONST RECT *pRects);<br>
<br>
-VOID CopyBits32_32(<br>
+QXL_NON_PAGED VOID CopyBits32_32(<br>
                         BLT_INFO* pDst,<br>
                         CONST BLT_INFO* pSrc,<br>
                         UINT  NumRects,<br>
                         _In_reads_(NumRects) CONST RECT *pRects);<br>
-VOID BltBits (<br>
+QXL_NON_PAGED VOID BltBits (<br>
                         BLT_INFO* pDst,<br>
                         CONST BLT_INFO* pSrc,<br>
                         UINT  NumRects,<br>
                         _In_reads_(NumRects) CONST RECT *pRects);<br>
<br>
-BYTE* GetRowStart(_In_ CONST BLT_INFO* pBltInfo, CONST RECT* pRect);<br>
-VOID GetPitches(_In_ CONST BLT_INFO* pBltInfo, _Out_ LONG* pPixelPitch, _Out_ LONG* pRowPitch);<br>
+QXL_NON_PAGED BYTE* GetRowStart(_In_ CONST BLT_INFO* pBltInfo, CONST RECT* pRect);<br>
+QXL_NON_PAGED VOID GetPitches(_In_ CONST BLT_INFO* pBltInfo, _Out_ LONG* pPixelPitch, _Out_ LONG* pRowPitch);<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.7.4<br>
<br>
______________________________<wbr>_________________<br>
Spice-devel mailing list<br>
<a href="mailto:Spice-devel@lists.freedesktop.org">Spice-devel@lists.freedesktop.<wbr>org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/spice-devel" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/spice-devel</a><br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><font size="4" color="#0b5394" face="times new roman, serif">Respectfully,<br></font><div style="font-size:12.8px;color:rgb(136,136,136)"><font size="4" color="#0b5394" face="times new roman, serif"><b><i>Sameeh Jubran</i></b></font></div><div style="font-size:12.8px;color:rgb(136,136,136)"><i style="color:rgb(7,55,99);font-family:"times new roman",serif;font-size:large"><span style="line-height:15px"><a href="https://il.linkedin.com/pub/sameeh-jubran/87/747/a8a" title="View public profile" name="UNIQUE_ID_SafeHtmlFilter_UNIQUE_ID_SafeHtmlFilter_UNIQUE_ID_SafeHtmlFilter_UNIQUE_ID_SafeHtmlFilter_14e2c1de96f8c195_UNIQUE_ID_SafeHtmlFilter_SafeHtmlFilter_SafeHtmlFilter_webProfileURL" style="color:rgb(17,85,204);margin:0px;padding:0px;border-width:0px;outline:none;vertical-align:baseline;text-decoration:none" target="_blank">Linkedin</a></span></i><br></div><div style="font-size:12.8px;color:rgb(136,136,136)"><font size="4" face="times new roman, serif" color="#073763"><i>Junior Software Engineer @ <a href="http://www.daynix.com" target="_blank">Daynix</a>.</i></font></div></div></div></div></div></div></div>
</div>