Win32k.sys
Revision as of 03:00, 5 March 2012 by BrentNewland (talk | contribs)
See Arwinss page for the alternative win32 subsystem implementation effort.
See also Win32k_design_guideline
http://en.wikipedia.org/wiki/Windows_API#Overview
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.
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/?view=log
- 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
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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 Cares)
- Fixed IntGdiExtEscape (Anich Gregor)
- Initialized the win32k timer as SynchronizationTimer (Hartmut Birr)