Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygendxeng.c
Go to the documentation of this file.
00001 /* 00002 * PROJECT: ReactOS Win32 Subsystem 00003 * LICENSE: GPL - See COPYING in the top level directory 00004 * FILE: subsystems/win32/win32k/ntddraw/dxeng.c 00005 * PURPOSE: Implementation of DxEng functions 00006 * PROGRAMMERS: Magnus Olsen (magnus@greatlord.com) 00007 */ 00008 00009 #include <win32k.h> 00010 #include <debug.h> 00011 00012 HSEMAPHORE ghsemShareDevLock = NULL; 00013 00014 ULONG gcEngFuncs = DXENG_INDEX_DxEngLoadImage + 1; 00015 DRVFN gaEngFuncs [] = 00016 { 00017 {0, (PFN) NULL}, 00018 {DXENG_INDEX_DxEngNUIsTermSrv, (PFN)DxEngNUIsTermSrv}, 00019 {DXENG_INDEX_DxEngScreenAccessCheck, (PFN)DxEngScreenAccessCheck}, 00020 {DXENG_INDEX_DxEngRedrawDesktop, (PFN)DxEngRedrawDesktop}, 00021 {DXENG_INDEX_DxEngDispUniq, (PFN)DxEngDispUniq}, 00022 {DXENG_INDEX_DxEngIncDispUniq, (PFN)DxEngIncDispUniq}, 00023 {DXENG_INDEX_DxEngVisRgnUniq, (PFN)DxEngVisRgnUniq}, 00024 {DXENG_INDEX_DxEngLockShareSem, (PFN)DxEngLockShareSem}, 00025 {DXENG_INDEX_DxEngUnlockShareSem, (PFN)DxEngUnlockShareSem}, 00026 {DXENG_INDEX_DxEngEnumerateHdev, (PFN)DxEngEnumerateHdev}, 00027 {DXENG_INDEX_DxEngLockHdev, (PFN)DxEngLockHdev}, 00028 {DXENG_INDEX_DxEngUnlockHdev, (PFN)DxEngUnlockHdev}, 00029 {DXENG_INDEX_DxEngIsHdevLockedByCurrentThread, (PFN)DxEngIsHdevLockedByCurrentThread}, 00030 {DXENG_INDEX_DxEngReferenceHdev, (PFN)DxEngReferenceHdev}, 00031 {DXENG_INDEX_DxEngUnreferenceHdev, (PFN)DxEngUnreferenceHdev}, 00032 {DXENG_INDEX_DxEngGetDeviceGammaRamp, (PFN)DxEngGetDeviceGammaRamp}, 00033 {DXENG_INDEX_DxEngSetDeviceGammaRamp, (PFN)DxEngSetDeviceGammaRamp}, 00034 {DXENG_INDEX_DxEngSpTearDownSprites, (PFN)DxEngSpTearDownSprites}, 00035 {DXENG_INDEX_DxEngSpUnTearDownSprites, (PFN)DxEngSpUnTearDownSprites}, 00036 {DXENG_INDEX_DxEngSpSpritesVisible, (PFN)DxEngSpSpritesVisible}, 00037 {DXENG_INDEX_DxEngGetHdevData, (PFN)DxEngGetHdevData}, 00038 {DXENG_INDEX_DxEngSetHdevData, (PFN)DxEngSetHdevData}, 00039 {DXENG_INDEX_DxEngCreateMemoryDC, (PFN)DxEngCreateMemoryDC}, 00040 {DXENG_INDEX_DxEngGetDesktopDC, (PFN)DxEngGetDesktopDC}, 00041 {DXENG_INDEX_DxEngDeleteDC, (PFN)DxEngDeleteDC}, 00042 {DXENG_INDEX_DxEngCleanDC, (PFN)DxEngCleanDC}, 00043 {DXENG_INDEX_DxEngSetDCOwner, (PFN)DxEngSetDCOwner}, 00044 {DXENG_INDEX_DxEngLockDC, (PFN)DxEngLockDC}, 00045 {DXENG_INDEX_DxEngUnlockDC, (PFN)DxEngUnlockDC}, 00046 {DXENG_INDEX_DxEngSetDCState, (PFN)DxEngSetDCState}, 00047 {DXENG_INDEX_DxEngGetDCState, (PFN)DxEngGetDCState}, 00048 {DXENG_INDEX_DxEngSelectBitmap, (PFN)DxEngSelectBitmap}, 00049 {DXENG_INDEX_DxEngSetBitmapOwner, (PFN)DxEngSetBitmapOwner}, 00050 {DXENG_INDEX_DxEngDeleteSurface, (PFN)DxEngDeleteSurface}, 00051 {DXENG_INDEX_DxEngGetSurfaceData, (PFN)DxEngGetSurfaceData}, 00052 {DXENG_INDEX_DxEngAltLockSurface, (PFN)DxEngAltLockSurface}, 00053 {DXENG_INDEX_DxEngUploadPaletteEntryToSurface, (PFN)DxEngUploadPaletteEntryToSurface}, 00054 {DXENG_INDEX_DxEngMarkSurfaceAsDirectDraw, (PFN)DxEngMarkSurfaceAsDirectDraw}, 00055 {DXENG_INDEX_DxEngSelectPaletteToSurface, (PFN)DxEngSelectPaletteToSurface}, 00056 {DXENG_INDEX_DxEngSyncPaletteTableWithDevice, (PFN)DxEngSyncPaletteTableWithDevice}, 00057 {DXENG_INDEX_DxEngSetPaletteState, (PFN)DxEngSetPaletteState}, 00058 {DXENG_INDEX_DxEngGetRedirectionBitmap, (PFN)DxEngGetRedirectionBitmap}, 00059 {DXENG_INDEX_DxEngLoadImage, (PFN)DxEngLoadImage} 00060 }; 00061 00062 00063 /*++ 00064 * @name DxEngDispUniq 00065 * @implemented 00066 * 00067 * The function DxEngDispUniq returns the DisplayUniqVisrgn counter value from GDI shared memory 00068 * 00069 * @return 00070 * Returns the DisplayUniqVisrgn counter value from GDI shared memory 00071 * 00072 * @remarks. 00073 * none 00074 * 00075 *--*/ 00076 ULONG 00077 APIENTRY 00078 DxEngDispUniq() 00079 { 00080 DPRINT1("ReactX Calling : DxEngDispUniq\n"); 00081 return GdiHandleTable->flDeviceUniq; 00082 } 00083 00084 /*++ 00085 * @name DxEngGetDeviceGammaRamp 00086 * @implemented 00087 * 00088 * The function DxEngGetDeviceGammaRamp gets the gamma ramp to dxg.sys. 00089 00090 * @param HDEV hPDev 00091 * The hdev. 00092 * 00093 * @param PGAMMARAMP Ramp 00094 * Pointer to store the gamma ramp value in. 00095 * 00096 * @return 00097 *Returns TRUE for success, FALSE for failure 00098 * 00099 * @remarks. 00100 * None 00101 * 00102 *--*/ 00103 BOOL 00104 APIENTRY 00105 DxEngGetDeviceGammaRamp(HDEV hPDev, PGAMMARAMP Ramp) 00106 { 00107 DPRINT1("ReactX Calling : DxEngGetDeviceGammaRamp\n"); 00108 return IntGetDeviceGammaRamp(hPDev, Ramp); 00109 } 00110 00111 00112 /*++ 00113 * @name DxEngLockDC 00114 * @implemented 00115 * 00116 * The function DxEngLockDC locks a hdc from dxg.sys 00117 * 00118 * @param HDC hDC 00119 * The handle we want to lock 00120 * 00121 * @return 00122 * Returns PDC if lock succeeded or NULL if it failed. 00123 * 00124 * @remarks. 00125 * none 00126 * 00127 *--*/ 00128 PDC 00129 APIENTRY 00130 DxEngLockDC(HDC hDC) 00131 { 00132 DPRINT1("ReactX Calling : DxEngLockDC\n"); 00133 return DC_LockDc(hDC); 00134 } 00135 00136 00137 /*++ 00138 * @name DxEngUnlockDC 00139 * @implemented 00140 * 00141 * The function DxEngUnlockDC unlocks a pDC (hdc) from dxg.sys. 00142 00143 * @param PDC pDC 00144 * The handle we want to unlock. 00145 * 00146 * @return 00147 * This function returns TRUE no matter what. 00148 * 00149 * @remarks. 00150 * none 00151 * 00152 *--*/ 00153 BOOLEAN 00154 APIENTRY 00155 DxEngUnlockDC(PDC pDC) 00156 { 00157 DPRINT1("ReactX Calling : DxEngUnlockDC\n"); 00158 DC_UnlockDc(pDC); 00159 return TRUE; 00160 } 00161 00162 /*++ 00163 * @name DxEngLockShareSem 00164 * @implemented 00165 * 00166 * The function DxEngLockShareSem locks a struct of type ghsemShareDevLock that can be shared. 00167 * 00168 * @return 00169 * This function returns TRUE for success and FALSE for failure. 00170 * FALSE must mean the struct has already been locked. 00171 * 00172 * @remarks. 00173 * It is being used in various ntuser* functions and ntgdi* 00174 * ReactOS specific: It is not in use yet? 00175 *SystemResourcesList 00176 *--*/ 00177 BOOLEAN 00178 APIENTRY 00179 DxEngLockShareSem() 00180 { 00181 DPRINT1("ReactX Calling : DxEngLockShareSem\n"); 00182 if(!ghsemShareDevLock) ghsemShareDevLock = EngCreateSemaphore(); // Hax, should be in dllmain.c 00183 IntGdiAcquireSemaphore(ghsemShareDevLock); 00184 return TRUE; 00185 } 00186 00187 /*++ 00188 * @name DxEngUnlockShareSem 00189 * @implemented 00190 * 00191 * The function DxEngUnlockShareSem unlocks the struct of type ghsemShareDevLock. 00192 * 00193 * @return 00194 * This function returns TRUE no matter what. 00195 * 00196 * @remarks. 00197 * ReactOS specific: It is not in use yet? 00198 * 00199 *--*/ 00200 BOOLEAN 00201 APIENTRY 00202 DxEngUnlockShareSem() 00203 { 00204 DPRINT1("ReactX Calling : DxEngUnlockShareSem\n"); 00205 IntGdiReleaseSemaphore(ghsemShareDevLock); 00206 return TRUE; 00207 } 00208 00209 /*++ 00210 * @name DxEngSetDeviceGammaRamp 00211 * @implemented 00212 * 00213 * The function DxEngSetDeviceGammaRamp sets gamma ramp from dxg.sys 00214 00215 * @param HDEV hPDev 00216 * The hdev 00217 * 00218 * @param PGAMMARAMP Ramp 00219 * Value to change gamma ramp to. 00220 * 00221 * @param BOOL Test 00222 * Whether gamma should be tested. TRUE to test, FALSE to not test. 00223 * 00224 * @return 00225 *Returns TRUE for success, FALSE for failure. 00226 * 00227 * @remarks. 00228 * None 00229 * 00230 *--*/ 00231 BOOLEAN 00232 APIENTRY 00233 DxEngSetDeviceGammaRamp(HDEV hPDev, PGAMMARAMP Ramp, BOOL Test) 00234 { 00235 DPRINT1("ReactX Calling : DxEngSetDeviceGammaRamp\n"); 00236 return IntSetDeviceGammaRamp(hPDev, Ramp, Test); 00237 } 00238 00239 /*++ 00240 * @name DxEngGetHdevData 00241 * @implemented 00242 * 00243 * The function DxEngGetHdevData retrieves a value from the HDEV 00244 00245 * @param HDEV hPDev 00246 * The HDEV 00247 * 00248 * @param DXEGSHDEVDATA Type 00249 * The following typs are supported 00250 * Type Purpose 00251 * DxEGShDevData_Surface Retrieve pointer to Surface handle. 00252 * DxEGShDevData_hSpooler See if the device is a spooler driver. 00253 * DxEGShDevData_DitherFmt Retrieve the device iDitherFormat 00254 * DxEGShDevData_FxCaps Retrieve the device flGraphicsCaps 00255 * DxEGShDevData_FxCaps2 Retrieve the device flGraphicsCaps2 00256 * DxEGShDevData_DrvFuncs Retrieve the device DriverFunctions function table 00257 * DxEGShDevData_dhpdev Retrieve the device hPDev, the real DHPDEV 00258 * DxEGShDevData_eddg Retrieve the device pEDDgpl 00259 * DxEGShDevData_dd_nCount Retrieve the device DxDd_nCount 00260 * DxEGShDevData_dd_flags Retrieve the device DxDd_Flags 00261 * DxEGShDevData_disable See if the device pdev is disabled 00262 * DxEGShDevData_metadev See if the device pdev is a meta device 00263 * DxEGShDevData_display See if the device is the primary display driver 00264 * DxEGShDevData_Parent Retrieve the ppdevParent 00265 * DxEGShDevData_OpenRefs Retrieve the pdevOpenRefs counter 00266 * DxEGShDevData_palette See if the device RC_PALETTE is set 00267 * DxEGShDevData_ldev ATM we do not support the Loader Device driver structure 00268 * DxEGShDevData_GDev Retrieve the device pGraphicsDevice 00269 * DxEGShDevData_clonedev Retrieve the device PDEV_CLONE_DEVICE flag is set or not 00270 * 00271 * @return 00272 * Returns the data we requested 00273 * 00274 * @remarks. 00275 * ReactOS specific: Implementation is incomplete, I do not save the value into the hdev yet. 00276 * 00277 *--*/ 00278 DWORD_PTR 00279 APIENTRY 00280 DxEngGetHdevData(HDEV hDev, 00281 DXEGSHDEVDATA Type) 00282 { 00283 DWORD_PTR retVal = 0; 00284 PPDEVOBJ PDev = (PPDEVOBJ)hDev; 00285 00286 DPRINT1("ReactX Calling : DxEngGetHdevData DXEGSHDEVDATA : %ld\n", Type); 00287 00288 #if 1 00289 DPRINT1("HDEV hDev %08lx\n", hDev); 00290 #endif 00291 00292 switch ( Type ) 00293 { 00294 case DxEGShDevData_Surface: 00295 DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_Surface\n"); 00296 retVal = (DWORD_PTR) PDev->pSurface; // ptr to Surface handle. 00297 break; 00298 case DxEGShDevData_hSpooler: 00299 DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_hSpooler\n"); 00300 retVal = 0; // (DWORD_PTR) PDev->hSpooler; // If the device is a spooler driver. 00301 break; 00302 case DxEGShDevData_DitherFmt: 00303 DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_DitherFmt\n"); 00304 retVal = (DWORD_PTR) PDev->devinfo.iDitherFormat; 00305 break; 00306 case DxEGShDevData_FxCaps: 00307 DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_FxCaps\n"); 00308 retVal = (DWORD_PTR) PDev->devinfo.flGraphicsCaps; 00309 break; 00310 case DxEGShDevData_FxCaps2: 00311 DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_FxCaps2\n"); 00312 retVal = (DWORD_PTR) PDev->devinfo.flGraphicsCaps2; 00313 break; 00314 case DxEGShDevData_DrvFuncs: 00315 DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_DrvFuncs\n"); 00316 retVal = (DWORD_PTR) &PDev->DriverFunctions; 00317 break; 00318 case DxEGShDevData_dhpdev: 00319 DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_dhpdev\n"); 00320 retVal = (DWORD_PTR) PDev->dhpdev; // DHPDEV 00321 break; 00322 case DxEGShDevData_eddg: 00323 DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_eddg\n"); 00324 retVal = (DWORD_PTR) PDev->pEDDgpl; 00325 break; 00326 case DxEGShDevData_dd_nCount: 00327 DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_dd_nCount\n"); 00328 retVal = (DWORD_PTR) PDev->DxDd_nCount; 00329 break; 00330 case DxEGShDevData_dd_flags: 00331 DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_dd_flags\n"); 00332 retVal = (DWORD_PTR) PDev->DxDd_Flags; 00333 break; 00334 case DxEGShDevData_disable: 00335 DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_disable\n"); 00336 retVal = (DWORD_PTR) PDev->flFlags & PDEV_DISABLED; 00337 break; 00338 case DxEGShDevData_metadev: 00339 DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_metadev\n"); 00340 retVal = (DWORD_PTR) PDev->flFlags & PDEV_META_DEVICE; 00341 break; 00342 case DxEGShDevData_display: 00343 DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_display\n"); 00344 retVal = (DWORD_PTR) PDev->flFlags & PDEV_DISPLAY; 00345 break; 00346 case DxEGShDevData_Parent: 00347 DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_Parent\n"); 00348 retVal = (DWORD_PTR) PDev->ppdevParent; 00349 break; 00350 case DxEGShDevData_OpenRefs: 00351 DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_OpenRefs\n"); 00352 retVal = (DWORD_PTR) PDev->cPdevOpenRefs != 0; 00353 break; 00354 case DxEGShDevData_palette: 00355 DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_palette\n"); 00356 retVal = (DWORD_PTR) PDev->gdiinfo.flRaster & RC_PALETTE; 00357 break; 00358 case DxEGShDevData_ldev: 00359 DPRINT1("DxEGShDevData_ldev not supported yet\n"); 00360 // ATM we do not support the Loader Device driver structure. 00361 // retVal = (DWORD) PDev->pldev; 00362 break; 00363 case DxEGShDevData_GDev: 00364 DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_GDev\n"); 00365 retVal = (DWORD_PTR) PDev->pGraphicsDevice; // P"GRAPHICS_DEVICE" 00366 break; 00367 case DxEGShDevData_clonedev: 00368 DPRINT1("requested DXEGSHDEVDATA DxEGShDevData_clonedev\n"); 00369 retVal = (DWORD_PTR) PDev->flFlags & PDEV_CLONE_DEVICE; 00370 break; 00371 00372 default: 00373 break; 00374 } 00375 00376 #if 1 00377 DPRINT1("return value %08lx\n", retVal); 00378 #endif 00379 00380 return retVal; 00381 00382 } 00383 00384 /*++ 00385 * @name DxEngSetHdevData 00386 * @implemented 00387 * 00388 * The function DxEngSetHdevData sets a value in hdev 00389 00390 * @param HDEV hPDev 00391 * The hdev 00392 * 00393 * @param DXEGSHDEVDATA Type 00394 * Supports only DxEGShDevData_dd_nCount. It is an internal counter on how many times hdev has been locked and unlocked 00395 * 00396 * @param DWORD Data 00397 * The value to be saved to hdev's internal counter. 00398 * 00399 * @return 00400 * Returns TRUE for success, FALSE for failure 00401 * 00402 * @remarks. 00403 * none 00404 * 00405 *--*/ 00406 BOOLEAN 00407 APIENTRY 00408 DxEngSetHdevData(HDEV hDev, 00409 DXEGSHDEVDATA Type, 00410 DWORD_PTR Data) 00411 { 00412 BOOLEAN retVal = FALSE; // Default, no set. 00413 00414 DPRINT1("ReactX Calling : DxEngSetHdevData DXEGSHDEVDATA : %ld\n", Type); 00415 00416 if ( Type == DxEGShDevData_dd_nCount ) 00417 { 00418 ((PPDEVOBJ)hDev)->DxDd_nCount = Data; 00419 retVal = TRUE; // Set 00420 } 00421 return retVal; 00422 } 00423 00424 /*++ 00425 * @name DxEngGetDCState 00426 * @implemented 00427 * 00428 * The function DxEngGetDCState is capable of returning three 00429 * DC states depending on what value is passed in its second parameter: 00430 * 1. If the DC is full screen 00431 * 2. Get Complexity of visible region 00432 * 3. Get Driver hdev, which is ppdev 00433 * 00434 * @param HDC hdc 00435 * The DC handle 00436 * 00437 * @param DWORD type 00438 * value 1 = Is DC fullscreen 00439 * value 2 = Get Complexity of visible region. 00440 * value 3 = Get Driver hdev, which is a ppdev. 00441 * 00442 * @return 00443 * Return one of the type values 00444 * 00445 * @remarks. 00446 * We do not have type 2 implemented yet 00447 * 00448 *--*/ 00449 DWORD_PTR 00450 APIENTRY 00451 DxEngGetDCState(HDC hDC, 00452 DWORD type) 00453 { 00454 PDC pDC = DC_LockDc(hDC); 00455 DWORD_PTR retVal = 0; 00456 00457 DPRINT1("ReactX Calling : DxEngGetDCState type : %ld\n", type); 00458 00459 if (pDC) 00460 { 00461 switch (type) 00462 { 00463 case 1: 00464 retVal = (DWORD_PTR) pDC->fs & DC_FLAG_FULLSCREEN; 00465 break; 00466 case 2: 00467 UNIMPLEMENTED; 00468 break; 00469 case 3: 00470 { 00471 /* Return the HDEV of this DC. */ 00472 retVal = (DWORD_PTR) pDC->ppdev; 00473 break; 00474 } 00475 default: 00476 /* If a valid type is not found, zero is returned */ 00477 DPRINT1("Warning: did not find type %d\n",type); 00478 break; 00479 } 00480 DC_UnlockDc(pDC); 00481 } 00482 00483 return retVal; 00484 } 00485 00486 /*++ 00487 * @name DxEngIncDispUniq 00488 * @implemented 00489 * 00490 * The function DxEngIncDispUniq increments the DisplayUniqVisrgn counter from GDI shared memory. 00491 * 00492 * @return 00493 * This function returns TRUE no matter what. 00494 * 00495 * @remarks. 00496 * none 00497 * 00498 *--*/ 00499 BOOLEAN 00500 APIENTRY 00501 DxEngIncDispUniq() 00502 { 00503 DPRINT1("ReactX Calling : DxEngIncDispUniq \n"); 00504 00505 InterlockedIncrement((LONG*)&GdiHandleTable->flDeviceUniq); 00506 return TRUE; 00507 } 00508 00509 /*++ 00510 * @name DxEngLockHdev 00511 * @implemented 00512 * 00513 * The function DxEngLockHdev lock the internal PDEV 00514 * 00515 * @param HDEV type 00516 * it is a pointer to win32k internal pdev struct known as PPDEVOBJ 00517 00518 * @return 00519 * This function returns TRUE no matter what. 00520 * 00521 * @remarks. 00522 * none 00523 * 00524 *--*/ 00525 BOOLEAN 00526 APIENTRY 00527 DxEngLockHdev(HDEV hDev) 00528 { 00529 PPDEVOBJ ppdev = (PPDEVOBJ)hDev; 00530 PERESOURCE Resource; 00531 00532 DPRINT1("ReactX Calling : DxEngLockHdev \n"); 00533 00534 DPRINT1("hDev : 0x%08lx\n",hDev); 00535 00536 Resource = (PERESOURCE)ppdev->hsemDevLock; 00537 00538 if (Resource) 00539 { 00540 KeEnterCriticalRegion(); 00541 ExAcquireResourceExclusiveLite( Resource , TRUE); // Lock monitor. 00542 } 00543 return TRUE; 00544 } 00545 00546 /*++ 00547 * @name DxEngUnlockHdev 00548 * @implemented 00549 * 00550 * The function DxEngUnlockHdev unlock the internal PDEV 00551 * 00552 * @param HDEV type 00553 * it is a pointer to win32k internal pdev struct known as PPDEVOBJ 00554 00555 * @return 00556 * This function returns TRUE no matter what. 00557 * 00558 * @remarks. 00559 * none 00560 * 00561 *--*/ 00562 BOOLEAN 00563 APIENTRY 00564 DxEngUnlockHdev(HDEV hDev) 00565 { 00566 PPDEVOBJ ppdev = (PPDEVOBJ)hDev; 00567 PERESOURCE Resource = (PERESOURCE)ppdev->hsemDevLock; 00568 00569 DPRINT1("ReactX Calling : DxEngUnlockHdev \n"); 00570 00571 if (Resource) 00572 { 00573 ExReleaseResourceLite( Resource ); 00574 KeLeaveCriticalRegion(); 00575 } 00576 return TRUE; 00577 } 00578 00579 00580 /************************************************************************/ 00581 /* DxEngReferenceHdev */ 00582 /************************************************************************/ 00583 BOOLEAN 00584 APIENTRY 00585 DxEngReferenceHdev(HDEV hDev) 00586 { 00587 IntGdiReferencePdev((PPDEVOBJ) hDev); 00588 /* ALWAYS return true */ 00589 return TRUE; 00590 } 00591 00592 /************************************************************************/ 00593 /* DxEngNUIsTermSrv */ 00594 /************************************************************************/ 00595 00596 /* Notes: Check if terminal server got connections or not */ 00597 BOOLEAN 00598 APIENTRY 00599 DxEngNUIsTermSrv() 00600 { 00601 /* FIXME: ReactOS does not suport terminal server yet, we can not check if we got connections or not */ 00602 UNIMPLEMENTED; 00603 return FALSE; 00604 } 00605 00606 /************************************************************************/ 00607 /* DxEngRedrawDesktop */ 00608 /************************************************************************/ 00609 00610 /* Notes: it always returns TRUE, and it updates whole screen 00611 (redraws current desktop) */ 00612 BOOLEAN 00613 APIENTRY 00614 DxEngRedrawDesktop() 00615 { 00616 UserRedrawDesktop(); 00617 return TRUE; 00618 } 00619 00620 00621 ULONG gulVisRgnUniqueness; // Increase count everytime client region is updated. 00622 00623 /************************************************************************/ 00624 /* DxEngVisRgnUniq */ 00625 /************************************************************************/ 00626 /* Notes: returns the VisRgnUniq counter for win32k */ 00627 ULONG 00628 APIENTRY 00629 DxEngVisRgnUniq() 00630 { 00631 DPRINT1("ReactX Calling : DxEngVisRgnUniq \n"); 00632 00633 return gulVisRgnUniqueness; 00634 } 00635 00636 /************************************************************************/ 00637 /* DxEngEnumerateHdev */ 00638 /************************************************************************/ 00639 /* Enumerate all drivers in win32k */ 00640 HDEV * 00641 APIENTRY 00642 DxEngEnumerateHdev(HDEV *hdev) 00643 { 00644 /* FIXME: Enumerate all drivers in win32k */ 00645 UNIMPLEMENTED; 00646 return FALSE; 00647 } 00648 00649 /************************************************************************/ 00650 /* DxEngCreateMemoryDC */ 00651 /************************************************************************/ 00652 HDC 00653 APIENTRY 00654 DxEngCreateMemoryDC(HDEV hDev) 00655 { 00656 return IntGdiCreateDisplayDC(hDev, DC_TYPE_MEMORY, FALSE); 00657 } 00658 00659 /************************************************************************/ 00660 /* DxEngScreenAccessCheck */ 00661 /************************************************************************/ 00662 DWORD APIENTRY DxEngScreenAccessCheck() 00663 { 00664 UNIMPLEMENTED; 00665 00666 /* We're cheating here and telling dxg.sys it has always had permissions to access the screen */ 00667 return TRUE; 00668 } 00669 00670 /************************************************************************/ 00671 /* DxEngIsHdevLockedByCurrentThread */ 00672 /************************************************************************/ 00673 BOOLEAN 00674 APIENTRY 00675 DxEngIsHdevLockedByCurrentThread(HDEV hDev) 00676 { // Based on EngIsSemaphoreOwnedByCurrentThread w/o the Ex call. 00677 PERESOURCE pSem = (PERESOURCE)(((PPDEVOBJ)hDev)->hsemDevLock); 00678 return pSem->OwnerEntry.OwnerThread == (ERESOURCE_THREAD)PsGetCurrentThread(); 00679 } 00680 00681 00682 /************************************************************************/ 00683 /* DxEngUnreferenceHdev */ 00684 /************************************************************************/ 00685 BOOLEAN 00686 APIENTRY 00687 DxEngUnreferenceHdev(HDEV hDev) 00688 { 00689 IntGdiUnreferencePdev((PPDEVOBJ) hDev, 0); 00690 return TRUE; // Always true. 00691 } 00692 00693 /************************************************************************/ 00694 /* DxEngGetDesktopDC */ 00695 /************************************************************************/ 00696 HDC 00697 APIENTRY 00698 DxEngGetDesktopDC(ULONG DcType, BOOL EmptyDC, BOOL ValidatehWnd) 00699 { 00700 return UserGetDesktopDC(DcType, EmptyDC, ValidatehWnd); 00701 } 00702 00703 /************************************************************************/ 00704 /* DxEngDeleteDC */ 00705 /************************************************************************/ 00706 BOOLEAN 00707 APIENTRY 00708 DxEngDeleteDC(HDC hdc, BOOL Force) 00709 { 00710 return IntGdiDeleteDC(hdc, Force); 00711 } 00712 00713 /************************************************************************/ 00714 /* DxEngCleanDC */ 00715 /************************************************************************/ 00716 BOOLEAN 00717 APIENTRY 00718 DxEngCleanDC(HDC hdc) 00719 { 00720 return IntGdiCleanDC(hdc); 00721 } 00722 00723 /************************************************************************/ 00724 /* DxEngSetDCOwner */ 00725 /************************************************************************/ 00726 BOOL APIENTRY DxEngSetDCOwner(HGDIOBJ hObject, DWORD OwnerMask) 00727 { 00728 DPRINT1("ReactX Calling : DxEngSetDCOwner \n"); 00729 00730 return GreSetDCOwner(hObject, OwnerMask); 00731 } 00732 00733 /************************************************************************/ 00734 /* DxEngSetDCState */ 00735 /************************************************************************/ 00736 BOOLEAN 00737 APIENTRY 00738 DxEngSetDCState(HDC hDC, DWORD SetType, DWORD Set) 00739 { 00740 BOOLEAN Ret = FALSE; 00741 PDC pDC = DC_LockDc(hDC); 00742 00743 if (pDC) 00744 { 00745 if (SetType == 1) 00746 { 00747 if ( Set ) 00748 pDC->fs |= DC_FLAG_FULLSCREEN; 00749 else 00750 pDC->fs &= ~DC_FLAG_FULLSCREEN; 00751 Ret = TRUE; 00752 } 00753 DC_UnlockDc(pDC); 00754 return Ret; // Everything else returns FALSE. 00755 } 00756 return Ret; 00757 } 00758 00759 /************************************************************************/ 00760 /* DxEngSelectBitmap */ 00761 /************************************************************************/ 00762 DWORD APIENTRY DxEngSelectBitmap(DWORD x1, DWORD x2) 00763 { 00764 UNIMPLEMENTED; 00765 return FALSE; 00766 } 00767 00768 /************************************************************************/ 00769 /* DxEngSetBitmapOwner */ 00770 /************************************************************************/ 00771 DWORD APIENTRY DxEngSetBitmapOwner(DWORD x1, DWORD x2) 00772 { 00773 UNIMPLEMENTED; 00774 return FALSE; 00775 } 00776 00777 /************************************************************************/ 00778 /* DxEngDeleteSurface */ 00779 /************************************************************************/ 00780 DWORD APIENTRY DxEngDeleteSurface(DWORD x1) 00781 { 00782 UNIMPLEMENTED; 00783 return FALSE; 00784 } 00785 00786 /************************************************************************/ 00787 /* DxEngGetSurfaceData */ 00788 /************************************************************************/ 00789 DWORD APIENTRY DxEngGetSurfaceData(DWORD x1, DWORD x2) 00790 { 00791 UNIMPLEMENTED; 00792 return FALSE; 00793 } 00794 00795 /************************************************************************/ 00796 /* DxEngAltLockSurface */ 00797 /************************************************************************/ 00798 DWORD APIENTRY DxEngAltLockSurface(DWORD x1) 00799 { 00800 UNIMPLEMENTED; 00801 return FALSE; 00802 } 00803 00804 /************************************************************************/ 00805 /* DxEngUploadPaletteEntryToSurface */ 00806 /************************************************************************/ 00807 DWORD APIENTRY DxEngUploadPaletteEntryToSurface(DWORD x1, DWORD x2,DWORD x3, DWORD x4) 00808 { 00809 UNIMPLEMENTED; 00810 return FALSE; 00811 } 00812 00813 /************************************************************************/ 00814 /* DxEngMarkSurfaceAsDirectDraw */ 00815 /************************************************************************/ 00816 DWORD APIENTRY DxEngMarkSurfaceAsDirectDraw(DWORD x1, DWORD x2) 00817 { 00818 UNIMPLEMENTED; 00819 return FALSE; 00820 } 00821 00822 /************************************************************************/ 00823 /* DxEngSelectPaletteToSurface */ 00824 /************************************************************************/ 00825 DWORD APIENTRY DxEngSelectPaletteToSurface(DWORD x1, DWORD x2) 00826 { 00827 UNIMPLEMENTED; 00828 return FALSE; 00829 } 00830 00831 /************************************************************************/ 00832 /* DxEngSyncPaletteTableWithDevice */ 00833 /************************************************************************/ 00834 DWORD APIENTRY DxEngSyncPaletteTableWithDevice(DWORD x1, DWORD x2) 00835 { 00836 UNIMPLEMENTED; 00837 return FALSE; 00838 } 00839 00840 /************************************************************************/ 00841 /* DxEngSetPaletteState */ 00842 /************************************************************************/ 00843 DWORD APIENTRY DxEngSetPaletteState(DWORD x1, DWORD x2, DWORD x3) 00844 { 00845 UNIMPLEMENTED; 00846 return FALSE; 00847 } 00848 00849 /************************************************************************/ 00850 /* DxEngGetRedirectionBitmap */ 00851 /************************************************************************/ 00852 DWORD 00853 APIENTRY 00854 DxEngGetRedirectionBitmap(DWORD x1) 00855 { 00856 return FALSE; // Normal return. 00857 } 00858 00859 /************************************************************************/ 00860 /* DxEngLoadImage */ 00861 /************************************************************************/ 00862 DWORD APIENTRY DxEngLoadImage(DWORD x1,DWORD x2) 00863 { 00864 UNIMPLEMENTED; 00865 return FALSE; 00866 } 00867 00868 /************************************************************************/ 00869 /* DxEngSpTearDownSprites */ 00870 /************************************************************************/ 00871 DWORD APIENTRY DxEngSpTearDownSprites(DWORD x1, DWORD x2, DWORD x3) 00872 { 00873 UNIMPLEMENTED; 00874 return FALSE; 00875 } 00876 00877 /************************************************************************/ 00878 /* DxEngSpUnTearDownSprites */ 00879 /************************************************************************/ 00880 DWORD APIENTRY DxEngSpUnTearDownSprites(DWORD x1, DWORD x2, DWORD x3) 00881 { 00882 UNIMPLEMENTED; 00883 return FALSE; 00884 } 00885 00886 /************************************************************************/ 00887 /* DxEngSpSpritesVisible */ 00888 /************************************************************************/ 00889 DWORD APIENTRY DxEngSpSpritesVisible(DWORD x1) 00890 { 00891 UNIMPLEMENTED; 00892 return FALSE; 00893 } Generated on Sun May 27 2012 04:38:29 for ReactOS by
1.7.6.1
|