mirror of
https://github.com/reactos/reactos.git
synced 2024-12-27 01:24:38 +00:00
Get mouse cursor working under VMware
svn path=/trunk/; revision=4286
This commit is contained in:
parent
aee47209b1
commit
ab42b89f19
7 changed files with 145 additions and 100 deletions
|
@ -16,7 +16,7 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id: pointer.c,v 1.13 2003/01/25 23:06:32 ei Exp $
|
||||
/* $Id: pointer.c,v 1.14 2003/03/11 00:21:40 gvg Exp $
|
||||
*
|
||||
* PROJECT: ReactOS VGA16 display driver
|
||||
* FILE: drivers/dd/vga/display/objects/pointer.c
|
||||
|
@ -76,9 +76,10 @@ VGADDI_BltPointerToVGA(ULONG StartX, ULONG StartY, ULONG SizeX,
|
|||
|
||||
/* Write the mask. */
|
||||
Video = (PUCHAR)vidmem + StartY * 80 + (StartX >> 3);
|
||||
Src = MaskBits;
|
||||
for (i = 0; i < SizeY; i++, Video+=80, Src+=MaskPitch)
|
||||
Src = MaskBits + SizeY * MaskPitch;
|
||||
for (i = 0; i < SizeY; i++, Video+=80)
|
||||
{
|
||||
Src -= MaskPitch;
|
||||
SrcValue = (*Src) >> (StartX % 8);
|
||||
(VOID)READ_REGISTER_UCHAR(Video);
|
||||
WRITE_REGISTER_UCHAR(Video, SrcValue);
|
||||
|
@ -101,7 +102,7 @@ VGADDI_BltPointerToVGA(ULONG StartX, ULONG StartY, ULONG SizeX,
|
|||
for (i = StartY; i < EndY; i++)
|
||||
{
|
||||
Video = (PUCHAR)vidmem + i * 80 + (Left >> 3);
|
||||
Src = MaskBits + (i - StartY) * MaskPitch;
|
||||
Src = MaskBits + (EndY - i - 1) * MaskPitch;
|
||||
for (j = 0; j < Length; j++, Video++, Src++)
|
||||
{
|
||||
if ((StartX % 8) != 0)
|
||||
|
@ -127,9 +128,10 @@ VGADDI_BltPointerToVGA(ULONG StartX, ULONG StartY, ULONG SizeX,
|
|||
WRITE_PORT_UCHAR((PUCHAR)GRA_D, Mask);
|
||||
|
||||
Video = (PUCHAR)vidmem + StartY * 80 + (EndX >> 3);
|
||||
Src = MaskBits + (SizeX >> 3) - 1;
|
||||
for (i = StartY; i < EndY; i++, Video+=80, Src+=MaskPitch)
|
||||
Src = MaskBits + SizeY * MaskPitch + (SizeX >> 3) - 1;
|
||||
for (i = StartY; i < EndY; i++, Video+=80)
|
||||
{
|
||||
Src -= MaskPitch;
|
||||
SrcValue = (Src[0] << (8 - (StartX % 8)));
|
||||
(VOID)READ_REGISTER_UCHAR(Video);
|
||||
WRITE_REGISTER_UCHAR(Video, SrcValue);
|
||||
|
@ -279,6 +281,8 @@ DrvSetPointerShape(PSURFOBJ pso,
|
|||
|
||||
/* Show the cursor */
|
||||
VGADDI_ShowCursor(ppdev);
|
||||
|
||||
return SPS_ACCEPT_EXCLUDE;
|
||||
}
|
||||
|
||||
VOID
|
||||
|
@ -303,7 +307,7 @@ VOID
|
|||
VGADDI_ShowCursor(PPDEV ppdev)
|
||||
{
|
||||
ULONG i, j, cx, cy;
|
||||
PUCHAR AndMask;
|
||||
PUCHAR XorMask;
|
||||
ULONG SizeX;
|
||||
|
||||
if (ppdev->pPointerAttributes->Enable != 0)
|
||||
|
@ -326,20 +330,20 @@ VGADDI_ShowCursor(PPDEV ppdev)
|
|||
ppdev->pPointerAttributes->Height);
|
||||
|
||||
/* Display the cursor. */
|
||||
AndMask = ppdev->pPointerAttributes->Pixels +
|
||||
XorMask = ppdev->pPointerAttributes->Pixels +
|
||||
ppdev->pPointerAttributes->WidthInBytes *
|
||||
ppdev->pPointerAttributes->Height;
|
||||
VGADDI_BltPointerToVGA(ppdev->xyCursor.x,
|
||||
ppdev->xyCursor.y,
|
||||
ppdev->pPointerAttributes->Width,
|
||||
ppdev->pPointerAttributes->Height,
|
||||
AndMask,
|
||||
ppdev->pPointerAttributes->Pixels,
|
||||
VGA_AND);
|
||||
VGADDI_BltPointerToVGA(ppdev->xyCursor.x,
|
||||
ppdev->xyCursor.y,
|
||||
ppdev->pPointerAttributes->Width,
|
||||
ppdev->pPointerAttributes->Height,
|
||||
ppdev->pPointerAttributes->Pixels,
|
||||
XorMask,
|
||||
VGA_XOR);
|
||||
|
||||
/* Save the new cursor location. */
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
#ifndef __WIN32K_MISC_H
|
||||
#define __WIN32K_MISC_H
|
||||
|
||||
/* Process context in which miniport driver is opened/used */
|
||||
extern PEPROCESS W32kDeviceProcess;
|
||||
|
||||
BOOLEAN
|
||||
STDCALL
|
||||
W32kInitialize (VOID);
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
*/
|
||||
|
||||
#include <ddk/ntddk.h>
|
||||
#include <win32k/misc.h>
|
||||
|
||||
#define NDEBUG
|
||||
#include <debug.h>
|
||||
|
@ -32,16 +33,21 @@ EngDeviceIoControl(HANDLE hDevice,
|
|||
|
||||
KeInitializeEvent(&Event, SynchronizationEvent, FALSE);
|
||||
|
||||
/* Switch to process context in which hDevice is valid */
|
||||
KeAttachProcess(W32kDeviceProcess);
|
||||
|
||||
Status = ObReferenceObjectByHandle(hDevice,
|
||||
FILE_READ_DATA | FILE_WRITE_DATA,
|
||||
IoFileObjectType,
|
||||
KernelMode,
|
||||
(PVOID *)&FileObject,
|
||||
NULL);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
return(Status);
|
||||
}
|
||||
KeDetachProcess();
|
||||
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
return(Status);
|
||||
}
|
||||
|
||||
Irp = IoBuildDeviceIoControlRequest(dwIoControlCode,
|
||||
FileObject->DeviceObject,
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id: mouse.c,v 1.19 2003/03/09 15:00:51 jfilby Exp $
|
||||
/* $Id: mouse.c,v 1.20 2003/03/11 00:21:41 gvg Exp $
|
||||
*
|
||||
* PROJECT: ReactOS kernel
|
||||
* PURPOSE: Mouse
|
||||
|
@ -33,6 +33,8 @@
|
|||
#include <win32k/dc.h>
|
||||
#include "objects.h"
|
||||
#include "include/msgqueue.h"
|
||||
#include "include/object.h"
|
||||
#include "include/winsta.h"
|
||||
|
||||
#define NDEBUG
|
||||
#include <debug.h>
|
||||
|
@ -44,73 +46,74 @@ static BOOLEAN SafetySwitch2 = FALSE;
|
|||
static BOOLEAN MouseEnabled = FALSE;
|
||||
static LONG mouse_x, mouse_y;
|
||||
static UINT mouse_width = 0, mouse_height = 0;
|
||||
static ULONG PointerStatus;
|
||||
|
||||
static UCHAR DefaultCursor[256] = {
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xC0, 0x00, 0x00,
|
||||
0x00, 0xC0, 0x00, 0x00,
|
||||
0x01, 0x80, 0x00, 0x00,
|
||||
0x01, 0x80, 0x00, 0x00,
|
||||
0x03, 0x00, 0x00, 0x00,
|
||||
0x43, 0x00, 0x00, 0x00,
|
||||
0x66, 0x00, 0x00, 0x00,
|
||||
0x76, 0x00, 0x00, 0x00,
|
||||
0x7E, 0x00, 0x00, 0x00,
|
||||
0x7F, 0xC0, 0x00, 0x00,
|
||||
0x7F, 0x80, 0x00, 0x00,
|
||||
0x7F, 0x00, 0x00, 0x00,
|
||||
0x7E, 0x00, 0x00, 0x00,
|
||||
0x7C, 0x00, 0x00, 0x00,
|
||||
0x78, 0x00, 0x00, 0x00,
|
||||
0x70, 0x00, 0x00, 0x00,
|
||||
0x60, 0x00, 0x00, 0x00,
|
||||
0x40, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0x3F, 0xFF, 0xFF,
|
||||
0xFE, 0x1F, 0xFF, 0xFF,
|
||||
0xFE, 0x1F, 0xFF, 0xFF,
|
||||
0xFC, 0x3F, 0xFF, 0xFF,
|
||||
0x7C, 0x3F, 0xFF, 0xFF,
|
||||
0x38, 0x7F, 0xFF, 0xFF,
|
||||
0x18, 0x7F, 0xFF, 0xFF,
|
||||
0x00, 0xFF, 0xFF, 0xFF,
|
||||
0x00, 0xFF, 0xFF, 0xFF,
|
||||
0x00, 0x0F, 0xFF, 0xFF,
|
||||
0x00, 0x1F, 0xFF, 0xFF,
|
||||
0x00, 0x3F, 0xFF, 0xFF,
|
||||
0x00, 0x7F, 0xFF, 0xFF,
|
||||
0x00, 0xFF, 0xFF, 0xFF,
|
||||
0x01, 0xFF, 0xFF, 0xFF,
|
||||
0x03, 0xFF, 0xFF, 0xFF,
|
||||
0x07, 0xFF, 0xFF, 0xFF,
|
||||
0x0F, 0xFF, 0xFF, 0xFF,
|
||||
0x3F, 0xFF, 0xFF, 0xFF,
|
||||
0x1F, 0xFF, 0xFF, 0xFF,
|
||||
0x3F, 0xFF, 0xFF, 0xFF};
|
||||
0x0F, 0xFF, 0xFF, 0xFF,
|
||||
0x07, 0xFF, 0xFF, 0xFF,
|
||||
0x03, 0xFF, 0xFF, 0xFF,
|
||||
0x01, 0xFF, 0xFF, 0xFF,
|
||||
0x00, 0xFF, 0xFF, 0xFF,
|
||||
0x00, 0x7F, 0xFF, 0xFF,
|
||||
0x00, 0x3F, 0xFF, 0xFF,
|
||||
0x00, 0x1F, 0xFF, 0xFF,
|
||||
0x00, 0x0F, 0xFF, 0xFF,
|
||||
0x00, 0xFF, 0xFF, 0xFF,
|
||||
0x00, 0xFF, 0xFF, 0xFF,
|
||||
0x18, 0x7F, 0xFF, 0xFF,
|
||||
0x38, 0x7F, 0xFF, 0xFF,
|
||||
0x7C, 0x3F, 0xFF, 0xFF,
|
||||
0xFC, 0x3F, 0xFF, 0xFF,
|
||||
0xFE, 0x1F, 0xFF, 0xFF,
|
||||
0xFE, 0x1F, 0xFF, 0xFF,
|
||||
0xFF, 0x3F, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x40, 0x00, 0x00, 0x00,
|
||||
0x60, 0x00, 0x00, 0x00,
|
||||
0x70, 0x00, 0x00, 0x00,
|
||||
0x78, 0x00, 0x00, 0x00,
|
||||
0x7C, 0x00, 0x00, 0x00,
|
||||
0x7E, 0x00, 0x00, 0x00,
|
||||
0x7F, 0x00, 0x00, 0x00,
|
||||
0x7F, 0x80, 0x00, 0x00,
|
||||
0x7F, 0xC0, 0x00, 0x00,
|
||||
0x7E, 0x00, 0x00, 0x00,
|
||||
0x76, 0x00, 0x00, 0x00,
|
||||
0x76, 0x00, 0x00, 0x00,
|
||||
0x43, 0x00, 0x00, 0x00,
|
||||
0x03, 0x00, 0x00, 0x00,
|
||||
0x01, 0x80, 0x00, 0x00,
|
||||
0x01, 0x80, 0x00, 0x00,
|
||||
0x00, 0xC0, 0x00, 0x00,
|
||||
0x00, 0xC0, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00};
|
||||
|
||||
/* FUNCTIONS *****************************************************************/
|
||||
|
||||
|
@ -125,6 +128,7 @@ MouseSafetyOnDrawStart(PSURFOBJ SurfObj, PSURFGDI SurfGDI, LONG HazardX1,
|
|||
RECTL MouseRect;
|
||||
LONG tmp;
|
||||
|
||||
|
||||
/* Mouse is not allowed to move if GDI is busy drawing */
|
||||
SafetySwitch2 = TRUE;
|
||||
|
||||
|
@ -138,6 +142,12 @@ MouseSafetyOnDrawStart(PSURFOBJ SurfObj, PSURFGDI SurfGDI, LONG HazardX1,
|
|||
return(FALSE);
|
||||
}
|
||||
|
||||
if (SPS_ACCEPT_NOEXCLUDE == PointerStatus)
|
||||
{
|
||||
/* Hardware cursor, no need to remove it */
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
if (HazardX1 > HazardX2)
|
||||
{
|
||||
tmp = HazardX2; HazardX2 = HazardX1; HazardX1 = tmp;
|
||||
|
@ -167,11 +177,20 @@ MouseSafetyOnDrawEnd(PSURFOBJ SurfObj, PSURFGDI SurfGDI)
|
|||
|
||||
if (SurfObj == NULL)
|
||||
{
|
||||
SafetySwitch2 = FALSE;
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
if (SurfObj->iType != STYPE_DEVICE || MouseEnabled == FALSE)
|
||||
{
|
||||
SafetySwitch2 = FALSE;
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
if (SPS_ACCEPT_NOEXCLUDE == PointerStatus)
|
||||
{
|
||||
/* Hardware cursor, it wasn't removed so need to restore it */
|
||||
SafetySwitch2 = FALSE;
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
|
@ -200,15 +219,9 @@ MouseGDICallBack(PMOUSE_INPUT_DATA Data, ULONG InputCount)
|
|||
PSURFGDI SurfGDI;
|
||||
RECTL MouseRect;
|
||||
MSG Msg;
|
||||
ULONG j;
|
||||
LARGE_INTEGER LargeTickCount;
|
||||
ULONG TickCount;
|
||||
static ULONG ButtonsDown = 0;
|
||||
const UINT MouseButtonDownMessage[3] =
|
||||
{WM_RBUTTONDOWN, WM_MBUTTONDOWN, WM_LBUTTONDOWN};
|
||||
const UINT MouseButtonUpMessage[3] =
|
||||
{WM_RBUTTONUP, WM_MBUTTONUP, WM_LBUTTONUP};
|
||||
const ULONG MouseButtonFlag[3] = {MK_RBUTTON, MK_MBUTTON, MK_LBUTTON};
|
||||
|
||||
KeQueryTickCount(&LargeTickCount);
|
||||
TickCount = LargeTickCount.u.LowPart;
|
||||
|
@ -219,8 +232,8 @@ MouseGDICallBack(PMOUSE_INPUT_DATA Data, ULONG InputCount)
|
|||
}
|
||||
|
||||
dc = DC_HandleToPtr(hDC);
|
||||
SurfObj = (PSURFOBJ)AccessUserObject(dc->Surface);
|
||||
SurfGDI = (PSURFGDI)AccessInternalObject(dc->Surface);
|
||||
SurfObj = (PSURFOBJ)AccessUserObject((ULONG) dc->Surface);
|
||||
SurfGDI = (PSURFGDI)AccessInternalObject((ULONG) dc->Surface);
|
||||
DC_ReleasePtr( hDC );
|
||||
|
||||
/* Compile the total mouse movement change and dispatch button events. */
|
||||
|
@ -309,8 +322,8 @@ EnableMouse(HDC hDisplayDC)
|
|||
|
||||
dc = DC_HandleToPtr(hDisplayDC);
|
||||
if( dc ){
|
||||
SurfObj = (PSURFOBJ)AccessUserObject(dc->Surface);
|
||||
SurfGDI = (PSURFGDI)AccessInternalObject(dc->Surface);
|
||||
SurfObj = (PSURFOBJ)AccessUserObject((ULONG) dc->Surface);
|
||||
SurfGDI = (PSURFGDI)AccessInternalObject((ULONG) dc->Surface);
|
||||
DC_ReleasePtr( hDisplayDC );
|
||||
|
||||
/* Create the default mouse cursor. */
|
||||
|
@ -318,16 +331,23 @@ EnableMouse(HDC hDisplayDC)
|
|||
mouse_height = 32;
|
||||
MouseSize.cx = 32;
|
||||
MouseSize.cy = 64;
|
||||
hMouseSurf = EngCreateBitmap(MouseSize, 4, BMF_1BPP, 0, DefaultCursor);
|
||||
MouseSurf = (PSURFOBJ)AccessUserObject(hMouseSurf);
|
||||
hMouseSurf = EngCreateBitmap(MouseSize, 4, BMF_1BPP, BMF_TOPDOWN, DefaultCursor);
|
||||
MouseSurf = (PSURFOBJ)AccessUserObject((ULONG) hMouseSurf);
|
||||
|
||||
/* Tell the display driver to set the pointer shape. */
|
||||
SurfGDI->SetPointerShape(SurfObj, MouseSurf, NULL, NULL, 0, 0, 320, 240,
|
||||
&MouseRect, 0);
|
||||
#if 0
|
||||
mouse_x = SurfObj->sizlBitmap.cx / 2;
|
||||
mouse_y = SurfObj->sizlBitmap.cy / 2;
|
||||
#else
|
||||
mouse_x = 320;
|
||||
mouse_y = 240;
|
||||
#endif
|
||||
PointerStatus = SurfGDI->SetPointerShape(SurfObj, MouseSurf, NULL, NULL,
|
||||
0, 0, mouse_x, mouse_y, &MouseRect,
|
||||
SPS_CHANGE);
|
||||
|
||||
mouse_x = 320;
|
||||
mouse_y = 240;
|
||||
MouseEnabled = TRUE;
|
||||
MouseEnabled = (SPS_ACCEPT_EXCLUDE == PointerStatus ||
|
||||
SPS_ACCEPT_NOEXCLUDE == PointerStatus);
|
||||
}
|
||||
else{
|
||||
MouseEnabled = FALSE;
|
||||
|
|
|
@ -214,6 +214,7 @@ EngCreateBitmap(IN SIZEL Size,
|
|||
SurfObj->sizlBitmap = Size;
|
||||
SurfObj->iBitmapFormat = Format;
|
||||
SurfObj->iType = STYPE_BITMAP;
|
||||
SurfObj->fjBitmap = Flags & (BMF_TOPDOWN | BMF_NOZEROINIT);
|
||||
SurfObj->pvScan0 = SurfObj->pvBits;
|
||||
|
||||
InitializeFuncs(SurfGDI, Format);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: dllmain.c,v 1.30 2002/09/17 23:43:28 dwelch Exp $
|
||||
/* $Id: dllmain.c,v 1.31 2003/03/11 00:21:41 gvg Exp $
|
||||
*
|
||||
* Entry Point for win32k.sys
|
||||
*/
|
||||
|
@ -17,7 +17,7 @@
|
|||
#include <include/class.h>
|
||||
#include <include/window.h>
|
||||
|
||||
//#define NDEBUG
|
||||
#define NDEBUG
|
||||
#include <win32k/debug1.h>
|
||||
|
||||
extern SSDT Win32kSSDT[];
|
||||
|
@ -94,12 +94,16 @@ DllMain (
|
|||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
PEPROCESS W32kDeviceProcess;
|
||||
|
||||
BOOLEAN
|
||||
STDCALL
|
||||
W32kInitialize (VOID)
|
||||
{
|
||||
DPRINT("in W32kInitialize\n");
|
||||
|
||||
W32kDeviceProcess = PsGetCurrentProcess();
|
||||
|
||||
InitGdiObjectHandleTable ();
|
||||
|
||||
// Create surface used to draw the internal font onto
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: driver.c,v 1.23 2003/02/25 23:08:53 gvg Exp $
|
||||
/* $Id: driver.c,v 1.24 2003/03/11 00:21:41 gvg Exp $
|
||||
*
|
||||
* GDI Driver support routines
|
||||
* (mostly swiped from Wine)
|
||||
|
@ -11,6 +11,7 @@
|
|||
#include <ddk/ntddk.h>
|
||||
#include <windows.h>
|
||||
#include <win32k/driver.h>
|
||||
#include <win32k/misc.h>
|
||||
#include <wchar.h>
|
||||
#include <ddk/winddi.h>
|
||||
#include <ddk/ntddvid.h>
|
||||
|
@ -67,7 +68,7 @@ PGD_ENABLEDRIVER DRIVER_FindDDIDriver(LPCWSTR Name)
|
|||
GRAPHICS_DRIVER *Driver = DriverList;
|
||||
NTSTATUS Status;
|
||||
WCHAR *FullName;
|
||||
WCHAR *p;
|
||||
LPCWSTR p;
|
||||
BOOL PathSeparatorFound;
|
||||
BOOL DotFound;
|
||||
UINT Size;
|
||||
|
@ -226,6 +227,9 @@ HANDLE DRIVER_FindMPDriver(LPCWSTR Name)
|
|||
HANDLE DisplayHandle;
|
||||
NTSTATUS Status;
|
||||
|
||||
/* Switch to process context in which handle is to be valid */
|
||||
KeAttachProcess(W32kDeviceProcess);
|
||||
|
||||
RtlInitUnicodeStringFromLiteral(&DeviceName, L"\\??\\DISPLAY1");
|
||||
InitializeObjectAttributes(&ObjectAttributes,
|
||||
&DeviceName,
|
||||
|
@ -238,6 +242,9 @@ HANDLE DRIVER_FindMPDriver(LPCWSTR Name)
|
|||
&Iosb,
|
||||
0,
|
||||
FILE_SYNCHRONOUS_IO_ALERT);
|
||||
|
||||
KeDetachProcess();
|
||||
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
DPRINT("ZwOpenFile() failed (Status %lx)\n", Status);
|
||||
|
|
Loading…
Reference in a new issue