2010-01-30 21:12:42 +00:00
|
|
|
/*
|
2008-04-29 17:00:31 +00:00
|
|
|
* PROJECT: ReactOS Win32 Subsystem
|
|
|
|
* LICENSE: GPL - See COPYING in the top level directory
|
2015-11-10 17:41:55 +00:00
|
|
|
* FILE: win32ss/reactx/ntddraw/dxeng.c
|
2008-04-29 17:00:31 +00:00
|
|
|
* PURPOSE: Implementation of DxEng functions
|
|
|
|
* PROGRAMMERS: Magnus Olsen (magnus@greatlord.com)
|
2022-03-30 23:53:30 +00:00
|
|
|
* Oleg Dubinskiy (oleg.dubinskij30@gmail.com)
|
2007-10-15 12:38:50 +00:00
|
|
|
*/
|
|
|
|
|
2010-04-26 13:58:46 +00:00
|
|
|
#include <win32k.h>
|
2007-10-15 12:38:50 +00:00
|
|
|
#include <debug.h>
|
2007-10-21 18:28:31 +00:00
|
|
|
|
2008-05-06 03:40:38 +00:00
|
|
|
HSEMAPHORE ghsemShareDevLock = NULL;
|
2007-10-21 18:28:31 +00:00
|
|
|
|
2007-10-21 15:11:19 +00:00
|
|
|
ULONG gcEngFuncs = DXENG_INDEX_DxEngLoadImage + 1;
|
2015-09-04 00:11:49 +00:00
|
|
|
DRVFN gaEngFuncs[] =
|
2007-10-21 15:11:19 +00:00
|
|
|
{
|
|
|
|
{0, (PFN) NULL},
|
|
|
|
{DXENG_INDEX_DxEngNUIsTermSrv, (PFN)DxEngNUIsTermSrv},
|
2007-10-21 18:47:16 +00:00
|
|
|
{DXENG_INDEX_DxEngScreenAccessCheck, (PFN)DxEngScreenAccessCheck},
|
2007-10-21 15:11:19 +00:00
|
|
|
{DXENG_INDEX_DxEngRedrawDesktop, (PFN)DxEngRedrawDesktop},
|
|
|
|
{DXENG_INDEX_DxEngDispUniq, (PFN)DxEngDispUniq},
|
2007-10-21 18:47:16 +00:00
|
|
|
{DXENG_INDEX_DxEngIncDispUniq, (PFN)DxEngIncDispUniq},
|
2007-10-21 15:11:19 +00:00
|
|
|
{DXENG_INDEX_DxEngVisRgnUniq, (PFN)DxEngVisRgnUniq},
|
2007-10-21 18:47:16 +00:00
|
|
|
{DXENG_INDEX_DxEngLockShareSem, (PFN)DxEngLockShareSem},
|
|
|
|
{DXENG_INDEX_DxEngUnlockShareSem, (PFN)DxEngUnlockShareSem},
|
2007-10-21 15:11:19 +00:00
|
|
|
{DXENG_INDEX_DxEngEnumerateHdev, (PFN)DxEngEnumerateHdev},
|
2007-10-21 18:47:16 +00:00
|
|
|
{DXENG_INDEX_DxEngLockHdev, (PFN)DxEngLockHdev},
|
|
|
|
{DXENG_INDEX_DxEngUnlockHdev, (PFN)DxEngUnlockHdev},
|
|
|
|
{DXENG_INDEX_DxEngIsHdevLockedByCurrentThread, (PFN)DxEngIsHdevLockedByCurrentThread},
|
|
|
|
{DXENG_INDEX_DxEngReferenceHdev, (PFN)DxEngReferenceHdev},
|
|
|
|
{DXENG_INDEX_DxEngUnreferenceHdev, (PFN)DxEngUnreferenceHdev},
|
2007-10-21 15:11:19 +00:00
|
|
|
{DXENG_INDEX_DxEngGetDeviceGammaRamp, (PFN)DxEngGetDeviceGammaRamp},
|
2007-10-21 18:47:16 +00:00
|
|
|
{DXENG_INDEX_DxEngSetDeviceGammaRamp, (PFN)DxEngSetDeviceGammaRamp},
|
|
|
|
{DXENG_INDEX_DxEngSpTearDownSprites, (PFN)DxEngSpTearDownSprites},
|
|
|
|
{DXENG_INDEX_DxEngSpUnTearDownSprites, (PFN)DxEngSpUnTearDownSprites},
|
|
|
|
{DXENG_INDEX_DxEngSpSpritesVisible, (PFN)DxEngSpSpritesVisible},
|
|
|
|
{DXENG_INDEX_DxEngGetHdevData, (PFN)DxEngGetHdevData},
|
|
|
|
{DXENG_INDEX_DxEngSetHdevData, (PFN)DxEngSetHdevData},
|
|
|
|
{DXENG_INDEX_DxEngCreateMemoryDC, (PFN)DxEngCreateMemoryDC},
|
|
|
|
{DXENG_INDEX_DxEngGetDesktopDC, (PFN)DxEngGetDesktopDC},
|
|
|
|
{DXENG_INDEX_DxEngDeleteDC, (PFN)DxEngDeleteDC},
|
|
|
|
{DXENG_INDEX_DxEngCleanDC, (PFN)DxEngCleanDC},
|
|
|
|
{DXENG_INDEX_DxEngSetDCOwner, (PFN)DxEngSetDCOwner},
|
2007-10-21 17:08:12 +00:00
|
|
|
{DXENG_INDEX_DxEngLockDC, (PFN)DxEngLockDC},
|
|
|
|
{DXENG_INDEX_DxEngUnlockDC, (PFN)DxEngUnlockDC},
|
2008-05-03 11:46:34 +00:00
|
|
|
{DXENG_INDEX_DxEngSetDCState, (PFN)DxEngSetDCState},
|
2007-10-21 18:47:16 +00:00
|
|
|
{DXENG_INDEX_DxEngGetDCState, (PFN)DxEngGetDCState},
|
|
|
|
{DXENG_INDEX_DxEngSelectBitmap, (PFN)DxEngSelectBitmap},
|
|
|
|
{DXENG_INDEX_DxEngSetBitmapOwner, (PFN)DxEngSetBitmapOwner},
|
|
|
|
{DXENG_INDEX_DxEngDeleteSurface, (PFN)DxEngDeleteSurface},
|
|
|
|
{DXENG_INDEX_DxEngGetSurfaceData, (PFN)DxEngGetSurfaceData},
|
|
|
|
{DXENG_INDEX_DxEngAltLockSurface, (PFN)DxEngAltLockSurface},
|
|
|
|
{DXENG_INDEX_DxEngUploadPaletteEntryToSurface, (PFN)DxEngUploadPaletteEntryToSurface},
|
|
|
|
{DXENG_INDEX_DxEngMarkSurfaceAsDirectDraw, (PFN)DxEngMarkSurfaceAsDirectDraw},
|
|
|
|
{DXENG_INDEX_DxEngSelectPaletteToSurface, (PFN)DxEngSelectPaletteToSurface},
|
|
|
|
{DXENG_INDEX_DxEngSyncPaletteTableWithDevice, (PFN)DxEngSyncPaletteTableWithDevice},
|
|
|
|
{DXENG_INDEX_DxEngSetPaletteState, (PFN)DxEngSetPaletteState},
|
|
|
|
{DXENG_INDEX_DxEngGetRedirectionBitmap, (PFN)DxEngGetRedirectionBitmap},
|
|
|
|
{DXENG_INDEX_DxEngLoadImage, (PFN)DxEngLoadImage}
|
2007-10-21 15:11:19 +00:00
|
|
|
};
|
|
|
|
|
2007-10-15 12:38:50 +00:00
|
|
|
|
2008-01-02 10:19:56 +00:00
|
|
|
/*++
|
|
|
|
* @name DxEngDispUniq
|
|
|
|
* @implemented
|
|
|
|
*
|
2008-01-02 23:32:04 +00:00
|
|
|
* The function DxEngDispUniq returns the DisplayUniqVisrgn counter value from GDI shared memory
|
2008-01-02 10:19:56 +00:00
|
|
|
*
|
|
|
|
* @return
|
2008-01-02 23:32:04 +00:00
|
|
|
* Returns the DisplayUniqVisrgn counter value from GDI shared memory
|
2008-01-02 10:19:56 +00:00
|
|
|
*
|
|
|
|
* @remarks.
|
|
|
|
* none
|
|
|
|
*
|
|
|
|
*--*/
|
2007-10-15 12:38:50 +00:00
|
|
|
ULONG
|
2008-05-05 07:59:00 +00:00
|
|
|
APIENTRY
|
2015-09-04 00:11:49 +00:00
|
|
|
DxEngDispUniq(VOID)
|
2007-10-15 12:38:50 +00:00
|
|
|
{
|
2008-03-05 20:13:46 +00:00
|
|
|
DPRINT1("ReactX Calling : DxEngDispUniq\n");
|
2007-12-15 09:11:59 +00:00
|
|
|
return GdiHandleTable->flDeviceUniq;
|
2007-10-15 12:38:50 +00:00
|
|
|
}
|
|
|
|
|
2007-12-27 18:51:27 +00:00
|
|
|
/*++
|
|
|
|
* @name DxEngGetDeviceGammaRamp
|
|
|
|
* @implemented
|
|
|
|
*
|
2008-01-03 15:33:54 +00:00
|
|
|
* The function DxEngGetDeviceGammaRamp gets the gamma ramp to dxg.sys.
|
2007-12-27 18:51:27 +00:00
|
|
|
|
|
|
|
* @param HDEV hPDev
|
2008-01-02 23:32:04 +00:00
|
|
|
* The hdev.
|
2007-12-27 18:51:27 +00:00
|
|
|
*
|
|
|
|
* @param PGAMMARAMP Ramp
|
2008-01-02 23:32:04 +00:00
|
|
|
* Pointer to store the gamma ramp value in.
|
2007-12-27 18:51:27 +00:00
|
|
|
*
|
|
|
|
* @return
|
2008-01-02 01:28:58 +00:00
|
|
|
*Returns TRUE for success, FALSE for failure
|
2007-12-27 18:51:27 +00:00
|
|
|
*
|
|
|
|
* @remarks.
|
2008-01-02 23:32:04 +00:00
|
|
|
* None
|
2007-12-27 18:51:27 +00:00
|
|
|
*
|
|
|
|
*--*/
|
2007-10-15 13:10:59 +00:00
|
|
|
BOOL
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-12-27 18:51:27 +00:00
|
|
|
DxEngGetDeviceGammaRamp(HDEV hPDev, PGAMMARAMP Ramp)
|
2007-10-15 13:10:59 +00:00
|
|
|
{
|
2008-03-05 20:13:46 +00:00
|
|
|
DPRINT1("ReactX Calling : DxEngGetDeviceGammaRamp\n");
|
2007-12-27 18:51:27 +00:00
|
|
|
return IntGetDeviceGammaRamp(hPDev, Ramp);
|
2007-10-15 13:10:59 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-10-21 17:08:12 +00:00
|
|
|
/*++
|
|
|
|
* @name DxEngLockDC
|
|
|
|
* @implemented
|
|
|
|
*
|
2008-01-02 01:28:58 +00:00
|
|
|
* The function DxEngLockDC locks a hdc from dxg.sys
|
2007-10-21 17:08:12 +00:00
|
|
|
*
|
|
|
|
* @param HDC hDC
|
2008-01-02 01:28:58 +00:00
|
|
|
* The handle we want to lock
|
2007-10-21 17:08:12 +00:00
|
|
|
*
|
2007-12-27 18:51:27 +00:00
|
|
|
* @return
|
2008-01-02 23:32:04 +00:00
|
|
|
* Returns PDC if lock succeeded or NULL if it failed.
|
2007-10-21 18:28:31 +00:00
|
|
|
*
|
2007-10-21 17:08:12 +00:00
|
|
|
* @remarks.
|
|
|
|
* none
|
|
|
|
*
|
|
|
|
*--*/
|
|
|
|
PDC
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-10-21 17:08:12 +00:00
|
|
|
DxEngLockDC(HDC hDC)
|
|
|
|
{
|
2008-03-05 20:13:46 +00:00
|
|
|
DPRINT1("ReactX Calling : DxEngLockDC\n");
|
2007-10-21 18:28:31 +00:00
|
|
|
return DC_LockDc(hDC);
|
2007-10-21 17:08:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*++
|
|
|
|
* @name DxEngUnlockDC
|
|
|
|
* @implemented
|
|
|
|
*
|
2008-01-02 23:32:04 +00:00
|
|
|
* The function DxEngUnlockDC unlocks a pDC (hdc) from dxg.sys.
|
2007-10-21 17:08:12 +00:00
|
|
|
|
|
|
|
* @param PDC pDC
|
2008-01-02 23:32:04 +00:00
|
|
|
* The handle we want to unlock.
|
2007-10-21 17:08:12 +00:00
|
|
|
*
|
2007-12-27 18:51:27 +00:00
|
|
|
* @return
|
2008-01-02 23:32:04 +00:00
|
|
|
* This function returns TRUE no matter what.
|
2007-10-21 18:28:31 +00:00
|
|
|
*
|
2007-10-21 17:08:12 +00:00
|
|
|
* @remarks.
|
|
|
|
* none
|
|
|
|
*
|
|
|
|
*--*/
|
2008-04-19 20:17:51 +00:00
|
|
|
BOOLEAN
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-10-21 17:08:12 +00:00
|
|
|
DxEngUnlockDC(PDC pDC)
|
|
|
|
{
|
2008-03-05 20:13:46 +00:00
|
|
|
DPRINT1("ReactX Calling : DxEngUnlockDC\n");
|
2007-10-21 17:08:12 +00:00
|
|
|
DC_UnlockDc(pDC);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2008-01-02 08:47:46 +00:00
|
|
|
/*++
|
|
|
|
* @name DxEngLockShareSem
|
|
|
|
* @implemented
|
|
|
|
*
|
2008-01-02 23:32:04 +00:00
|
|
|
* The function DxEngLockShareSem locks a struct of type ghsemShareDevLock that can be shared.
|
2008-01-02 08:47:46 +00:00
|
|
|
*
|
|
|
|
* @return
|
2008-01-02 23:32:04 +00:00
|
|
|
* This function returns TRUE for success and FALSE for failure.
|
|
|
|
* FALSE must mean the struct has already been locked.
|
2008-01-02 08:47:46 +00:00
|
|
|
*
|
|
|
|
* @remarks.
|
2008-01-02 23:32:04 +00:00
|
|
|
* It is being used in various ntuser* functions and ntgdi*
|
2008-05-06 03:40:38 +00:00
|
|
|
* ReactOS specific: It is not in use yet?
|
2008-01-02 08:47:46 +00:00
|
|
|
*SystemResourcesList
|
|
|
|
*--*/
|
|
|
|
BOOLEAN
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2015-09-04 00:11:49 +00:00
|
|
|
DxEngLockShareSem(VOID)
|
2007-10-21 18:28:31 +00:00
|
|
|
{
|
2008-03-05 20:13:46 +00:00
|
|
|
DPRINT1("ReactX Calling : DxEngLockShareSem\n");
|
2008-05-06 03:40:38 +00:00
|
|
|
if(!ghsemShareDevLock) ghsemShareDevLock = EngCreateSemaphore(); // Hax, should be in dllmain.c
|
2015-03-10 00:13:04 +00:00
|
|
|
EngAcquireSemaphore(ghsemShareDevLock);
|
2008-05-06 03:40:38 +00:00
|
|
|
return TRUE;
|
2007-10-21 18:28:31 +00:00
|
|
|
}
|
|
|
|
|
2008-01-02 08:47:46 +00:00
|
|
|
/*++
|
|
|
|
* @name DxEngUnlockShareSem
|
|
|
|
* @implemented
|
|
|
|
*
|
2008-01-02 23:32:04 +00:00
|
|
|
* The function DxEngUnlockShareSem unlocks the struct of type ghsemShareDevLock.
|
2008-01-02 08:47:46 +00:00
|
|
|
*
|
|
|
|
* @return
|
2008-01-02 23:32:04 +00:00
|
|
|
* This function returns TRUE no matter what.
|
2008-01-02 08:47:46 +00:00
|
|
|
*
|
|
|
|
* @remarks.
|
2008-05-06 03:40:38 +00:00
|
|
|
* ReactOS specific: It is not in use yet?
|
2008-01-02 08:47:46 +00:00
|
|
|
*
|
|
|
|
*--*/
|
|
|
|
BOOLEAN
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2015-09-04 00:11:49 +00:00
|
|
|
DxEngUnlockShareSem(VOID)
|
2007-10-21 18:28:31 +00:00
|
|
|
{
|
2008-03-05 20:13:46 +00:00
|
|
|
DPRINT1("ReactX Calling : DxEngUnlockShareSem\n");
|
2015-03-10 00:13:04 +00:00
|
|
|
EngReleaseSemaphore(ghsemShareDevLock);
|
2008-01-02 08:47:46 +00:00
|
|
|
return TRUE;
|
2007-10-21 18:28:31 +00:00
|
|
|
}
|
|
|
|
|
2007-12-27 18:51:27 +00:00
|
|
|
/*++
|
|
|
|
* @name DxEngSetDeviceGammaRamp
|
|
|
|
* @implemented
|
|
|
|
*
|
2008-01-02 01:28:58 +00:00
|
|
|
* The function DxEngSetDeviceGammaRamp sets gamma ramp from dxg.sys
|
2007-12-27 18:51:27 +00:00
|
|
|
|
|
|
|
* @param HDEV hPDev
|
|
|
|
* The hdev
|
|
|
|
*
|
|
|
|
* @param PGAMMARAMP Ramp
|
2008-01-02 23:32:04 +00:00
|
|
|
* Value to change gamma ramp to.
|
2007-12-27 18:51:27 +00:00
|
|
|
*
|
2007-12-29 12:48:49 +00:00
|
|
|
* @param BOOL Test
|
2008-01-02 23:32:04 +00:00
|
|
|
* Whether gamma should be tested. TRUE to test, FALSE to not test.
|
2007-12-27 18:51:27 +00:00
|
|
|
*
|
|
|
|
* @return
|
2008-01-02 23:32:04 +00:00
|
|
|
*Returns TRUE for success, FALSE for failure.
|
2007-12-27 18:51:27 +00:00
|
|
|
*
|
|
|
|
* @remarks.
|
2008-01-02 23:32:04 +00:00
|
|
|
* None
|
2007-12-27 18:51:27 +00:00
|
|
|
*
|
|
|
|
*--*/
|
2008-04-19 20:17:51 +00:00
|
|
|
BOOLEAN
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-12-29 06:39:06 +00:00
|
|
|
DxEngSetDeviceGammaRamp(HDEV hPDev, PGAMMARAMP Ramp, BOOL Test)
|
2007-10-21 18:28:31 +00:00
|
|
|
{
|
2008-03-05 20:13:46 +00:00
|
|
|
DPRINT1("ReactX Calling : DxEngSetDeviceGammaRamp\n");
|
|
|
|
return IntSetDeviceGammaRamp(hPDev, Ramp, Test);
|
2007-10-21 18:28:31 +00:00
|
|
|
}
|
|
|
|
|
2008-01-03 15:33:54 +00:00
|
|
|
/*++
|
|
|
|
* @name DxEngGetHdevData
|
|
|
|
* @implemented
|
|
|
|
*
|
2008-01-04 23:24:37 +00:00
|
|
|
* The function DxEngGetHdevData retrieves a value from the HDEV
|
2007-10-21 18:28:31 +00:00
|
|
|
|
2008-01-03 15:33:54 +00:00
|
|
|
* @param HDEV hPDev
|
2008-01-04 23:24:37 +00:00
|
|
|
* The HDEV
|
2008-01-03 15:33:54 +00:00
|
|
|
*
|
|
|
|
* @param DXEGSHDEVDATA Type
|
2008-01-04 23:24:37 +00:00
|
|
|
* The following typs are supported
|
|
|
|
* Type Purpose
|
|
|
|
* DxEGShDevData_Surface Retrieve pointer to Surface handle.
|
2017-03-14 19:45:23 +00:00
|
|
|
* DxEGShDevData_hSpooler Device object of graphics driver.
|
2008-01-04 23:24:37 +00:00
|
|
|
* DxEGShDevData_DitherFmt Retrieve the device iDitherFormat
|
|
|
|
* DxEGShDevData_FxCaps Retrieve the device flGraphicsCaps
|
|
|
|
* DxEGShDevData_FxCaps2 Retrieve the device flGraphicsCaps2
|
|
|
|
* DxEGShDevData_DrvFuncs Retrieve the device DriverFunctions function table
|
|
|
|
* DxEGShDevData_dhpdev Retrieve the device hPDev, the real DHPDEV
|
|
|
|
* DxEGShDevData_eddg Retrieve the device pEDDgpl
|
|
|
|
* DxEGShDevData_dd_nCount Retrieve the device DxDd_nCount
|
|
|
|
* DxEGShDevData_dd_flags Retrieve the device DxDd_Flags
|
|
|
|
* DxEGShDevData_disable See if the device pdev is disabled
|
|
|
|
* DxEGShDevData_metadev See if the device pdev is a meta device
|
|
|
|
* DxEGShDevData_display See if the device is the primary display driver
|
|
|
|
* DxEGShDevData_Parent Retrieve the ppdevParent
|
|
|
|
* DxEGShDevData_OpenRefs Retrieve the pdevOpenRefs counter
|
|
|
|
* DxEGShDevData_palette See if the device RC_PALETTE is set
|
|
|
|
* DxEGShDevData_ldev ATM we do not support the Loader Device driver structure
|
2009-08-16 12:57:41 +00:00
|
|
|
* DxEGShDevData_GDev Retrieve the device pGraphicsDevice
|
2008-01-04 23:24:37 +00:00
|
|
|
* DxEGShDevData_clonedev Retrieve the device PDEV_CLONE_DEVICE flag is set or not
|
2008-01-03 15:33:54 +00:00
|
|
|
*
|
|
|
|
* @return
|
|
|
|
* Returns the data we requested
|
|
|
|
*
|
|
|
|
* @remarks.
|
2008-01-04 23:24:37 +00:00
|
|
|
* ReactOS specific: Implementation is incomplete, I do not save the value into the hdev yet.
|
2008-01-03 15:33:54 +00:00
|
|
|
*
|
|
|
|
*--*/
|
2008-04-30 20:34:04 +00:00
|
|
|
DWORD_PTR
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2008-01-02 23:57:05 +00:00
|
|
|
DxEngGetHdevData(HDEV hDev,
|
|
|
|
DXEGSHDEVDATA Type)
|
2007-10-21 18:28:31 +00:00
|
|
|
{
|
2008-04-30 20:34:04 +00:00
|
|
|
DWORD_PTR retVal = 0;
|
2009-03-20 18:02:55 +00:00
|
|
|
PPDEVOBJ PDev = (PPDEVOBJ)hDev;
|
2008-03-05 20:13:46 +00:00
|
|
|
|
|
|
|
DPRINT1("ReactX Calling : DxEngGetHdevData DXEGSHDEVDATA : %ld\n", Type);
|
2008-01-02 23:57:05 +00:00
|
|
|
|
2008-04-25 05:47:32 +00:00
|
|
|
#if 1
|
2013-03-05 08:47:51 +00:00
|
|
|
DPRINT1("HDEV hDev %p\n", hDev);
|
2008-04-25 05:47:32 +00:00
|
|
|
#endif
|
|
|
|
|
2008-01-02 23:57:05 +00:00
|
|
|
switch ( Type )
|
|
|
|
{
|
|
|
|
case DxEGShDevData_Surface:
|
2008-04-19 20:17:51 +00:00
|
|
|
DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_Surface\n");
|
2008-04-30 20:34:04 +00:00
|
|
|
retVal = (DWORD_PTR) PDev->pSurface; // ptr to Surface handle.
|
2008-01-02 23:57:05 +00:00
|
|
|
break;
|
|
|
|
case DxEGShDevData_hSpooler:
|
2008-04-19 20:17:51 +00:00
|
|
|
DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_hSpooler\n");
|
2017-03-14 19:45:23 +00:00
|
|
|
retVal = (DWORD_PTR) PDev->hSpooler;
|
2008-01-02 23:57:05 +00:00
|
|
|
break;
|
|
|
|
case DxEGShDevData_DitherFmt:
|
2008-04-19 20:17:51 +00:00
|
|
|
DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_DitherFmt\n");
|
2009-08-16 12:57:41 +00:00
|
|
|
retVal = (DWORD_PTR) PDev->devinfo.iDitherFormat;
|
2008-01-02 23:57:05 +00:00
|
|
|
break;
|
|
|
|
case DxEGShDevData_FxCaps:
|
2008-04-19 20:17:51 +00:00
|
|
|
DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_FxCaps\n");
|
2009-08-16 12:57:41 +00:00
|
|
|
retVal = (DWORD_PTR) PDev->devinfo.flGraphicsCaps;
|
2008-01-02 23:57:05 +00:00
|
|
|
break;
|
|
|
|
case DxEGShDevData_FxCaps2:
|
2008-04-19 20:17:51 +00:00
|
|
|
DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_FxCaps2\n");
|
2009-08-16 12:57:41 +00:00
|
|
|
retVal = (DWORD_PTR) PDev->devinfo.flGraphicsCaps2;
|
2008-01-02 23:57:05 +00:00
|
|
|
break;
|
|
|
|
case DxEGShDevData_DrvFuncs:
|
2008-04-19 20:17:51 +00:00
|
|
|
DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_DrvFuncs\n");
|
2008-04-30 20:34:04 +00:00
|
|
|
retVal = (DWORD_PTR) &PDev->DriverFunctions;
|
2008-01-02 23:57:05 +00:00
|
|
|
break;
|
|
|
|
case DxEGShDevData_dhpdev:
|
2008-04-19 20:17:51 +00:00
|
|
|
DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_dhpdev\n");
|
2009-08-16 12:57:41 +00:00
|
|
|
retVal = (DWORD_PTR) PDev->dhpdev; // DHPDEV
|
2008-01-02 23:57:05 +00:00
|
|
|
break;
|
|
|
|
case DxEGShDevData_eddg:
|
2008-04-19 20:17:51 +00:00
|
|
|
DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_eddg\n");
|
2008-04-30 20:34:04 +00:00
|
|
|
retVal = (DWORD_PTR) PDev->pEDDgpl;
|
2008-01-02 23:57:05 +00:00
|
|
|
break;
|
|
|
|
case DxEGShDevData_dd_nCount:
|
2008-04-19 20:17:51 +00:00
|
|
|
DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_dd_nCount\n");
|
2008-04-30 20:34:04 +00:00
|
|
|
retVal = (DWORD_PTR) PDev->DxDd_nCount;
|
2008-01-02 23:57:05 +00:00
|
|
|
break;
|
|
|
|
case DxEGShDevData_dd_flags:
|
2008-04-19 20:17:51 +00:00
|
|
|
DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_dd_flags\n");
|
2008-04-30 20:34:04 +00:00
|
|
|
retVal = (DWORD_PTR) PDev->DxDd_Flags;
|
2008-01-02 23:57:05 +00:00
|
|
|
break;
|
|
|
|
case DxEGShDevData_disable:
|
2008-04-19 20:17:51 +00:00
|
|
|
DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_disable\n");
|
2008-04-30 20:34:04 +00:00
|
|
|
retVal = (DWORD_PTR) PDev->flFlags & PDEV_DISABLED;
|
2008-01-02 23:57:05 +00:00
|
|
|
break;
|
|
|
|
case DxEGShDevData_metadev:
|
2008-04-19 20:17:51 +00:00
|
|
|
DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_metadev\n");
|
2008-04-30 20:34:04 +00:00
|
|
|
retVal = (DWORD_PTR) PDev->flFlags & PDEV_META_DEVICE;
|
2008-01-02 23:57:05 +00:00
|
|
|
break;
|
|
|
|
case DxEGShDevData_display:
|
2008-04-19 20:17:51 +00:00
|
|
|
DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_display\n");
|
2008-04-30 20:34:04 +00:00
|
|
|
retVal = (DWORD_PTR) PDev->flFlags & PDEV_DISPLAY;
|
2008-01-02 23:57:05 +00:00
|
|
|
break;
|
|
|
|
case DxEGShDevData_Parent:
|
2008-04-19 20:17:51 +00:00
|
|
|
DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_Parent\n");
|
2008-04-30 20:34:04 +00:00
|
|
|
retVal = (DWORD_PTR) PDev->ppdevParent;
|
2008-01-02 23:57:05 +00:00
|
|
|
break;
|
|
|
|
case DxEGShDevData_OpenRefs:
|
2008-04-19 20:17:51 +00:00
|
|
|
DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_OpenRefs\n");
|
2008-05-02 17:47:46 +00:00
|
|
|
retVal = (DWORD_PTR) PDev->cPdevOpenRefs != 0;
|
2008-01-02 23:57:05 +00:00
|
|
|
break;
|
|
|
|
case DxEGShDevData_palette:
|
2008-04-19 20:17:51 +00:00
|
|
|
DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_palette\n");
|
2009-08-16 12:57:41 +00:00
|
|
|
retVal = (DWORD_PTR) PDev->gdiinfo.flRaster & RC_PALETTE;
|
2008-01-02 23:57:05 +00:00
|
|
|
break;
|
|
|
|
case DxEGShDevData_ldev:
|
2017-03-14 19:45:23 +00:00
|
|
|
DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_ldev\n");
|
2018-03-04 20:58:15 +00:00
|
|
|
retVal = (DWORD_PTR) PDev->pldev;
|
2008-01-02 23:57:05 +00:00
|
|
|
break;
|
|
|
|
case DxEGShDevData_GDev:
|
2008-04-19 20:17:51 +00:00
|
|
|
DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_GDev\n");
|
2009-08-16 12:57:41 +00:00
|
|
|
retVal = (DWORD_PTR) PDev->pGraphicsDevice; // P"GRAPHICS_DEVICE"
|
2008-01-02 23:57:05 +00:00
|
|
|
break;
|
|
|
|
case DxEGShDevData_clonedev:
|
2008-04-19 20:17:51 +00:00
|
|
|
DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_clonedev\n");
|
2008-04-30 20:34:04 +00:00
|
|
|
retVal = (DWORD_PTR) PDev->flFlags & PDEV_CLONE_DEVICE;
|
2008-01-02 23:57:05 +00:00
|
|
|
break;
|
2008-01-03 15:33:54 +00:00
|
|
|
|
2008-01-02 23:57:05 +00:00
|
|
|
default:
|
2008-01-03 15:33:54 +00:00
|
|
|
break;
|
2008-01-02 23:57:05 +00:00
|
|
|
}
|
2008-01-03 15:33:54 +00:00
|
|
|
|
2008-04-25 05:47:32 +00:00
|
|
|
#if 1
|
|
|
|
DPRINT1("return value %08lx\n", retVal);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
return retVal;
|
2008-01-02 23:57:05 +00:00
|
|
|
|
2007-10-21 18:28:31 +00:00
|
|
|
}
|
|
|
|
|
2008-01-02 09:37:05 +00:00
|
|
|
/*++
|
|
|
|
* @name DxEngSetHdevData
|
|
|
|
* @implemented
|
|
|
|
*
|
|
|
|
* The function DxEngSetHdevData sets a value in hdev
|
|
|
|
|
|
|
|
* @param HDEV hPDev
|
|
|
|
* The hdev
|
|
|
|
*
|
2008-01-02 23:21:24 +00:00
|
|
|
* @param DXEGSHDEVDATA Type
|
2008-01-04 23:24:37 +00:00
|
|
|
* Supports only DxEGShDevData_dd_nCount. It is an internal counter on how many times hdev has been locked and unlocked
|
2008-01-02 09:37:05 +00:00
|
|
|
*
|
2008-01-02 23:21:24 +00:00
|
|
|
* @param DWORD Data
|
2008-01-02 23:32:04 +00:00
|
|
|
* The value to be saved to hdev's internal counter.
|
2008-01-02 09:37:05 +00:00
|
|
|
*
|
|
|
|
* @return
|
|
|
|
* Returns TRUE for success, FALSE for failure
|
|
|
|
*
|
|
|
|
* @remarks.
|
2008-01-03 15:33:54 +00:00
|
|
|
* none
|
2008-01-02 09:37:05 +00:00
|
|
|
*
|
|
|
|
*--*/
|
|
|
|
BOOLEAN
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2008-01-02 23:21:24 +00:00
|
|
|
DxEngSetHdevData(HDEV hDev,
|
|
|
|
DXEGSHDEVDATA Type,
|
2008-04-30 20:34:04 +00:00
|
|
|
DWORD_PTR Data)
|
2007-10-21 18:28:31 +00:00
|
|
|
{
|
2008-03-05 20:13:46 +00:00
|
|
|
BOOLEAN retVal = FALSE; // Default, no set.
|
2008-01-02 23:21:24 +00:00
|
|
|
|
2008-03-05 20:13:46 +00:00
|
|
|
DPRINT1("ReactX Calling : DxEngSetHdevData DXEGSHDEVDATA : %ld\n", Type);
|
|
|
|
|
|
|
|
if ( Type == DxEGShDevData_dd_nCount )
|
|
|
|
{
|
2009-03-20 18:02:55 +00:00
|
|
|
((PPDEVOBJ)hDev)->DxDd_nCount = Data;
|
2008-03-05 20:13:46 +00:00
|
|
|
retVal = TRUE; // Set
|
|
|
|
}
|
|
|
|
return retVal;
|
2007-10-21 18:28:31 +00:00
|
|
|
}
|
|
|
|
|
2008-01-01 19:15:22 +00:00
|
|
|
/*++
|
|
|
|
* @name DxEngGetDCState
|
|
|
|
* @implemented
|
|
|
|
*
|
2008-01-02 01:28:58 +00:00
|
|
|
* The function DxEngGetDCState is capable of returning three
|
|
|
|
* DC states depending on what value is passed in its second parameter:
|
|
|
|
* 1. If the DC is full screen
|
|
|
|
* 2. Get Complexity of visible region
|
2009-03-20 01:35:49 +00:00
|
|
|
* 3. Get Driver hdev, which is ppdev
|
2008-01-01 19:15:22 +00:00
|
|
|
*
|
|
|
|
* @param HDC hdc
|
2008-01-02 01:28:58 +00:00
|
|
|
* The DC handle
|
2008-01-01 19:15:22 +00:00
|
|
|
*
|
|
|
|
* @param DWORD type
|
2008-01-02 08:47:46 +00:00
|
|
|
* value 1 = Is DC fullscreen
|
|
|
|
* value 2 = Get Complexity of visible region.
|
2009-03-20 01:35:49 +00:00
|
|
|
* value 3 = Get Driver hdev, which is a ppdev.
|
2008-01-01 19:15:22 +00:00
|
|
|
*
|
|
|
|
* @return
|
2008-01-02 01:28:58 +00:00
|
|
|
* Return one of the type values
|
2008-01-01 19:15:22 +00:00
|
|
|
*
|
|
|
|
* @remarks.
|
2020-05-01 13:57:11 +00:00
|
|
|
* none
|
2008-01-01 19:15:22 +00:00
|
|
|
*
|
|
|
|
*--*/
|
2008-04-30 20:34:04 +00:00
|
|
|
DWORD_PTR
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2007-10-24 22:52:13 +00:00
|
|
|
DxEngGetDCState(HDC hDC,
|
|
|
|
DWORD type)
|
|
|
|
{
|
|
|
|
PDC pDC = DC_LockDc(hDC);
|
2008-04-30 20:34:04 +00:00
|
|
|
DWORD_PTR retVal = 0;
|
2008-01-01 01:08:07 +00:00
|
|
|
|
2013-03-05 08:47:51 +00:00
|
|
|
DPRINT1("ReactX Calling : DxEngGetDCState type : %lu\n", type);
|
2008-03-05 20:13:46 +00:00
|
|
|
|
2007-10-24 22:52:13 +00:00
|
|
|
if (pDC)
|
|
|
|
{
|
|
|
|
switch (type)
|
|
|
|
{
|
|
|
|
case 1:
|
2020-01-10 00:44:09 +00:00
|
|
|
retVal = (DWORD_PTR) pDC->fs & DC_FULLSCREEN;
|
2008-01-01 18:50:42 +00:00
|
|
|
break;
|
2007-10-24 22:52:13 +00:00
|
|
|
case 2:
|
2021-12-20 20:27:13 +00:00
|
|
|
/* Return the complexity of the visible region. */
|
|
|
|
retVal = (DWORD_PTR) REGION_Complexity(pDC->prgnVis);
|
2008-01-01 18:50:42 +00:00
|
|
|
break;
|
2007-10-24 22:52:13 +00:00
|
|
|
case 3:
|
2008-01-01 19:15:22 +00:00
|
|
|
{
|
2008-01-02 08:47:46 +00:00
|
|
|
/* Return the HDEV of this DC. */
|
2009-03-20 01:35:49 +00:00
|
|
|
retVal = (DWORD_PTR) pDC->ppdev;
|
2008-01-01 18:50:42 +00:00
|
|
|
break;
|
2007-11-12 01:26:32 +00:00
|
|
|
}
|
2007-10-24 22:52:13 +00:00
|
|
|
default:
|
2011-11-29 14:55:58 +00:00
|
|
|
/* If a valid type is not found, zero is returned */
|
2013-03-05 08:47:51 +00:00
|
|
|
DPRINT1("Warning: did not find type %lu\n", type);
|
2007-10-24 22:52:13 +00:00
|
|
|
break;
|
|
|
|
}
|
2008-01-01 01:08:07 +00:00
|
|
|
DC_UnlockDc(pDC);
|
2007-10-24 22:52:13 +00:00
|
|
|
}
|
|
|
|
|
2021-12-20 20:27:13 +00:00
|
|
|
DPRINT1("Return value %08lx\n", retVal);
|
|
|
|
|
2008-01-01 01:08:07 +00:00
|
|
|
return retVal;
|
2007-10-21 18:28:31 +00:00
|
|
|
}
|
|
|
|
|
2008-01-03 15:33:54 +00:00
|
|
|
/*++
|
|
|
|
* @name DxEngIncDispUniq
|
|
|
|
* @implemented
|
|
|
|
*
|
|
|
|
* The function DxEngIncDispUniq increments the DisplayUniqVisrgn counter from GDI shared memory.
|
|
|
|
*
|
|
|
|
* @return
|
|
|
|
* This function returns TRUE no matter what.
|
|
|
|
*
|
|
|
|
* @remarks.
|
|
|
|
* none
|
|
|
|
*
|
|
|
|
*--*/
|
|
|
|
BOOLEAN
|
2008-05-05 07:59:00 +00:00
|
|
|
APIENTRY
|
2015-09-04 00:11:49 +00:00
|
|
|
DxEngIncDispUniq(VOID)
|
2008-01-03 15:33:54 +00:00
|
|
|
{
|
2008-03-05 20:13:46 +00:00
|
|
|
DPRINT1("ReactX Calling : DxEngIncDispUniq \n");
|
|
|
|
|
2008-01-03 15:33:54 +00:00
|
|
|
InterlockedIncrement((LONG*)&GdiHandleTable->flDeviceUniq);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2008-03-04 23:35:01 +00:00
|
|
|
/*++
|
|
|
|
* @name DxEngLockHdev
|
|
|
|
* @implemented
|
|
|
|
*
|
|
|
|
* The function DxEngLockHdev lock the internal PDEV
|
|
|
|
*
|
|
|
|
* @param HDEV type
|
2009-03-20 18:02:55 +00:00
|
|
|
* it is a pointer to win32k internal pdev struct known as PPDEVOBJ
|
2008-03-04 23:35:01 +00:00
|
|
|
|
|
|
|
* @return
|
|
|
|
* This function returns TRUE no matter what.
|
|
|
|
*
|
|
|
|
* @remarks.
|
|
|
|
* none
|
|
|
|
*
|
|
|
|
*--*/
|
2008-04-30 20:34:04 +00:00
|
|
|
BOOLEAN
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2008-03-04 23:35:01 +00:00
|
|
|
DxEngLockHdev(HDEV hDev)
|
|
|
|
{
|
2009-03-20 18:02:55 +00:00
|
|
|
PPDEVOBJ ppdev = (PPDEVOBJ)hDev;
|
2008-04-21 05:42:08 +00:00
|
|
|
PERESOURCE Resource;
|
|
|
|
|
2008-04-26 09:29:10 +00:00
|
|
|
DPRINT1("ReactX Calling : DxEngLockHdev \n");
|
|
|
|
|
2013-03-05 08:47:51 +00:00
|
|
|
DPRINT1("hDev : 0x%p\n",hDev);
|
2008-04-21 05:42:08 +00:00
|
|
|
|
2012-05-02 19:29:33 +00:00
|
|
|
Resource = (PERESOURCE)ppdev->hsemDevLock;
|
2008-03-04 23:35:01 +00:00
|
|
|
|
|
|
|
if (Resource)
|
|
|
|
{
|
|
|
|
KeEnterCriticalRegion();
|
|
|
|
ExAcquireResourceExclusiveLite( Resource , TRUE); // Lock monitor.
|
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*++
|
|
|
|
* @name DxEngUnlockHdev
|
|
|
|
* @implemented
|
|
|
|
*
|
|
|
|
* The function DxEngUnlockHdev unlock the internal PDEV
|
|
|
|
*
|
|
|
|
* @param HDEV type
|
2009-03-20 18:02:55 +00:00
|
|
|
* it is a pointer to win32k internal pdev struct known as PPDEVOBJ
|
2008-03-04 23:35:01 +00:00
|
|
|
|
|
|
|
* @return
|
|
|
|
* This function returns TRUE no matter what.
|
|
|
|
*
|
|
|
|
* @remarks.
|
|
|
|
* none
|
|
|
|
*
|
|
|
|
*--*/
|
2008-04-19 22:38:54 +00:00
|
|
|
BOOLEAN
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2008-03-04 23:35:01 +00:00
|
|
|
DxEngUnlockHdev(HDEV hDev)
|
|
|
|
{
|
2009-03-20 18:02:55 +00:00
|
|
|
PPDEVOBJ ppdev = (PPDEVOBJ)hDev;
|
2012-05-02 19:29:33 +00:00
|
|
|
PERESOURCE Resource = (PERESOURCE)ppdev->hsemDevLock;
|
2008-03-04 23:35:01 +00:00
|
|
|
|
2008-03-05 20:13:46 +00:00
|
|
|
DPRINT1("ReactX Calling : DxEngUnlockHdev \n");
|
|
|
|
|
2008-03-04 23:35:01 +00:00
|
|
|
if (Resource)
|
|
|
|
{
|
|
|
|
ExReleaseResourceLite( Resource );
|
|
|
|
KeLeaveCriticalRegion();
|
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-04-19 22:38:54 +00:00
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngReferenceHdev */
|
|
|
|
/************************************************************************/
|
2008-05-04 23:17:10 +00:00
|
|
|
BOOLEAN
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2008-04-19 22:38:54 +00:00
|
|
|
DxEngReferenceHdev(HDEV hDev)
|
|
|
|
{
|
2022-05-31 21:58:35 +00:00
|
|
|
PDEVOBJ_vReference((PPDEVOBJ)hDev);
|
2008-04-19 22:38:54 +00:00
|
|
|
/* ALWAYS return true */
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2008-01-03 15:33:54 +00:00
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngNUIsTermSrv */
|
|
|
|
/************************************************************************/
|
|
|
|
|
2011-11-29 14:55:58 +00:00
|
|
|
/* Notes: Check if terminal server got connections or not */
|
2008-04-19 20:17:51 +00:00
|
|
|
BOOLEAN
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2015-09-04 00:11:49 +00:00
|
|
|
DxEngNUIsTermSrv(VOID)
|
2008-01-03 15:33:54 +00:00
|
|
|
{
|
2011-11-29 14:55:58 +00:00
|
|
|
/* FIXME: ReactOS does not suport terminal server yet, we can not check if we got connections or not */
|
2008-01-03 15:33:54 +00:00
|
|
|
UNIMPLEMENTED;
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngRedrawDesktop */
|
|
|
|
/************************************************************************/
|
|
|
|
|
2011-11-29 14:55:58 +00:00
|
|
|
/* Notes: it always returns TRUE, and it updates whole screen
|
2008-05-05 07:59:00 +00:00
|
|
|
(redraws current desktop) */
|
2008-04-19 20:17:51 +00:00
|
|
|
BOOLEAN
|
2008-05-05 07:59:00 +00:00
|
|
|
APIENTRY
|
2015-09-04 00:11:49 +00:00
|
|
|
DxEngRedrawDesktop(VOID)
|
2008-01-03 15:33:54 +00:00
|
|
|
{
|
2008-05-05 17:45:20 +00:00
|
|
|
UserRedrawDesktop();
|
2008-01-03 15:33:54 +00:00
|
|
|
return TRUE;
|
|
|
|
}
|
2008-05-05 17:45:20 +00:00
|
|
|
|
|
|
|
|
2008-01-03 15:33:54 +00:00
|
|
|
ULONG gulVisRgnUniqueness; // Increase count everytime client region is updated.
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngVisRgnUniq */
|
|
|
|
/************************************************************************/
|
2011-11-29 14:55:58 +00:00
|
|
|
/* Notes: returns the VisRgnUniq counter for win32k */
|
2008-01-03 15:33:54 +00:00
|
|
|
ULONG
|
2008-05-05 07:59:00 +00:00
|
|
|
APIENTRY
|
2015-09-04 00:11:49 +00:00
|
|
|
DxEngVisRgnUniq(VOID)
|
2008-01-03 15:33:54 +00:00
|
|
|
{
|
2008-03-05 20:13:46 +00:00
|
|
|
DPRINT1("ReactX Calling : DxEngVisRgnUniq \n");
|
|
|
|
|
2008-01-03 15:33:54 +00:00
|
|
|
return gulVisRgnUniqueness;
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngEnumerateHdev */
|
|
|
|
/************************************************************************/
|
|
|
|
/* Enumerate all drivers in win32k */
|
|
|
|
HDEV *
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2008-01-03 15:33:54 +00:00
|
|
|
DxEngEnumerateHdev(HDEV *hdev)
|
|
|
|
{
|
2011-11-29 14:55:58 +00:00
|
|
|
/* FIXME: Enumerate all drivers in win32k */
|
2008-01-03 15:33:54 +00:00
|
|
|
UNIMPLEMENTED;
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngCreateMemoryDC */
|
|
|
|
/************************************************************************/
|
2008-05-03 23:30:19 +00:00
|
|
|
HDC
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2008-05-03 23:30:19 +00:00
|
|
|
DxEngCreateMemoryDC(HDEV hDev)
|
2008-01-03 15:33:54 +00:00
|
|
|
{
|
2020-01-10 00:44:09 +00:00
|
|
|
return IntGdiCreateDisplayDC(hDev, DCTYPE_MEMORY, FALSE);
|
2008-01-03 15:33:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngScreenAccessCheck */
|
|
|
|
/************************************************************************/
|
2015-09-04 00:11:49 +00:00
|
|
|
DWORD APIENTRY DxEngScreenAccessCheck(VOID)
|
2008-01-03 15:33:54 +00:00
|
|
|
{
|
|
|
|
UNIMPLEMENTED;
|
2008-04-20 14:46:03 +00:00
|
|
|
|
2011-11-29 14:55:58 +00:00
|
|
|
/* We're cheating here and telling dxg.sys it has always had permissions to access the screen */
|
2008-04-20 14:46:03 +00:00
|
|
|
return TRUE;
|
2008-01-03 15:33:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngIsHdevLockedByCurrentThread */
|
|
|
|
/************************************************************************/
|
2008-05-04 23:17:10 +00:00
|
|
|
BOOLEAN
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2008-05-04 23:17:10 +00:00
|
|
|
DxEngIsHdevLockedByCurrentThread(HDEV hDev)
|
2011-11-29 14:55:58 +00:00
|
|
|
{ // Based on EngIsSemaphoreOwnedByCurrentThread w/o the Ex call.
|
2012-05-02 19:29:33 +00:00
|
|
|
PERESOURCE pSem = (PERESOURCE)(((PPDEVOBJ)hDev)->hsemDevLock);
|
2008-05-04 23:17:10 +00:00
|
|
|
return pSem->OwnerEntry.OwnerThread == (ERESOURCE_THREAD)PsGetCurrentThread();
|
2008-01-03 15:33:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngUnreferenceHdev */
|
|
|
|
/************************************************************************/
|
2008-05-04 23:17:10 +00:00
|
|
|
BOOLEAN
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2008-05-04 23:17:10 +00:00
|
|
|
DxEngUnreferenceHdev(HDEV hDev)
|
2008-01-03 15:33:54 +00:00
|
|
|
{
|
2022-05-31 21:58:35 +00:00
|
|
|
PDEVOBJ_vRelease((PPDEVOBJ)hDev);
|
2008-05-04 23:17:10 +00:00
|
|
|
return TRUE; // Always true.
|
2008-01-03 15:33:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngGetDesktopDC */
|
|
|
|
/************************************************************************/
|
2008-05-03 10:23:14 +00:00
|
|
|
HDC
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2008-05-03 23:30:19 +00:00
|
|
|
DxEngGetDesktopDC(ULONG DcType, BOOL EmptyDC, BOOL ValidatehWnd)
|
2008-01-03 15:33:54 +00:00
|
|
|
{
|
2009-07-02 19:09:32 +00:00
|
|
|
return UserGetDesktopDC(DcType, EmptyDC, ValidatehWnd);
|
2008-01-03 15:33:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngDeleteDC */
|
|
|
|
/************************************************************************/
|
2008-05-03 23:30:19 +00:00
|
|
|
BOOLEAN
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2008-05-03 23:30:19 +00:00
|
|
|
DxEngDeleteDC(HDC hdc, BOOL Force)
|
2008-01-03 15:33:54 +00:00
|
|
|
{
|
2008-05-03 23:30:19 +00:00
|
|
|
return IntGdiDeleteDC(hdc, Force);
|
2008-01-03 15:33:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngCleanDC */
|
|
|
|
/************************************************************************/
|
2008-04-29 17:00:31 +00:00
|
|
|
BOOLEAN
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2008-04-29 17:00:31 +00:00
|
|
|
DxEngCleanDC(HDC hdc)
|
2008-01-03 15:33:54 +00:00
|
|
|
{
|
2008-05-06 04:22:49 +00:00
|
|
|
return IntGdiCleanDC(hdc);
|
2008-01-03 15:33:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngSetDCOwner */
|
|
|
|
/************************************************************************/
|
2008-11-29 22:48:58 +00:00
|
|
|
BOOL APIENTRY DxEngSetDCOwner(HGDIOBJ hObject, DWORD OwnerMask)
|
2008-01-03 15:33:54 +00:00
|
|
|
{
|
2008-05-01 16:36:42 +00:00
|
|
|
DPRINT1("ReactX Calling : DxEngSetDCOwner \n");
|
|
|
|
|
[WIN32K]
Rewrite of the GDI handle manager
- The old handle manager used a completely retarded spinlock in combination with KeDelayExecutionThread() for both exclusive
and shared locks. This is probably the most uneffective algorithm possible. It was also duplicating code everywhere and it was a overall mess It
is now replaced with a lock-free reference counter for shared locks and a pushlock for exclusive locks. -> Better performance and scalability.
- Allocate user mode object attributes from the new gdi pool. This way, we don't need any caching, since the pool serves as a cache. Its also
much faster and uses much less memory.
- Allow object allocations of different size, instead of fixed size from a table. This way a single allocation can take care of actual needs.
- Allow allcoating objects without a handle and insert them into the handle table later
- Properly synchronize the process GDIHandleCount. Now gdiview and taskmanager show the correct number of gdi handles.
- Implement a new event tracking system, that is capable of tracking all reverences and locks of objects and pool allocations to help track
possible leaks
- Make sure that all objects of a process are deleted in cleanup
- Make sure all usermode memory allocations are freed, when cleaning up the process pool.
- Make sure that each object type is using the correct type of lock (either shared or exclusive, not a mixture)
- Fix some object / reference leaks
- Lots of inferface improvements
- Use global variables for certain things instead of members in the mapped gdi handle table
- Make IntSysCreateRectpRgn create a region without a handle
- Fix detection od source and mask use in GreStretchBltMask
- Use GDIOBJ_bLockMultipleObjects in NtGdiCombineRegion to avoid possible deadlocks
- Fix NtGdiAbortPath to reset DCPATH_ACTIVE flag in the dc and only bail out on error, instead of always
- Replace DC_AllocateDcAttr and DC_AllocDcAttr with DC_bAllocDcAttr using the new user mode pool
- Remove DCU_SyncDcAttrtoUser and DCU_SynchDcAttrtoUser. Those functions were unused and didn't do anything useful anyway,
- Replace IntGdiSetDCOwnerEx and DC_SetOwnership with GreSetDCOwner, remove unused NoSetBrush parameter
- Replace GDIOBJ_bValidateHandle and IsObjectDead with GreIsHandleValid
- Chage GDIOBJ_bLockMultipleObjects: pass object type, return a BOOL, whether all objects could be locked, cleanup on failure
svn path=/trunk/; revision=51470
2011-04-28 08:26:46 +00:00
|
|
|
return GreSetDCOwner(hObject, OwnerMask);
|
2008-01-03 15:33:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngSetDCState */
|
|
|
|
/************************************************************************/
|
2008-05-04 23:17:10 +00:00
|
|
|
BOOLEAN
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2008-05-04 23:17:10 +00:00
|
|
|
DxEngSetDCState(HDC hDC, DWORD SetType, DWORD Set)
|
2008-01-03 15:33:54 +00:00
|
|
|
{
|
2008-05-04 23:17:10 +00:00
|
|
|
BOOLEAN Ret = FALSE;
|
|
|
|
PDC pDC = DC_LockDc(hDC);
|
|
|
|
|
|
|
|
if (pDC)
|
|
|
|
{
|
|
|
|
if (SetType == 1)
|
2011-04-15 15:29:08 +00:00
|
|
|
{
|
2008-05-04 23:17:10 +00:00
|
|
|
if ( Set )
|
2020-01-10 00:44:09 +00:00
|
|
|
pDC->fs |= DC_FULLSCREEN;
|
2008-05-04 23:17:10 +00:00
|
|
|
else
|
2020-01-10 00:44:09 +00:00
|
|
|
pDC->fs &= ~DC_FULLSCREEN;
|
2008-05-04 23:17:10 +00:00
|
|
|
Ret = TRUE;
|
|
|
|
}
|
|
|
|
DC_UnlockDc(pDC);
|
|
|
|
return Ret; // Everything else returns FALSE.
|
|
|
|
}
|
|
|
|
return Ret;
|
2008-01-03 15:33:54 +00:00
|
|
|
}
|
|
|
|
|
2007-10-21 18:28:31 +00:00
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngSelectBitmap */
|
|
|
|
/************************************************************************/
|
2022-05-31 21:58:35 +00:00
|
|
|
HBITMAP APIENTRY DxEngSelectBitmap(HDC hdc, HBITMAP hbmp)
|
2007-10-21 18:28:31 +00:00
|
|
|
{
|
2022-05-31 21:58:35 +00:00
|
|
|
DPRINT1("ReactX Calling : DxEngSelectBitmap \n");
|
|
|
|
|
|
|
|
return NtGdiSelectBitmap(hdc, hbmp);
|
2007-10-21 18:28:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngSetBitmapOwner */
|
|
|
|
/************************************************************************/
|
2022-05-31 21:58:35 +00:00
|
|
|
BOOLEAN APIENTRY DxEngSetBitmapOwner(HBITMAP hbmp, ULONG ulOwner)
|
2007-10-21 18:28:31 +00:00
|
|
|
{
|
2022-05-31 21:58:35 +00:00
|
|
|
DPRINT1("ReactX Calling : DxEngSetBitmapOwner \n");
|
|
|
|
|
|
|
|
return GreSetBitmapOwner(hbmp, ulOwner);
|
2007-10-21 18:28:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngDeleteSurface */
|
|
|
|
/************************************************************************/
|
2022-05-31 21:58:35 +00:00
|
|
|
BOOLEAN APIENTRY DxEngDeleteSurface(HSURF hsurf)
|
2007-10-21 18:28:31 +00:00
|
|
|
{
|
2022-05-31 21:58:35 +00:00
|
|
|
DPRINT1("ReactX Calling : DxEngDeleteSurface \n");
|
|
|
|
|
|
|
|
return EngDeleteSurface(hsurf);
|
2007-10-21 18:28:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngGetSurfaceData */
|
|
|
|
/************************************************************************/
|
2008-11-29 22:48:58 +00:00
|
|
|
DWORD APIENTRY DxEngGetSurfaceData(DWORD x1, DWORD x2)
|
2007-10-21 18:28:31 +00:00
|
|
|
{
|
|
|
|
UNIMPLEMENTED;
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngAltLockSurface */
|
|
|
|
/************************************************************************/
|
2022-05-31 21:58:35 +00:00
|
|
|
SURFOBJ * APIENTRY DxEngAltLockSurface(HSURF hsurf)
|
2007-10-21 18:28:31 +00:00
|
|
|
{
|
2022-05-31 21:58:35 +00:00
|
|
|
DPRINT1("ReactX Calling : DxEngAltLockSurface \n");
|
|
|
|
|
|
|
|
return EngLockSurface(hsurf);
|
2007-10-21 18:28:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngUploadPaletteEntryToSurface */
|
|
|
|
/************************************************************************/
|
2008-11-29 22:48:58 +00:00
|
|
|
DWORD APIENTRY DxEngUploadPaletteEntryToSurface(DWORD x1, DWORD x2,DWORD x3, DWORD x4)
|
2007-10-21 18:28:31 +00:00
|
|
|
{
|
|
|
|
UNIMPLEMENTED;
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngMarkSurfaceAsDirectDraw */
|
|
|
|
/************************************************************************/
|
2008-11-29 22:48:58 +00:00
|
|
|
DWORD APIENTRY DxEngMarkSurfaceAsDirectDraw(DWORD x1, DWORD x2)
|
2007-10-21 18:28:31 +00:00
|
|
|
{
|
|
|
|
UNIMPLEMENTED;
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngSelectPaletteToSurface */
|
|
|
|
/************************************************************************/
|
2008-11-29 22:48:58 +00:00
|
|
|
DWORD APIENTRY DxEngSelectPaletteToSurface(DWORD x1, DWORD x2)
|
2007-10-21 18:28:31 +00:00
|
|
|
{
|
|
|
|
UNIMPLEMENTED;
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngSyncPaletteTableWithDevice */
|
|
|
|
/************************************************************************/
|
2008-11-29 22:48:58 +00:00
|
|
|
DWORD APIENTRY DxEngSyncPaletteTableWithDevice(DWORD x1, DWORD x2)
|
2007-10-21 18:28:31 +00:00
|
|
|
{
|
|
|
|
UNIMPLEMENTED;
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngSetPaletteState */
|
|
|
|
/************************************************************************/
|
2008-11-29 22:48:58 +00:00
|
|
|
DWORD APIENTRY DxEngSetPaletteState(DWORD x1, DWORD x2, DWORD x3)
|
2007-10-21 18:28:31 +00:00
|
|
|
{
|
|
|
|
UNIMPLEMENTED;
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngGetRedirectionBitmap */
|
|
|
|
/************************************************************************/
|
2008-04-21 05:56:49 +00:00
|
|
|
DWORD
|
2008-11-29 22:48:58 +00:00
|
|
|
APIENTRY
|
2008-04-21 05:56:49 +00:00
|
|
|
DxEngGetRedirectionBitmap(DWORD x1)
|
2007-10-21 18:28:31 +00:00
|
|
|
{
|
2008-04-21 05:56:49 +00:00
|
|
|
return FALSE; // Normal return.
|
2007-10-21 18:28:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngLoadImage */
|
|
|
|
/************************************************************************/
|
2008-11-29 22:48:58 +00:00
|
|
|
DWORD APIENTRY DxEngLoadImage(DWORD x1,DWORD x2)
|
2007-10-21 18:28:31 +00:00
|
|
|
{
|
|
|
|
UNIMPLEMENTED;
|
|
|
|
return FALSE;
|
|
|
|
}
|
2007-10-15 13:10:59 +00:00
|
|
|
|
2008-01-03 15:33:54 +00:00
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngSpTearDownSprites */
|
|
|
|
/************************************************************************/
|
2008-11-29 22:48:58 +00:00
|
|
|
DWORD APIENTRY DxEngSpTearDownSprites(DWORD x1, DWORD x2, DWORD x3)
|
2007-10-21 18:52:42 +00:00
|
|
|
{
|
2008-01-03 15:33:54 +00:00
|
|
|
UNIMPLEMENTED;
|
|
|
|
return FALSE;
|
2007-10-21 18:52:42 +00:00
|
|
|
}
|
|
|
|
|
2008-01-03 15:33:54 +00:00
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngSpUnTearDownSprites */
|
|
|
|
/************************************************************************/
|
2008-11-29 22:48:58 +00:00
|
|
|
DWORD APIENTRY DxEngSpUnTearDownSprites(DWORD x1, DWORD x2, DWORD x3)
|
2008-01-03 15:33:54 +00:00
|
|
|
{
|
|
|
|
UNIMPLEMENTED;
|
|
|
|
return FALSE;
|
|
|
|
}
|
2007-10-15 12:38:50 +00:00
|
|
|
|
2008-01-03 15:33:54 +00:00
|
|
|
/************************************************************************/
|
|
|
|
/* DxEngSpSpritesVisible */
|
|
|
|
/************************************************************************/
|
2008-11-29 22:48:58 +00:00
|
|
|
DWORD APIENTRY DxEngSpSpritesVisible(DWORD x1)
|
2008-01-03 15:33:54 +00:00
|
|
|
{
|
|
|
|
UNIMPLEMENTED;
|
|
|
|
return FALSE;
|
|
|
|
}
|