SKETCH OF HOW RESEARCH MIGHT CONTINUE AND RESULTS BE PRESENTED

Extended Window Style

The basic window styles from when Windows first appeared (as a DOS program) were already insufficient long before Windows became its own operating system. Arguably the most of what distinguishes CreateWindowEx from plain old CreateWindow is the provision for extended styles. The WND structure has from the start held these as bit fields in union with a ULONG that may have been named dwExStyle at first but is now known to be named ExStyle.

The extended window styles are documented, of course, and they have always been readily accessible, to specify, query and change. Before version 5.0, the GWL_EXSTYLE case of the documented USER32 function GetWindowLong simply retrieved the whole ExStyle from the WND. Since version 3.51, however, the ExStyle has contained bits that are not extended window styles. Version 5.0 started masking away the bits that likely would have been in state or state2 had there been room. Indeed, the “state” bits that version 3.51 stuffed into the high byte of ExStyle actually did move to state2 as its first bits when it was introduced for version 4.0.

Microsoft’s names and definitions for the bit fields in ExStyle are known from symbol files for WIN32K.SYS from Windows 7 only.

The USEREXTS and USERKDX debugger extensions, as supplied in the Device Driver Kit (DDK) for Windows NT 3.51 through to Windows 2000 but apparently not since, have names that likely reproduce macros from Microsoft’s headers. These name a sort of index into the set of window flags that comprises the state, state2, ExStyle and style members considered as an array of bytes. The high byte in each such 16-bit index is the byte offset to the bit and the low byte is the bit mask within that byte. Where a name is known from this source, the versions in parentheses are of the debugger extension.

I may some day follow up which of these bit fields and window flags persist to later versions (and whether they are credible for the stated versions).

Mask Index Bit Field Definition (6.1) Window Flag Name (3.51 to 5.0) Extended Window Style Versions Remarks
0x00000001 0x0401 (3.10 to 3.51);
0x0801
INT bWS_EX_DLGMODALFRAME : 1;
WEFDLGMODALFRAME WS_EX_DLGMODALFRAME    
0x00000002 0x0402 (3.10 to 3.51);
0x0802
  WEFDRAGOBJECT      
INT bUnused1 : 1;
       
0x00000004 0x0404 (3.10 to 3.51);
0x0804
INT bWS_EX_NOPARENTNOTIFY : 1;
WEFNOPARENTNOTIFY WS_EX_NOPARENTNOTIFY    
0x00000008 0x0408 (3.10 to 3.51);
0x0808
INT bWS_EX_TOPMOST : 1;
WEFTOPMOST WS_EX_TOPMOST    
0x00000010 0x0410 (3.10 to 3.51);
0x0810
INT bWS_EX_ACCEPTFILE : 1;
WEFACCEPTFILES WS_EX_ACCEPTFILES    
0x00000020 0x0420 (3.10 to 3.51);
0x0820
INT bWS_EX_TRANSPARENT : 1;
WEFTRANSPARENT WS_EX_TRANSPARENT    
0x00000040 0x0440 (3.10 to 3.51);
0x0840
INT bWS_EX_MDICHILD : 1;
WEFMDICHILD WS_EX_MDICHILD    
0x00000080 0x0880
INT bWS_EX_TOOLWINDOW : 1;
WEFTOOLWINDOW (4.0 to 5.0) WS_EX_TOOLWINDOW    
0x00000100 0x0901
INT bWS_EX_WINDOWEDGE : 1;
WEFWINDOWEDGE (4.0 to 5.0) WS_EX_WINDOWEDGE    
0x00000200 0x0902
INT bWS_EX_CLIENTEDGE : 1;
WEFCLIENTEDGE (4.0 to 5.0) WS_EX_CLIENTEDGE    
  0x0903   WEFEDGEMASK (4.0 only)      
0x00000400 0x0904
INT bWS_EX_CONTEXTHELP : 1;
WEFCONTEXTHELP (4.0 to 5.0) WS_EX_CONTEXTHELP    
0x00000800 0x0908
INT bMakeVisibleWhenUnghosted : 1;
       
0x00001000 0x0910
INT bWS_EX_RIGHT : 1;
WEFRIGHT (4.0 to 5.0) WS_EX_RIGHT    
0x00002000 0x0920
INT bWS_EX_RTLREADING : 1;
WEFRTLREADING (4.0 to 5.0) WS_EX_RTLREADING    
0x00004000 0x0940
INT bWS_EX_LEFTSCROLLBAR : 1;
WEFLEFTSCROLL (4.0 to 5.0) WS_EX_LEFTSCROLLBAR    
   
INT bUnused2 : 1;
       
0x00010000 0x0A01
INT bWS_EX_CONTROLPARENT : 1;
WEFCONTROLPARENT (4.0 to 5.0) WS_EX_CONTROLPARENT    
0x00020000 0x0A02
INT bWS_EX_STATICEDGE : 1;
WEFSTATICEDGE (4.0 to 5.0) WS_EX_STATICEDGE    
0x00040000 0x0A04
INT bWS_EX_APPWINDOW : 1;
WEFAPPWINDOW (4.0 to 5.0) WS_EX_APPWINDOW    
0x00080000 0x0A08
INT bWS_EX_LAYERED : 1;
WEFLAYERED (5.0) WS_EX_LAYERED 5.0 and higher?  
0x00100000 0x0A10
INT bWS_EX_NOINHERITLAYOUT : 1;
  WS_EX_NOINHERITLAYOUT 5.0 and higher?  
0x00200000 0x0A20   WFSMQUERYDRAGICON (4.0 only)   4.0 only next as 0x20000000 in state2
INT bUnused3 : 1;
    5.0 to 6.1  
    WS_EX_NOREDIRECTIONBITMAP 6.2 and higher  
0x00400000 0x0A40
INT bWS_EX_LAYOUTRTL : 1;
  WS_EX_LAYOUTRTL 5.0 and higher?  
0x00800000 0x0A80   WFSHELLHOOKWND (4.0 only)   4.0 only next as 0x40000000 in state2
INT bWS_EX_NOPADDEDBORDER : 1;
       
0x01000000 0x0701 (3.51)   WFPAINTSENT (3.51 only)   3.51 only next as 0x00000001 in state2
INT bUnused4 : 1;
       
0x02000000 0x0702 (3.51);
0x0B02
  WFDONTVALIDATE (3.51 only)   3.51 only next as 0x00000002 in state2
INT bWS_EX_COMPOSITED : 1;
  WS_EX_COMPOSITED 5.1 and higher  
0x04000000 0x0704 (3.51);
0x0B04
  WFSTARTPAINT (3.51 only)   3.51 only next as 0x00000004 in state2
INT bUIStateActive : 1;
       
0x08000000 0x0B08
INT bWS_EX_NOACTIVATE : 1;
WEFNOACTIVATE (5.0) WS_EX_NOACTIVATE 5.0 and higher  
0x10000000 0x0B10
INT bWS_EX_COMPOSITEDCompositing : 1;
       
0x20000000 0x0B20
INT bRedirected : 1;
       
0x40000000 0x0B40
INT bUIStateKbdAccelHidden : 1;
       
0x80000000 0x0B80
INT bUIStateFocusRectHidden : 1;