1 #pragma once 2 3 #define WINSTA_OBJ_DIR L"\\Windows\\WindowStations" 4 #define SESSION_DIR L"\\Sessions" 5 6 /* Window Station Status Flags */ 7 #define WSS_LOCKED (1) 8 #define WSS_NOINTERACTIVE (2) 9 #define WSS_NOIO (4) 10 #define WSS_SHUTDOWN (8) 11 #define WSS_DYING (16) 12 #define WSS_REALSHUTDOWN (32) 13 14 typedef struct _WINSTATION_OBJECT 15 { 16 DWORD dwSessionId; 17 18 LIST_ENTRY DesktopListHead; 19 PRTL_ATOM_TABLE AtomTable; 20 HANDLE ShellWindow; 21 HANDLE ShellListView; 22 23 ULONG Flags; 24 struct _DESKTOP* ActiveDesktop; 25 26 PTHREADINFO ptiClipLock; 27 PTHREADINFO ptiDrawingClipboard; 28 PWND spwndClipOpen; 29 PWND spwndClipViewer; 30 PWND spwndClipOwner; 31 PCLIP pClipBase; // Not a clip object. 32 DWORD cNumClipFormats; 33 INT iClipSerialNumber; 34 INT iClipSequenceNumber; 35 INT fClipboardChanged : 1; 36 INT fInDelayedRendering : 1; 37 38 PWND spwndClipboardListener; 39 LUID luidEndSession; 40 LUID luidUser; 41 PVOID psidUser; 42 43 } WINSTATION_OBJECT, *PWINSTATION_OBJECT; 44 45 extern WINSTATION_OBJECT *InputWindowStation; 46 extern HANDLE gpidLogon; 47 extern HWND hwndSAS; 48 extern UNICODE_STRING gustrWindowStationsDir; 49 50 #define WINSTA_READ STANDARD_RIGHTS_READ | \ 51 WINSTA_ENUMDESKTOPS | \ 52 WINSTA_ENUMERATE | \ 53 WINSTA_READATTRIBUTES | \ 54 WINSTA_READSCREEN 55 56 #define WINSTA_WRITE STANDARD_RIGHTS_WRITE | \ 57 WINSTA_ACCESSCLIPBOARD | \ 58 WINSTA_CREATEDESKTOP | \ 59 WINSTA_WRITEATTRIBUTES 60 61 #define WINSTA_EXECUTE STANDARD_RIGHTS_EXECUTE | \ 62 WINSTA_ACCESSGLOBALATOMS | \ 63 WINSTA_EXITWINDOWS 64 65 #define WINSTA_ACCESS_ALL STANDARD_RIGHTS_REQUIRED | \ 66 WINSTA_ACCESSCLIPBOARD | \ 67 WINSTA_ACCESSGLOBALATOMS | \ 68 WINSTA_CREATEDESKTOP | \ 69 WINSTA_ENUMDESKTOPS | \ 70 WINSTA_ENUMERATE | \ 71 WINSTA_EXITWINDOWS | \ 72 WINSTA_READATTRIBUTES | \ 73 WINSTA_READSCREEN | \ 74 WINSTA_WRITEATTRIBUTES 75 76 CODE_SEG("INIT") 77 NTSTATUS 78 NTAPI 79 InitWindowStationImpl(VOID); 80 81 NTSTATUS 82 NTAPI 83 UserCreateWinstaDirectory(VOID); 84 85 NTSTATUS 86 NTAPI 87 IntWinStaObjectDelete( 88 _In_ PVOID Parameters); 89 90 NTSTATUS 91 NTAPI 92 IntWinStaObjectParse( 93 _In_ PVOID Parameters); 94 95 NTSTATUS 96 NTAPI 97 IntWinStaOkToClose( 98 _In_ PVOID Parameters); 99 100 NTSTATUS 101 FASTCALL 102 IntValidateWindowStationHandle( 103 HWINSTA WindowStation, 104 KPROCESSOR_MODE AccessMode, 105 ACCESS_MASK DesiredAccess, 106 PWINSTATION_OBJECT *Object, 107 POBJECT_HANDLE_INFORMATION pObjectHandleInfo); 108 109 NTSTATUS 110 FASTCALL 111 IntCreateWindowStation( 112 OUT HWINSTA* phWinSta, 113 IN POBJECT_ATTRIBUTES ObjectAttributes, 114 IN KPROCESSOR_MODE AccessMode, 115 IN KPROCESSOR_MODE OwnerMode, 116 IN ACCESS_MASK dwDesiredAccess, 117 DWORD Unknown2, 118 DWORD Unknown3, 119 DWORD Unknown4, 120 DWORD Unknown5, 121 DWORD Unknown6); 122 123 BOOL FASTCALL UserSetProcessWindowStation(HWINSTA hWindowStation); 124 125 BOOL FASTCALL co_IntInitializeDesktopGraphics(VOID); 126 VOID FASTCALL IntEndDesktopGraphics(VOID); 127 BOOL FASTCALL CheckWinstaAttributeAccess(ACCESS_MASK); 128 /* EOF */ 129