Difference between revisions of "Win32k.sys"

From ReactOS Wiki
Jump to: navigation, search
m
 
(13 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]]
 
*Set the previous pointer from the next block, if some blocks was merged (in add_to_free_list) ([[Hartmut Birr]])
 
*Free or recycle the remaining path string after a call to ObFindObject ([[Hartmut Birr]])
 
*Lock the pages always in MmProbeAndLockPages ([[Hartmut Birr]])
 
*Locked the pages in MmCommitPagedPoolAddress, if it is necessary ([[Hartmut Birr]])
 
*Marked a cache segment as page out in progress to prevent from recursive calls to MmPageOutPhysicalAddress; fixed bug 220 ([[Hartmut Birr]])
 
*Protected the callback stack list with a spinlock ([[Hartmut Birr]])
 
*Made it possible to allocate a pageop only if no other pageop for the given address exists ([[Hartmut Birr]])
 
*Try to pageout a page only if no other access to the page exist ([[Hartmut Birr]])
 
*Gave a free page only to the next waiting request (in MmReleasePageMemoryConsumer), if sufficient free pages are available ([[Hartmut Birr]])
 
*Initialized the object tag to prevent the tag 0xcccccccc ([[Hartmut Birr]])
 
*Removed dirty loading of symbol files from ExpInitializeExecutive ([[Hartmut Birr]])
 
*Fixed the loading of symbol files ([[Hartmut Birr]])
 
*Try to avoid crashing when dumping out a corrupted stack ([[David Welch]])
 
*Avoid a crashing when trying to process an exception early in the boot process ([[David Welch]])
 
*Use an event rather than a semaphore to wake up the thread that writes debug output to disk ([[David Welch]])
 
*Added basic tracing, breakpoints and disassembly to the kernel debugger ([[David Welch]])
 
*Added disassembler from gdb ([[David Welch]])
 
*Record feature information from cpuid ([[David Welch]])
 
*Fixed bug with recalling previous input ([[David Welch]])
 
*Switch back to text mode when entering the debugger ([[David Welch]])
 
*Fixed whole page allocations since the handle table code now relies on allocations being eight byte aligned ([[David Welch]])
 
*Fix reading past the end of the pool block ([[David Welch]])
 
*Fix key name size calculation bugs ([[Eric Kohl]])
 
*Fix NtOpenThreadToken() and NtSetInformationThread() ([[Eric Kohl]])
 
*Clean-up NtQueryInformationToken() ([[Eric Kohl]])
 
*Fully implement RtlFormatCurrentUserKeyPath() ([[Eric Kohl]])
 
*Fixed crashes that were cause by the changes to the service parameter table ([[Eric Kohl]])
 
*Work on thread-awareness in gdbstub ([[Ge van Geldorp]])
 
*Make IoGetDeviceInterfaces more compatible with the native version ([[Matthew Brace]])
 
*Hardcode build number consistent with major/minor version (NVidia driver requires this) ([[Ge van Geldorp]])
 
*Tell apps we're NT4 SP6, VB runtime will fail if we report SP0 ([[Ge van Geldorp]])
 
*Allow GDB 6 to backtrace over a syscall ([[Ge van Geldorp]])
 
*Disable pool validation since it slows down execution too much ([[Ge van Geldorp]])
 
*Locale values are specified in hexadecimal numbers ([[Filip Navara]])
 
*Corrected EiAllocatePool prototype ([[Filip Navara]])
 
*Fixed RtlNtStatusToDosErrorNoTeb ([[Filip Navara]])
 
*Removed the incorrect implementations of Device Interface functions ([[Filip Navara]])
 
*Don't zero memory allocated by ExAllocatePool ([[Filip Navara]])
 
*Fixed RtlFormatCurrentUserKeyPath and it's use ([[Filip Navara]])
 
*Fill correctly all members of the returned device object in IoCreateDevice ([[Filip Navara]])
 
*Don't bug check in loader when export isn't found, only report it and don't load the module ([[Filip Navara]])
 
*If we know a module path while loading, use it for searching for the import modules ([[Filip Navara]])
 
*Modified LdrpBuildModuleBaseName to not strip the extension from file name ([[Filip Navara]])
 
*Call create process notify routines from NtCreateProcess ([[Filip Navara]])
 
*Started PsSetLoadImageNotifyRoutine implementation, it just registers the callback, but doesn't call it ([[Filip Navara]])
 
*Fixed querying of thread locale ([[Filip Navara]])
 
*Implemented IoGetDriverObjectExtension and IoAllocateDriverObjectExtension ([[Filip Navara]])
 
*Don't load PnP drivers if they're disabled ([[Filip Navara]])
 
*Save pointer to PnP tree device node in device object's DeviceObjectExtension ([[Filip Navara]])
 
*Add function IopGetDeviceNode for getting device node from device object pointer ([[Filip Navara]])
 
*Rewritten IoGetDeviceProperty to use values that are in device node instead of sending Irps ([[Filip Navara]])
 
*Lower IRQL in error case of IoAllocateDriverObjectExtension ([[Filip Navara]])
 
*Support for upper level filter drivers ([[Filip Navara]])
 
*Rewritten some driver loading functions to get higher control of the driver loading and initialization process, fixes bug #263 ([[Filip Navara]])
 
*Added support for lower level filter drivers ([[Filip Navara]])
 
*Minor cleanup and fixed few memory leaks on driver unload ([[Filip Navara]])
 
*Fixed a minor bug in IopLoadServiceModule that caused crashes for disabled drivers ([[Filip Navara]])
 
*Don't bugcheck if FDO wasn't attached ([[Filip Navara]])
 
*Fixed cygwin fork section map problem, this fixes map_dup_inherit ([[Art Yerkes, David Welch]])
 
*MmMapLockedPages patch ([[Anich Gregor]])
 
*Initialize LPC-related fields in ETHREAD ([[Emanuele Aliberti]])
 
*Finish off NtDuplicateToken ([[Jason Filby]])
 

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