Difference between revisions of "Win32k.sys"

From ReactOS Wiki
Jump to: navigation, search
m
 
(5 intermediate revisions by one other user not shown)
Line 1: Line 1:
[[:Category:System_Services]]
+
{{stub}}
 +
'''Kernel-mode subsystem server (Win32K)'''
  
'''See [[Arwinss]] page for the alternative win32 subsystem implementation effort.'''
+
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.
  
'''See also [[Win32k_design_guideline]]'''
+
{{Code history|subsystems/win32/win32k}}
  
Kernel-mode subsystem server (Win32K)
+
== See also ==
 +
* [[Arwinss]] page for the alternative win32 subsystem implementation effort.
 +
* [[Win32k design guideline]]
 +
* [[Csrss.exe|User-mode subsystem server]]
 +
* [[wikipedia:Windows API#Overview]]
  
See also [[Csrss.exe|User-mode subsystem server]]
+
[[Category:Development]]
 
+
[[Category:Drivers]]
http://en.wikipedia.org/wiki/Windows_API#Overview
+
[[Category:System Services]]
 
 
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
 
 
 
[[ChangeLog-0.0.21]]
 
* 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]])
 
 
 
[[ChangeLog-0.2.3]]
 
 
 
*Fixed the access to an uninitialized variable in IntCreateClass ([[Hartmut Birr]])
 
*Convert between RGBQUAD and PALETTEENTRY ([[Ge van Geldorp]])
 
*Handle RLE bottom-up dibs ([[Ge van Geldorp]])
 
*Fixed NtUserDestroyWindow to correctly destroy owned windows. Fixes bugs #342 and #350 ([[Filip Navara]])
 
*Activate window on non-client click too ([[Ge van Geldorp]])
 
*Don't activate invisible windows ([[Ge van Geldorp]])
 
*Prefer non-topmost windows when activating another window ([[Ge van Geldorp]])
 
*Call the "load default cursor" callback. Fixes bug #358 ([[Filip Navara]])
 
*Allocate memory from PagedPool instead of NonPagedPool where possible ([[Filip Navara]])
 
*Backported font initialization code with fixed memory leaks from my unfinished font handling rewrite patch ([[Filip Navara]])
 
*Don't change DC origin in NtGdiOffsetViewportOrgEx ([[Filip Navara]])
 
*Update transformation matrix in NtGdiSetViewportExtEx, NtGdiSetWindowExtEx, NtGdiSetWindowOrgEx, NtGdiOffsetWindowOrgEx ([[Filip Navara]])
 
*When creating new DC initialize the Viewport/Window extensions ([[Filip Navara]])
 
*Transform logical coordinates to device ones in NtGdiExtTextOut and NtGdiLineTo ([[Filip Navara]])
 
*Marshall WM_CREATE/WM_NCCREATE messages ([[Ge van Geldorp]])
 
*Set MaximumLength to size of allocated memory ([[Ge van Geldorp]])
 
*Update trasformation matrix in SetViewportOrgEx ([[Filip Navara]])
 
*Fixed NtUserDestroyWindow to correctly destroy owned windows. Fixes bugs #342 and #350 ([[Filip Navara]])
 
*Little GDI speed improvements ([[Thomas Weidenmueller]])
 
*Fixed missing class dereferencings and store a list of windows in the class object ([[Thomas Weidenmueller]])
 
*Eliminate unnecessary multiplications in the inner loops of *DIB_1BPP_BitBltSrcCopy_From1BPP ([[Royce Mitchel III]])
 
*Fixed unicode string copying bug in NtGdiAddFontResource ([[Filip Navara]])
 
*Prepend "\\??\" to the file name in NtGdiAddFontResource ([[Filip Navara]])
 
*Prevent unnecessary code where count is zero in NtGdiExtTextOut ([[Jason Filby]])
 
*Work on clipboard ([[Pablo Borobia]])
 
*Support for window-less hotkeys ([[Filip Navara]])
 
*Send hotkeys even if there's no focus window ([[Filip Navara]])
 
*Fixed returning uninitialized variable in NtGdiSelectVisRgn() and NtGdiExtSelectClipRgn() ([[Thomas Weidenmueller]])
 
*Prevent memory leaks if callbacks to usermode never return ([[Thomas Weidenmueller]])
 
*Disable NtGdiRealizePalette. It has a lot of bugs and really doesn't do any of the work it should do ([[Filip Navara]])
 
*Safe parameter handling for PolyPolygonRgn() and PolygonRgn() ([[Thomas Weidenmueller]])
 
*Fixed memory leak ([[Thomas Weidenmueller]])
 
*Ported CreatePolyPolygonRgn() and CreatePolygonRgn() from wine ([[Thomas Weidenmueller]])
 
*Use FASTCALL calling convention for internal routines ([[Thomas Weidenmueller]])
 
*Attempt to fix handling of timed out sending of messages to be thread-safe ([[Thomas Weidenmueller]])
 
*Fixed RegisterWindowMessage() ([[Thomas Weidenmueller]])
 
*Set proper lasterror code in RegisterWindowMessage() ([[Thomas Weidenmueller]])
 
*Fixed message timeout crash, caused by inserting dispatching messages into the wrong dispatching list ([[Thomas Weidenmueller]])
 
*Implemented DisableProcessWindowsGhosting() (window ghosting is not yet implemented though) ([[Thomas Weidenmueller]])
 
*Fixed cut & paste error in NtGdiGetDIBColorTable and NtGdiSetDIBColorTable ([[Filip Navara]])
 
*Fixed implementation of DIB_MapPaletteColors. It shoud take palette from DC and the index array is of type PUSHORT, not PULONG ([[Filip Navara]])
 
*Eng memory test ([[Jason Filby]])
 
*Replaced UnsafeIntCreateRectRgnIndirect() and UnsafeIntUnionRectWithRgn() with macros to directly call the appropriate function ([[Thomas Weidenmueller]])
 
*Fixed dereferencing bug ([[Thomas Weidenmueller]])
 
*Fixed missing dereferencing of threads in PostThreadMessage() ([[Thomas Weidenmueller]])
 
*Window Class handling fixes ([[Filip Navara]])
 
*Don't use object that's already unlocked ([[Filip Navara]])
 
*Fixed implementation of NtGdiGetNearestColor ([[Filip Navara]])
 
*Changed cursors/icons to use the window station handle table ([[Thomas Weidenmueller]])
 
*Implement complex clipping for StretchBlt ([[Ge van Geldorp]])
 
*Only split update region into client and non-client parts if there actually is something to split ([[Ge van Geldorp]])
 
*New implementation of GetDIBColorTable and SetDIBColorTable ([[Filip Navara]])
 
*Use NtGdiBitBlt in NtGdiStretchDIBits if source and destination dimensions are equal ([[Filip Navara]])
 
*Don't modify Msg's pt for mouse messages. It's supposed to be always in screen coordinates, not it client coordinates ([[Filip Navara]])
 
*Check for the WS_CLIPSIBLINGS flag on the correct window ([[Filip Navara]])
 
*Modify DPRINTs to print window styles in hexadecimal notation ([[Filip Navara]])
 
*Fix ExtSelectClipRgn and some other clipping functions ([[Filip Navara]])
 
*NtGdiCreateRectRgn should accept negative width and height. It's supposed to be handled just like in NtGdiSetRectRgn ([[Filip Navara]])
 
*Don't pass garbage to RtlQueryAtomInAtomTable ([[Filip Navara]])
 
*Force recalulation size of menu items when new item is added ([[Filip Navara]])
 
*Make MDI injected icons working ([[Filip Navara]])
 
*Minor corrections to menu code size handling ([[Filip Navara]])
 
*Make WinPosSearchChildren more readable ([[Filip Navara]])
 
*Allow caller to continue after NtUserOpenClipboard() ([[Ge van Geldorp]])
 
*Fix scrollbar controls ([[Ge van Geldorp]])
 
*GetWindowInfo() doesn't check the cbSize parameter ([[Thomas Weidenmueller]])
 
*Regression-test enable win32k ([[Casper Hornstrup]])
 
*Use a common header for most files in win32k to make use of precompiled headers ([[Thomas Weidenmueller]])
 
*Properly handle HTTRANSPARENT hittest with mouse messages ([[Thomas Weidenmueller]])
 
*Rewrote NtUserBuildHwndList() ([[Thomas Weidenmueller]])
 
*Fixed GetThreadDesktop() (not fully working yet because it requires a ObFindHandleForObject() implementation in case the requested thread doesn't belong to the calling process) ([[Thomas Weidenmueller]])
 
*Assign even more styles for overlapped windows ([[Thomas Weidenmueller]])
 
*Handle WM_SETCUROR messages for the desktop window ([[Thomas Weidenmueller]])
 
*Implemented IsWindowInDestroy() ([[Thomas Weidenmueller]])
 
*Handle MENUITEMINFOW compiled with _WIN32_WINNT less than 0x0500 (MENUITEMINFOW) ([[Ge van Geldorp]])
 
*Support the WS_EX_LEFTSCROLLBAR ([[Thomas Weidenmueller]])
 
*Implemented RegisterLogonProcess(), LockWindowStation() and UnlockWindowStation() ([[Thomas Weidenmueller]])
 
*Implemented LockWindowStation() and UnlockWindowStation() ([[Thomas Weidenmueller]])
 
*Implemented AnyPopup() ([[Thomas Weidenmueller]])
 
*Fixed brush origin ([[Thomas Weidenmueller]])
 
*Use SendInput() to send mouse input data ([[Thomas Weidenmueller]])
 
*Avoid potencial access violation ([[Filip Navara]])
 
*Add ASSERT for a palette size ([[Filip Navara]])
 
*Fix mouse clipping ([[Thomas Weidenmueller]])
 
*Setup the cursor in the middle of the screen ([[Thomas Weidenmueller]])
 
*Use only LSBit for 1bpp putpixel ([[Ge van Geldorp]])
 
*Changed SetCursorPos() to use SendInput() ([[Thomas Weidenmueller]])
 
*Fixed DrawFocusRect() to use values from SPI_GETFOCUSBORDERWIDTH/HEIGHT ([[Thomas Weidenmueller]])
 
*Fixed NtGdiPtVisible() ([[Thomas Weidenmueller]])
 
*Simplified handling of palettes selected into device contexts. Now DC's w.hPalette should always point to palette object and shoudn't be NULL ([[Filip Navara]])
 
*Fixed bitfield conversion when creating Color's Mono XLATEOBJs. Fixes bug #275.
 
*Implemented keybd_event(), mouse_event(), BlockInput() and SendInput() - the server side however isn't implemented yet ([[Thomas Weidenmueller]])
 
*Don't crash if no thread desktop set ([[Thomas Weidenmueller]])
 
*Implement DDE Execute ([[Ge van Geldorp]])
 
*Return NULL only in error case ([[Ge van Geldorp]])
 
*Implemented GetCurrentObject() ([[Thomas Weidenmueller]])
 
*Implemented PtVisible() ([[Thomas Weidenmueller]])
 
*Implemented ExcludeClipRect() ([[Thomas Weidenmueller]])
 
*Implemented ExtSelectClipRgn() ([[Thomas Weidenmueller]])
 
*Implemented GetDCBrushColor(), SetDCBrushColor(), GetDCPenColor() and SetDCPenColor() ([[Thomas Weidenmueller]])
 
*Implemented hatched brushes ([[Thomas Weidenmueller]])
 
*Fixed memory leak when deleting patterned brushes ([[Thomas Weidenmueller]])
 
*Use brush origin in dib code ([[Thomas Weidenmueller]])
 
*Set proper errorcode in some functions ([[Thomas Weidenmueller]])
 
*Fixed missing window dereferences and a minor thread-safety bug ([[Thomas Weidenmueller]])
 
*Fixed some scrollbar issues ([[Thomas Weidenmueller]])
 
*Implemented InvertRgn() ([[Thomas Weidenmueller]])
 
*Fixed some error cases ([[Thomas Weidenmueller]])
 
*Proper implementation of FrameRgn() ([[Thomas Weidenmueller]])
 
*Small windowbar sizing fix for WS_EX_TOOLWINDOW ([[Thomas Weidenmueller]], Masahiro Taguchi)
 
*Move SendMessage calls out of the message queue processing code ([[Thomas Weidenmueller]])
 
*Fixed translation of coordinates calculation in different thread states ([[Thomas Weidenmueller]])
 
*Proper implementation of Set/GetWindowText/Length() ([[Thomas Weidenmueller]])
 
*Properly remove mousemove messages ([[Thomas Weidenmueller]])
 
*Post focus messages to different threads ([[Thomas Weidenmueller]])
 
*Properly free unicode string ([[Thomas Weidenmueller]])
 
*Fixed crashes caused by an invalid pointer ([[Thomas Weidenmueller]])
 
*Fixed implementation of ChildWindowFromPointEx() ([[Thomas Weidenmueller]])
 
*Fixed major bugs in the message queue ([[Thomas Weidenmueller]])
 
*Treat WM_NCMOUSEMOVE message as WM_MOUSEMOVE messages ([[Thomas Weidenmueller]])
 
*Rewrote NtUserFindWindowEx() so it works as it's supposed to ([[Thomas Weidenmueller]])
 
*Better handling of invalid strings in IntSafeCopyUnicodeString() ([[Thomas Weidenmueller]])
 
*Compile Win32k using W32API [Part II]: ([[Filip Navara]])
 
*Compensate BrushOrigin for translation ([[Ge van Geldorp]])
 
*Handle the case where no BrushOrigin is given ([[Thomas Weidenmueller]])
 
*Handle the case where no BrushOrigin is given even under EngStretchBlt and EngMaskBitBlt ([[Filip Navara]])
 
*Implement NULL module case for EngFindImageProcAddress ([[Ge van Geldorp]])
 
*Add stubs for EngFindImageProcAddress()able not present yet ([[Ge van Geldorp]])
 
 
 
[[ChangeLog-0.2.4]]
 
 
 
* Handle correctly bottom-up surfaces in the VGA driver. ([[Filip Navara]])
 
* Stop processing if exact match is found in ClosestColorMatch. ([[Filip Navara]])
 
* Fixed locking in NtGdiGetBitmapBits. ([[Filip Navara]])
 
* Removed IntCopyBitmap and replaced it's usage by BITMAPOBJ_CopyBitmap. ([[Filip Navara]])
 
* Fixed setting of SURFOBJ->pvBits and SURFOBJ->pvScan0 in EngCreateBitmap for bottom-up surfaces. ([[Filip Navara]])
 
* Call IntEngBitBlt instead of EngBitBlt from EngCopyBits. ([[Filip Navara]])
 
* Correctly set the SURFOBJ->hsurf field. ([[Filip Navara]])
 
* Support for bottom-up mouse cursors in the Eng* cursor emulation routines. ([[Filip Navara]])
 
* Fix locking in error cases of NtGdiRestoreDC (get Primitives demo to start). ([[Filip Navara]])
 
* Fix BitmapFormat to return 0 for unknown bit depth. ([[Filip Navara]])
 
* New implementation of NtGdiGetDIBits. ([[Filip Navara]])
 
* Fixed buffer handling and coordinate translation in IntGdiPolyline. ([[Filip Navara]])
 
* Allocate memory from paged pool in EngAllocMem. ([[Filip Navara]])
 
* Support resursive locking of the GDI objects. ([[Filip Navara]])
 
* Call EngMovePointer instead of DrvMovePointer if driver DrvSetPointerShape returned SPS_DECLINE. ([[Filip Navara]])
 
* Don't continue execution if there is no exception handler. ([[Filip Navara]])
 
* Send the cursor to display driver in top-down format. ([[Filip Navara]])
 
* Guard against out of bounds access to KeyboardLayout->pusVSCtoVK in W32kKeyProcessMessage. ([[Filip Navara]])
 
* Fixed SetKeyState to correctly index the keyboard state table. ([[Filip Navara]])
 
* Use absolute value of the color difference when calculating color match rating. ([[Filip Navara]])
 
* Handle allocation failure in IntCreateBitmap. ([[Filip Navara]])
 
* Don't allow creating surface with BitmapFormat == 0 (Invalid) in IntCreateSurface. ([[Filip Navara]])
 
* Fixed ExcludeClipRgn for case when DC contained no clipping region before the call to this function. ([[Filip Navara]])
 
* Don't create XLATEOBJ for BitBlt and StretchBlt operations that don't use source DC. ([[Filip Navara]])
 
* Honor the "Extended" bit in SetKeyState. ([[Filip Navara]])
 
* Display window icon only if there is any. ([[Filip Navara]])
 
* DrawIcon should return TRUE if it succeeds. ([[Filip Navara]])
 
* Handle UnsafeRect == NULL case in NtUserGetUpdateRect. ([[Filip Navara]])
 
* Implementation of [NtGdi]GetTextFace[W] and [NtGdi]GetFontData[W]. ([[Filip Navara]])
 
* Fixed locking in NtGdiGetCharWidth32. This caused problems with AbiWord reported by Jason Filby. ([[Filip Navara]])
 
* Add IntEngCreateSrcMonoXlate. ([[Filip Navara]])
 
* Get rid of compiler warnings in Win32k. ([[Filip Navara]])
 
* Handle indexed palettes in IntEngCreateSrcMonoXlate. ([[Filip Navara]])
 
* Fix WS_CAPTION style handling. ([[Filip Navara]])
 
* Maintain higher internal precision during font rendering. ([[Filip Navara]])
 
* Honour bitmap->bitmap_left while rendering. ([[Filip Navara]])
 
* Correctly handle ClipCursor(NULL) case. ([[Filip Navara]])
 
* Implemented NtUserEnumDisplaySettings/IntEnumDisplaySettings ([[Gregor Anich]])
 
* Only accept matching palette ([[Gé van Geldorp]])
 
* FindWindow() should search the threads desktop, not the active one. ([[Gé van Geldorp]])
 
* Implement NtUserBuildNamesList() ([[Gé van Geldorp]])
 
* If SendMessageTimeout() times out, GetLastError() should return 0 ([[Gé van Geldorp]])
 
* Simplified assigning of DDI functions ([[Thomas Weidenmueller]])
 
* Fixed graphics (gui) checks ([[Thomas Weidenmueller]])
 
* Added support to paint and change desktop wallpapers ([[Thomas Weidenmueller]])
 
 
 
[[ChangeLog-0.2.5]]
 
 
 
* Many bug fixes in win32k - significant increase in stability ([[Royce Mitchell III]], [[Filip Navara]])
 
* Implementation of monitor functions ([[Gregor Anich]])
 
* GDI Handle allocation speed-up ([[Thomas Weidenmueller]])
 
* Fixed a bug that caused locking a not anymore existing message queue while dispatching a message ([[Thomas Weidenmueller]])
 
* Don't dispatch sent messages to windows during destruction ([[Thomas Weidenmueller]])
 
* Preliminary "fixed" window class lookup so classes of other processes can be found ([[Thomas Weidenmueller]])
 
* Removed some mouse cursor hacks and the ReactOS-only ENG handle table from the ENG code ([[Thomas Weidenmueller]])
 
* Implemented more win2k-like and much faster gdi handle table ([[Thomas Weidenmueller]])
 
* Improved inheritance of window stations/desktops where threads/processes are created in ([[Thomas Weidenmueller]])
 
 
 
[[ChangeLog-0.2.6]]
 
 
 
* Implement NtGdiDdGetDriverInfo and NtGdiDdWaitForVerticalBlank for directx. Untested yet. ([[Magnus Olsen]])
 
 
 
[[ChangeLog-0.2.7]]
 
 
 
([[Magnus Olsen]])
 
* Implemented <code>NtGdiDdCanCreateSurface</code> and <code>NtGdiDdBlt</code> for DirectX&trade; (untested)
 
* Expanded <code>StretchBitBlt</code> to all bit-per-pixel (BPP) settings (not yet fully implemented; use the code as a reference)
 
* partially implemented fullscreen in changedisplay setting&mdash;I can play winquake&trade; in fullscreen now :)
 
* Implemented <code>NtGdiGetSystemPaletteUse</code> and <code>NtGdiSetSystemPaletteUse</code> (this code has been taken from Wine)
 
* Fixed winquake color glitch bug&mdash;the text is now white instead of black ([[Magnus Olsen]])
 
* Implemented <code>NtGdiAnimatePalette</code> (partly ripped from Wine; does not animate 100% of the palette) ([[Hervé Poussineau]])
 
* Speed-optimized the bitblt ([[Magnus Olsen]], [[Gregor Anich]]), [[Alex Ionescu]]), [[Gé van Geldorp]]) (''see svn log'')
 
* Repaired GDI to handle debugging functionality ([[Filip Navara]])
 
* Implemented <code>NtGdiUnrealizedObject</code> ([[James Tabor]])
 
* Implemented <code>WH_KEYBOARD_LL</code> hook ([[Gé van Geldorp]])
 
 
 
[[ChangeLog-0.2.8]]
 
 
 
* Implement OffsetClipRgn ([[Thomas Weidenmueller]])
 
* Add generation of 8/32bpp DIB code ([[Gé van Geldorp]])
 
* Fix DIB memory leak ([[Gé van Geldorp]])
 
* Send window-bound timers to the correct message queue ([[Gé van Geldorp]])
 
* Use the pitch provided by FreeType ([[Gé van Geldorp]])
 
* SetPixel should return the new color ([[Jeffrey Morlan]])
 
* Make sure we don't hang forever when activating a window belonging to another thread ([[Gé van Geldorp]])
 
* Inform HAL about the switch to graphics mode as late as possible ([[Gé van Geldorp]])
 
* Destroy the desktop window during shutdown ([[Gé van Geldorp]])
 
* Make FindWindow case insensitive ([[Gé van Geldorp]])
 
* partial implementation of ShowWindowAsync() to activate the Explorer desktop switcher ([[Martin Fuchs]])
 
* Fix an issue in the menu code which was causing WinRAR and other applications not to load ([[Alex Ionescu]])
 

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