[WIN32K:NTUSER] Split NtUserCreateWindowStation() into the part that captures the...
[reactos.git] / win32ss / user / ntuser / winsta.h
index 443ac96..085f3bc 100644 (file)
@@ -4,18 +4,20 @@
 #define SESSION_DIR L"\\Sessions"
 
 /* Window Station Status Flags */
-#define WSS_LOCKED     (1)
-#define WSS_NOINTERACTIVE      (2)
+#define WSS_LOCKED        (1)
+#define WSS_NOINTERACTIVE (2)
+#define WSS_NOIO          (4)
+#define WSS_SHUTDOWN      (8)
+#define WSS_DYING         (16)
+#define WSS_REALSHUTDOWN  (32)
 
 typedef struct _WINSTATION_OBJECT
 {
     DWORD dwSessionId;
 
-    KSPIN_LOCK Lock;
     UNICODE_STRING Name;
     LIST_ENTRY DesktopListHead;
     PRTL_ATOM_TABLE AtomTable;
-    HANDLE SystemMenuTemplate;
     HANDLE ShellWindow;
     HANDLE ShellListView;
 
@@ -34,10 +36,15 @@ typedef struct _WINSTATION_OBJECT
     INT            fClipboardChanged : 1;
     INT            fInDelayedRendering : 1;
 
+    PWND           spwndClipboardListener;
+    LUID           luidEndSession;
+    LUID           luidUser;
+    PVOID          psidUser;
+
 } WINSTATION_OBJECT, *PWINSTATION_OBJECT;
 
 extern WINSTATION_OBJECT *InputWindowStation;
-extern PPROCESSINFO LogonProcess;
+extern HANDLE gpidLogon;
 extern HWND hwndSAS;
 extern UNICODE_STRING gustrWindowStationsDir;
 
@@ -71,20 +78,51 @@ INIT_FUNCTION
 NTSTATUS
 NTAPI
 InitWindowStationImpl(VOID);
-NTSTATUS NTAPI UserCreateWinstaDirectory();
 
-VOID APIENTRY IntWinStaObjectDelete(PWIN32_DELETEMETHOD_PARAMETERS Parameters);
-NTSTATUS APIENTRY IntWinStaObjectParse(PWIN32_PARSEMETHOD_PARAMETERS Parameters);
-NTSTATUS NTAPI IntWinstaOkToClose(PWIN32_OKAYTOCLOSEMETHOD_PARAMETERS Parameters);
+NTSTATUS
+NTAPI
+UserCreateWinstaDirectory(VOID);
+
+NTSTATUS
+NTAPI
+IntWinStaObjectDelete(
+    _In_ PVOID Parameters);
+
+NTSTATUS
+NTAPI
+IntWinStaObjectParse(
+    _In_ PVOID Parameters);
+
+NTSTATUS
+NTAPI
+IntWinStaOkToClose(
+    _In_ PVOID Parameters);
 
-NTSTATUS FASTCALL
+NTSTATUS
+FASTCALL
 IntValidateWindowStationHandle(
    HWINSTA WindowStation,
    KPROCESSOR_MODE AccessMode,
    ACCESS_MASK DesiredAccess,
-   PWINSTATION_OBJECT *Object);
+   PWINSTATION_OBJECT *Object,
+   POBJECT_HANDLE_INFORMATION pObjectHandleInfo);
+
+NTSTATUS
+FASTCALL
+IntCreateWindowStation(
+    OUT HWINSTA* phWinSta,
+    IN POBJECT_ATTRIBUTES ObjectAttributes,
+    IN KPROCESSOR_MODE AccessMode,
+    IN ACCESS_MASK dwDesiredAccess,
+    DWORD Unknown2,
+    DWORD Unknown3,
+    DWORD Unknown4,
+    DWORD Unknown5,
+    DWORD Unknown6);
+
 BOOL FASTCALL UserSetProcessWindowStation(HWINSTA hWindowStation);
 
 BOOL FASTCALL co_IntInitializeDesktopGraphics(VOID);
 VOID FASTCALL IntEndDesktopGraphics(VOID);
+BOOL FASTCALL CheckWinstaAttributeAccess(ACCESS_MASK);
 /* EOF */