Difference between revisions of "Win32k.sys"

From ReactOS Wiki
Jump to: navigation, search
m
 
(12 intermediate revisions by one other user not shown)
Line 1: Line 1:
'''See [[Arwinss]] page for the alternative win32 subsystem implementation effort.'''
+
{{stub}}
 +
'''Kernel-mode subsystem server (Win32K)'''
  
'''See also [[Win32k_design_guideline]]'''
+
The Graphics Device Interface Provides functionality for outputting graphical content to monitors, printers and other output devices. It resides in gdi.exe on 16-bit Windows, and [[gdi32.dll]] on 32-bit Windows in user-mode. Kernel-mode GDI support is provided by <code>win32k.sys</code> which communicates directly with the graphics driver.
  
http://en.wikipedia.org/wiki/Windows_API#Overview
+
{{Code history|subsystems/win32/win32k}}
  
The Graphics Device Interface Provides functionality for outputting graphical content to monitors, printers and other output devices. It resides in gdi.exe on 16-bit Windows, and gdi32.dll on 32-bit Windows in user-mode. Kernel-mode GDI support is provided by '''win32k.sys''' which communicates directly with the graphics driver.
+
== See also ==
 +
* [[Arwinss]] page for the alternative win32 subsystem implementation effort.
 +
* [[Win32k design guideline]]
 +
* [[Csrss.exe|User-mode subsystem server]]
 +
* [[wikipedia:Windows API#Overview]]
  
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/?view=log
+
[[Category:Development]]
 
+
[[Category:Drivers]]
[[ChangeLog-0.0.21]]
+
[[Category:System Services]]
* Win32k: Initial implementation of regions and clipping
 
* Win32k: Object cleanup on process deletion [[Eugene Ingerman]]  
 
* Win32k: Initial window painting code, bitmap loading [[David Welch]]
 
* Win32k: Callbacks and messaging improvements [[David Welch]]  
 
* Win32k: Mouse messaging [[David Welch]]
 
* Win32k: DIB Fixes [[Jason Filby]]
 
 
 
[[ChangeLog-0.1.0]]
 
* Win32k: Rewrote gdi (Engxxx) objects,
 
* Made GDI object locking exclusive,
 
* Added functions for locking multiple objects,
 
* Color translation now works properly,
 
* Implemented several DC functions ([[Eugene Ingerman]])
 
* Win32k: Initial scrollbar code ([[Jason Filby]])
 
 
 
[[ChangeLog-0.1.1]]
 
* Win32k: Support for VMware video drivers ([[Gé van Geldorp]])
 
* Win32k: VGA Driver loaded from registry key ([[Gé van Geldorp]])
 
* Win32k: Support for MS VGA driver under VMware ([[Gé van Geldorp]])
 
* Win32k: Add support for 8-bit and 32-bit displays ([[Gé van Geldorp]])
 
* Win32k: Switch back to the command prompt when pressing Close button ([[Gé van Geldorp]])
 
* Win32k: Implemented several window positioning functions ([[Richard Campbell]])
 
* Win32k: InvalidateRgn, InvalidateRect, PolyLine ([[Tim Jobling]])
 
* Win32k: Added support for allocating a DCE for each window ([[Richard Campbell]])
 
 
 
[[ChangeLog-0.1.4]]
 
 
 
* Scrollbar thumbs ([[Thomas Weidenmueller]])
 
* Implemented several scrollbar functions ([[Thomas Weidenmueller]])
 
* Improved mouse (buttons) handling ([[Thomas Weidenmueller]])
 
* RoundRect ([[Royce Mitchell III]])
 
* Implemented partial ReleaseDC() ([[Gé van Geldorp]])
 
 
 
[[ChangeLog-0.1.5]]
 
 
 
* Fix 1bbp blits ([[Filip Navara]])
 
* Implement GUI consoles ([[Gé van Geldorp]])
 
* Resolution and screen depth change support for VMWare ([[Gé van Geldorp]])
 
* DirectDraw groundwork ([[Peter Bajusz]])
 
 
 
[[ChangeLog-0.2.0]]
 
* Window activation/focus ([[Filip Navara]], [[Gé van Geldorp]])
 
* StretchDIBits implementation ([[Filip Navara]])
 
* Initial implementation of message hooks ([[Gé van Geldorp]])
 
* Support for the FR_PRIVATE and FR_NOT_ENUM flags for AddFontResourceEx ([[Thomas Weidenmueller]])
 
* Implement real locking for GDIOBJ objects ([[Gé van Geldorp]])
 
* Stretchblitting 32->32, 8->8 bpp implemented ([[Aleksey Bragin]])
 
* GetMessageExtraInfo and SetMessageExtraInfo implementations ([[Thomas Weidenmueller]])
 
* Initial implementation of maximize/restore and minimize buttons for windows ([[Thomas Weidenmueller]])
 
* Implemented WM_SETCURSOR messages ([[Thomas Weidenmueller]])
 
* Serialize access to display driver ([[Gé van Geldorp]])
 
* Implemented SetCursor and rewrote some cursor/icon routines ([[Thomas Weidenmueller]])
 
* Support for RASTERCAPS in NtGdiGetDeviceCaps ([[Filip Navara]])
 
* RLE4/8 Bitmap Compression support (Jonathan Wilson)
 
* LR_SHARED flag support for LoadIcon and LoadCursor ([[Thomas Weidenmueller]])
 
* Rewritten painting implementation ([[Filip Navara]])
 
* Font smoothing implementation ([[Thomas Weidenmueller]])
 
* GetGUIThreadInfo implementation ([[Thomas Weidenmueller]])
 
* EnumProps, EnumPropsEx implementations ([[Thomas Weidenmueller]])
 
* Marshall messages across process boundaries (not complete yet) and generalize message sending from kernel ([[Gé van Geldorp]])
 
* Initial NtGdiStretchBlt implementation ([[Aleksey Bragin]])
 
* Message queue fixes ([[Thomas Weidenmueller]], [[Mike Nordell]])
 
* Palette fixes ([[Filip Navara]])
 
* Move desktop window proc from WIN32K to CSRSS ([[Gé van Geldorp]])
 
 
 
[[ChangeLog-0.2.1]]
 
* Fixed window activation bug (GA_ROOTOWNER -> GA_ROOT) ([[Filip Navara]])
 
* Preparing for the win32k emulated mouse cursor support ([[Filip Navara]])
 
* Implemented MenuItemFromPoint() ([[Thomas Weidenmueller]])
 
* Fixed hittest-code so it returns HTMENU properly ([[Thomas Weidenmueller]])
 
* Implemented multiline menu bars ([[Thomas Weidenmueller]])
 
* Release mutex on error exit ([[Gé van Geldorp]])
 
* GetAncestor() doesn't set a last-error if the handle passed is the desktop window, it just returns NULL ([[Thomas Weidenmueller]])
 
* Don't activate disabled windows ([[Thomas Weidenmueller]])
 
* Release window object when destroying window children and skip only children that have a different parent window ([[Thomas Weidenmueller]])
 
* Activate modal dialog when clicking on a disabled window ([[Thomas Weidenmueller]])
 
* Fix cross-thread WM_SETTEXT messages ([[Gé van Geldorp]])
 
* Dynamically load fonts on startup
 
* Seperated the Caption font and the icon title font ([[Richard Campbell]])
 
* Fixed missing release of window objects ([[Thomas Weidenmueller]])
 
* Resolve two GDI handle leaks ([[Filip Navara]])
 
* Faster GDI handle allocation strategy ([[Filip Navara]])
 
* Update DC when moving a window. Fixes bug #5 ([[Gé van Geldorp]], [[Filip Navara]])
 
* Handle NULL window as special case when computing visible region for GetDC. Fixes bug #59 ([[Gé van Geldorp]])
 
* Fix NtUserScroll[WindowEx/DC] ([[Filip Navara]])
 
* Implemented ChildWindowFromPoint(Ex) ([[Richard Campbell]])
 
* Rewritten NtGdiEllipse with improved and optimized algorithm ([[Filip Navara]])
 
* Use window thread instead of current thread to obtain desktop ([[Gé van Geldorp]])
 
* Fix race condition when one thread changes the update region of a window and another thread retrieves a paint message for that window ([[Gé van Geldorp]])
 
* Don't callback from kernel to usermode if the thread is exiting; fixes bug #83 ([[Gé van Geldorp]])
 
* Clip region to be bitblt'ed against the valid source region. Fixes bug #152 ([[Gé van Geldorp]])
 
* Fixed software mouse pointer handling to work correctly with MouseSafety* routines ([[Filip Navara]])
 
* Fixed algorithm for 4BPP bitblts with ROP != SRCCOPY ([[Filip Navara]])
 
* Reclaculate window client size in NtUserSetMenu even if the window isn't visible ([[Filip Navara]])
 
* Properly move child windows in NtUserSetWindowPos ([[Filip Navara]])
 
* Very basic implementation of ExtEscape ([[Filip Navara]])
 
* Fix race condition resulting in WM_xBUTTONUP sometimes being delivered before WM_xBUTTONDOWN ([[Gé van Geldorp]])
 
* Fix double click ([[Gé van Geldorp]])
 
* Implemented horizontal and vertical gradients in GradientFill() ([[Thomas Weidenmueller]])
 
* Use GradientFill() for gradient captions ([[Thomas Weidenmueller]])
 
* Don't copy from/to outside the visible screen region ([[Gé van Geldorp]])
 
* Return more correct error codes from NtUserRegisterClassExWOW ([[Filip Navara]])
 
* Delete atom in NtUserUnregisterClass ([[Filip Navara]])
 
* Corrected DC locking in NtGdiSetDIBColorTable ([[Filip Navara]])
 
* Check region handles in NtGdiPaintRgn ([[Filip Navara]])
 
* Added EngGetCurrentProcessId() and EngGetCurrentThreadId() ([[Thomas Weidenmueller]])
 
* Fixed clipping code in NtGdiGetPixel ([[James Pritchard]])
 
* Fix distortion by StretchBlt ([[Filip Navara]], [[Waldo Alvarez Cañizares]])
 
* Implement menu handling ([[Gé van Geldorp]])
 
* Top level windows have menus, child windows have IDs ([[Gé van Geldorp]])
 
* SPI_GETNONCLIENTMETRICS and SPI_GETICONTITLELOGFONT now load their settings from the registry ([[Richard Campbell]])
 
* Fixed WindowFromPoint() to search backwards ([[Thomas Weidenmueller]])
 
* Fixed 8 8 bpp, 1616 bpp and 32 32 bpp stretchblitting ([[Waldo Alvarez Cañizares]])
 
* Added pool tags for better debugging ([[Thomas Weidenmueller]])
 
* Fixed a few race conditions in painting code ([[Filip Navara]])
 
* Fix double release of fast mutex ([[Gé van Geldorp]])
 
* Fixed releasing of window object in IntValidateParent and NtUserRedrawWindow ([[Thomas Weidenmueller]])
 
* Fixed potencial deadlock in IntPaintWindows ([[Thomas Weidenmueller]])
 
* Modifed DceUpdateVisRgn to correctly handle situations when DceGetVisRgn returns NULL ([[Filip Navara]])
 
* Fixed the alternative version of VIS_ComputeVisibleRegion and made it the one and only, because it's smaller and faster than the original one ([[Filip Navara]])
 
* Prevent double unlinking of window ([[Filip Navara]])
 
* Implement keyboard navigation for menus ([[Gé van Geldorp]])
 
* Fix mono -> color bitblts ([[Gé van Geldorp]])
 
* Fixed WindowFromPoint() to send WM_NCHITTEST messages to windows that belong to the current process ([[Thomas Weidenmueller]])
 
* Fix bug #129 ([[Filip Navara]])
 
* Fixed bug 167 ([[Art Yerkes]])
 
 
 
[[ChangeLog-0.2.2]]
 
*Fix race condition resulting in WM_xBUTTONUP sometimes being broken ([[Ge van Geldorp]])
 
*Don't copy from/to outside the visible screen region ([[Ge van Geldorp]])
 
*Implement menu handling ([[Ge van Geldorp]])
 
*Top level windows have menus, child windows have IDs ([[Ge van Geldorp]])
 
*Fix double release of fast mutex ([[Ge van Geldorp]])
 
*Implement keyboard navigation for menus ([[Ge van Geldorp]])
 
*Fix race condition ([[Ge van Geldorp]])
 
*Recursively search sub menus when a command id is specified ([[Ge van Geldorp]])
 
*Fixed mono -> color bitblts ([[Ge van Geldorp]])
 
*Correct menu bars for windows not originating at top-left of screen ([[Ge van Geldorp]])
 
*Mark update regions as global objects ([[Ge van Geldorp]])
 
*Delay unlinking of windows until after all messages have been sent ([[Ge van Geldorp]])
 
*Translate pixel value from internal pixel format to RGB; fixes bug #251 ([[Ge van Geldorp]])
 
*Return a valid (empty) visible region when the window is not visible ([[Ge van Geldorp]])
 
*Handle 1bpp DIBs in NtGdiCreateDIBitmap ([[Ge van Geldorp]])
 
*Implement EnumFontFamilies(Ex)A/W() and TranslateCharsetInfo() ([[Ge van Geldorp]])
 
*Implement GetCharWidthA/W() ([[Ge van Geldorp]])
 
*Implement GetUpdateRect() and harden NtUserGetUpdateRect() ([[Ge van Geldorp]])
 
*Implement GetObjectA/W() for fonts ([[Ge van Geldorp]])
 
*Prevent deletion of system-owned objects ([[Ge van Geldorp]])
 
*Fix filling of MENUITEMINFO in InsertMenu() ([[Ge van Geldorp]])
 
*Implement scrollbar controls ([[Ge van Geldorp]])
 
*Simple font substitution and matching ([[Ge van Geldorp]])
 
*Implement TOPMOST windows ([[Ge van Geldorp]])
 
*Remove window timers when window is destroyed ([[Ge van Geldorp]])
 
*Implement 32bpp -> 32bpp copy with color translation ([[Ge van Geldorp]])
 
*Use lookaside lists for better performance ([[Ge van Geldorp]])
 
*Special case for faster one rectangle regions ([[Ge van Geldorp]])
 
*Honour font spacing requested by caller ([[Ge van Geldorp]])
 
*Fix scanline increment for 32bpp stretch blts ([[Ge van Geldorp]])
 
*andle regions in SelectObject() ([[Ge van Geldorp]])
 
*Pass args to MsqSendMessage in correct order ([[Ge van Geldorp]])
 
*Fix for mouse detection problem ([[Filip Navara]])
 
*Fixed algorithm for 4BPP bitblts with ROP != SRCCOPY ([[Filip Navara]])
 
*Reclaculate window client size in NtUserSetMenu even if the window isn't visible ([[Filip Navara]])
 
*Fixed clipping bug in TransparentBlt() ([[Filip Navara]])
 
*Return more correct error codes from NtUserRegisterClassExWOW ([[Filip Navara]])
 
*Check region handles in NtGdiPaintRgn ([[Filip Navara]])
 
*Fixed releasing of window object in IntValidateParent and NtUserRedrawWindow ([[Filip Navara]])
 
*Fixed deadlock in IntFindWindowToRepaint ([[Filip Navara]])
 
*Modifed DceUpdateVisRgn for performance enhancment ([[Filip Navara]])
 
*Fixed couple of mutex locking issues ([[Filip Navara]])
 
*Fixed GDI handle leak ([[Filip Navara]])
 
*Fix for race condition that should never happen ([[Filip Navara]])
 
*Implemented EngModifySurface, DRIVER_FindMPDriver ([[Filip Navara]])
 
*Fixed NtGdiCreateCompatibleBitmap fix to use correct Bits ([[Filip Navara]])
 
*Minor corrections to emulated mouse pointer handling ([[Filip Navara]])
 
*Fixed few bugs related to SUROBJ initialization ([[Filip Navara]])
 
*Unlock surface in error case of EngModifySurface ([[Filip Navara]])
 
*Fixed non-SRCCOPY BitBlts to 1bpp surfaces ([[Filip Navara]])
 
*Fixed BitBlts from 4bpp surfaces ([[Filip Navara]])
 
*Fixed handling of WM_GETICON message ([[Filip Navara]])
 
*Fixed window-less timers ([[Filip Navara]])
 
*Changed the internal brush object to be ([[almost]]) Win32k compatible ([[Filip Navara]])
 
*Fixed 8bpp StretchBlt ([[Filip Navara]])
 
*Fixed 4bpp to 4bpp non-SRCCOPY blits ([[Filip Navara]])
 
*Fixed 1bpp to 1bpp non-SRCCOPY blits to work when the destination doesn't start at exact byte ([[Filip Navara]])
 
*Reenabled 55AA brush for scrollbar ([[Filip Navara]])
 
*Fixed BITMAPOBJ_GetWidthBits to do WORD alignment and not DWORD ([[Filip Navara]])
 
*Implemented TransparentBlt() on 32bpp surfaces ([[Filip Navara]])
 
*Fixed bugs in 1bpp code causing memory corruption ([[Filip Navara]])
 
*Lock the surface even for GDI blits in IntEngBitBlt ([[Filip Navara]])
 
*Fixed order of bits in a byte for pattern brushes ([[Filip Navara]])
 
*Implement brush origin for 4bpp blits ([[Filip Navara]])
 
*Implemented horizontal and vertical gradients in GradientFill() ([[Thomas Weidenmueller]])
 
*Use GradientFill() for gradient captions ([[Thomas Weidenmueller]])
 
*Basic implementation of filling gradient triangles in GradientFill() ([[Thomas Weidenmueller]])
 
*Added EngGetCurrentProcessId() and EngGetCurrentThreadId() ([[Thomas Weidenmueller]])
 
*Fixed WindowFromPoint() to search backwards ([[Thomas Weidenmueller]])
 
*Added pool tags for better debugging ([[Thomas Weidenmueller]])
 
*Fixed WindowFromPoint() to send WM_NCHITTEST messages appropriately ([[Thomas Weidenmueller]])
 
*Fixed crashes that could be caused by the thread cleanup routine when destroying ([[Thomas Weidenmueller]])
 
*Fixed missing window dereference ([[Thomas Weidenmueller]])
 
*Don't lock the screen dc if it's NULL ([[Thomas Weidenmueller]])
 
*Don't hold more than one WM_MOUSEMOVE message at the same time in the message queue ([[Thomas Weidenmueller]])
 
*Added ability to cache gdi objects ([[Thomas Weidenmueller]])
 
*First attempt to implement SendMessageTimeout() ([[Thomas Weidenmueller]])
 
*Simplified calls to MsqPostMessage() ([[Thomas Weidenmueller]])
 
*Count all gdi handles and serialize removing gdi handles from the table. ([[Thomas Weidenmueller]])
 
*Fixed wrong rendering of clipped characters ([[Thomas Weidenmueller]])
 
*Fixed a couple of dead-locks in the region code ([[Thomas Weidenmueller]])
 
*Implemented SetWindowRgn() and added support for window regions ([[Thomas Weidenmueller]])
 
*Don't use the window region when minimized ([[Thomas Weidenmueller]])
 
*Implemented GetWindowRgn() and GetWindowRgnBox() ([[Thomas Weidenmueller]])
 
*Fixed accessing memory that has already been freed ([[Thomas Weidenmueller]])
 
*Fixed a crash caused by removing a message twice from the queue ([[Thomas Weidenmueller]])
 
*Partly ([[not working]]) implementation of TransparentBlt() ([[Thomas Weidenmueller]])
 
*Fixed NtUserGetAncestor() ([[Thomas Weidenmueller]])
 
*Implemented GetWindowInfo() ([[Thomas Weidenmueller]])
 
*Implemented GetWindowModuleFileName() ([[Thomas Weidenmueller]])
 
*Partially implemented IsHungAppWindow() ([[Thomas Weidenmueller]])
 
*Fixed a crash caused by requesting a large number of extra class space ([[Thomas Weidenmueller]])
 
*Made the DCE list thread-safe ([[Thomas Weidenmueller]])
 
*Implemented TransparentBlt() on 8bpp, 16bpp and 24bpp surfaces ([[Thomas Weidenmueller]])
 
*Fixed missing dereferences of threads ([[Thomas Weidenmueller]])
 
*Fixed clipping code in NtGdiGetPixel ([[James Pritchard]])
 
*Fix bug in NtGdiExtEscape not checking for NULL == DriverFunctions.Escape ([[Royce Mitchell III]])
 
*If nWidth or nHeight is zero, CreateBitmap returns the handle to a 1by 1-pixel ([[Royce Mitchell III]])
 
*Fix RoundRect compatibility issue ([[Royce Mitchell III and MT]])
 
*NtGdiPolygon simplification ([[Royce Mitchell III]])
 
*Performance improvement for 1bpp dib -> 1bpp dib blitting ([[Royce Mitchell III]])
 
*Change to NtGdiGetPixel to handle device DCs ([[Royce Mitchell III]])
 
*Implement SetPixelV ([[Royce Mitchell III]])
 
*Implemented event services ([[David Welch]])
 
*Added an implementation of LdrFindImageProcAddress ([[David Welch]])
 
*Return any error code from the miniport device i/o control to the display driver; fixes crash when running with ATI drivers ([[David Welch]])
 
*Fixed 8 8 bpp and 32 32 bpp StretchBlt ([[Waldo Alvarez Ca񩺡res]])
 
*Fixed IntGdiExtEscape ([[Anich Gregor]])
 
*Initialized the win32k timer as SynchronizationTimer ([[Hartmut Birr]])
 

Latest revision as of 07:57, 15 May 2014

The page Win32k.sys is a short article on something that should have a lot more information written on it.
If you know anything else about it, you are STRONGLY encouraged to add the information in. If you are unsure of proper formatting or style, add it to the talk page or this page itself as you think best and others will help.


Kernel-mode subsystem server (Win32K)

The Graphics Device Interface Provides functionality for outputting graphical content to monitors, printers and other output devices. It resides in gdi.exe on 16-bit Windows, and gdi32.dll on 32-bit Windows in user-mode. Kernel-mode GDI support is provided by win32k.sys which communicates directly with the graphics driver.

Commit history (Source code can be found in: /reactos/subsystems/win32/win32k)

See also