Build winlogon with NDK
[reactos.git] / reactos / subsys / system / winlogon / winlogon.h
1 /*
2 * ReactOS kernel
3 * Copyright (C) 2003 ReactOS Team
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 */
19 /* $Id$
20 * COPYRIGHT: See COPYING in the top level directory
21 * PROJECT: ReactOS winlogon
22 * FILE: subsys/system/winlogon/winlogon.h
23 * PURPOSE: Winlogon
24 * PROGRAMMER:
25 */
26
27 #ifndef __WINLOGON_MAIN_H__
28 #define __WINLOGON_MAIN_H__
29
30 #include <windows.h>
31 #include <ntsecapi.h>
32 #include <userenv.h>
33 #include <winwlx.h>
34 #define NTOS_MODE_USER
35 #include <ndk/ntndk.h>
36
37 #include <reactos/winlogon.h>
38
39 #include "setup.h"
40 #include "resource.h"
41
42 VOID WINAPI WlxUseCtrlAltDel(HANDLE hWlx);
43 VOID WINAPI WlxSetContextPointer(HANDLE hWlx, PVOID pWlxContext);
44 VOID WINAPI WlxSasNotify(HANDLE hWlx, DWORD dwSasType);
45 BOOL WINAPI WlxSetTimeout(HANDLE hWlx, DWORD Timeout);
46 int WINAPI WlxAssignShellProtection(HANDLE hWlx, HANDLE hToken, HANDLE hProcess, HANDLE hThread);
47 int WINAPI WlxMessageBox(HANDLE hWlx, HWND hwndOwner, LPWSTR lpszText, LPWSTR lpszTitle, UINT fuStyle);
48 int WINAPI WlxDialogBox(HANDLE hWlx, HANDLE hInst, LPWSTR lpszTemplate, HWND hwndOwner, DLGPROC dlgprc);
49 int WINAPI WlxDialogBoxParam(HANDLE hWlx, HANDLE hInst, LPWSTR lpszTemplate, HWND hwndOwner, DLGPROC dlgprc, LPARAM dwInitParam);
50 int WINAPI WlxDialogBoxIndirect(HANDLE hWlx, HANDLE hInst, LPCDLGTEMPLATE hDialogTemplate, HWND hwndOwner, DLGPROC dlgprc);
51 int WINAPI WlxDialogBoxIndirectParam(HANDLE hWlx, HANDLE hInst, LPCDLGTEMPLATE hDialogTemplate, HWND hwndOwner, DLGPROC dlgprc, LPARAM dwInitParam);
52 int WINAPI WlxSwitchDesktopToUser(HANDLE hWlx);
53 int WINAPI WlxSwitchDesktopToWinlogon(HANDLE hWlx);
54 int WINAPI WlxChangePasswordNotify(HANDLE hWlx, PWLX_MPR_NOTIFY_INFO pMprInfo, DWORD dwChangeInfo);
55 BOOL WINAPI WlxGetSourceDesktop(HANDLE hWlx, PWLX_DESKTOP* ppDesktop);
56 BOOL WINAPI WlxSetReturnDesktop(HANDLE hWlx, PWLX_DESKTOP pDesktop);
57 BOOL WINAPI WlxCreateUserDesktop(HANDLE hWlx, HANDLE hToken, DWORD Flags, PWSTR pszDesktopName, PWLX_DESKTOP* ppDesktop);
58 int WINAPI WlxChangePasswordNotifyEx(HANDLE hWlx, PWLX_MPR_NOTIFY_INFO pMprInfo, DWORD dwChangeInfo, PWSTR ProviderName, PVOID Reserved);
59 BOOL WINAPI WlxCloseUserDesktop(HANDLE hWlx, PWLX_DESKTOP pDesktop, HANDLE hToken);
60 BOOL WINAPI WlxSetOption(HANDLE hWlx, DWORD Option, ULONG_PTR Value, ULONG_PTR* OldValue);
61 BOOL WINAPI WlxGetOption(HANDLE hWlx, DWORD Option, ULONG_PTR* Value);
62 VOID WINAPI WlxWin31Migrate(HANDLE hWlx);
63 BOOL WINAPI WlxQueryClientCredentials(PWLX_CLIENT_CREDENTIALS_INFO_V1_0 pCred);
64 BOOL WINAPI WlxQueryInetConnectorCredentials(PWLX_CLIENT_CREDENTIALS_INFO_V1_0 pCred);
65 DWORD WINAPI WlxQueryConsoleSwitchCredentials(PWLX_CONSOLESWITCH_CREDENTIALS_INFO_V1_0 pCred);
66 BOOL WINAPI WlxQueryTsLogonCredentials(PWLX_CLIENT_CREDENTIALS_INFO_V2_0 pCred);
67 BOOL WINAPI WlxDisconnect(void);
68 DWORD WINAPI WlxQueryTerminalServicesData(HANDLE hWlx, PWLX_TERMINAL_SERVICES_DATA pTSData, WCHAR* UserName, WCHAR* Domain);
69
70 typedef BOOL (WINAPI * PFWLXNEGOTIATE) (DWORD, DWORD *);
71 typedef BOOL (WINAPI * PFWLXINITIALIZE) (LPWSTR, HANDLE, PVOID, PVOID, PVOID *);
72 typedef VOID (WINAPI * PFWLXDISPLAYSASNOTICE) (PVOID);
73 typedef int (WINAPI * PFWLXLOGGEDOUTSAS) (PVOID, DWORD, PLUID, PSID, PDWORD,
74 PHANDLE, PWLX_MPR_NOTIFY_INFO,
75 PVOID *);
76 typedef BOOL (WINAPI * PFWLXACTIVATEUSERSHELL) (PVOID, PWSTR, PWSTR, PVOID);
77 typedef int (WINAPI * PFWLXLOGGEDONSAS) (PVOID, DWORD, PVOID);
78 typedef VOID (WINAPI * PFWLXDISPLAYLOCKEDNOTICE) (PVOID);
79 typedef int (WINAPI * PFWLXWKSTALOCKEDSAS) (PVOID, DWORD);
80 typedef BOOL (WINAPI * PFWLXISLOCKOK) (PVOID);
81 typedef BOOL (WINAPI * PFWLXISLOGOFFOK) (PVOID);
82 typedef VOID (WINAPI * PFWLXLOGOFF) (PVOID);
83 typedef VOID (WINAPI * PFWLXSHUTDOWN) (PVOID, DWORD);
84
85 /* version 1.1 */
86
87 typedef BOOL (WINAPI * PFWLXSCREENSAVERNOTIFY) (PVOID, BOOL *);
88 typedef BOOL (WINAPI * PFWLXSTARTAPPLICATION) (PVOID, PWSTR, PVOID, PWSTR);
89
90 /* version 1.3 */
91
92 typedef BOOL (WINAPI * PFWLXNETWORKPROVIDERLOAD) (PVOID, PWLX_MPR_NOTIFY_INFO);
93 typedef BOOL (WINAPI * PFWLXDISPLAYSTATUSMESSAGE) (PVOID, HDESK, DWORD, PWSTR, PWSTR);
94 typedef BOOL (WINAPI * PFWLXGETSTATUSMESSAGE) (PVOID, DWORD *, PWSTR, DWORD);
95 typedef BOOL (WINAPI * PFWLXREMOVESTATUSMESSAGE) (PVOID);
96
97 typedef struct _MSGINAFUNCTIONS
98 {
99 PFWLXNEGOTIATE WlxNegotiate;
100 PFWLXINITIALIZE WlxInitialize;
101 PFWLXDISPLAYSASNOTICE WlxDisplaySASNotice;
102 PFWLXLOGGEDOUTSAS WlxLoggedOutSAS;
103 PFWLXACTIVATEUSERSHELL WlxActivateUserShell;
104 PFWLXLOGGEDONSAS WlxLoggedOnSAS;
105 PFWLXDISPLAYLOCKEDNOTICE WlxDisplayLockedNotice;
106 PFWLXWKSTALOCKEDSAS WlxWkstaLockedSAS;
107 PFWLXISLOCKOK WlxIsLockOk;
108 PFWLXISLOGOFFOK WlxIsLogoffOk;
109 PFWLXLOGOFF WlxLogoff;
110 PFWLXSHUTDOWN WlxShutdown;
111
112 PFWLXSCREENSAVERNOTIFY WlxScreenSaverNotify;
113 PFWLXSTARTAPPLICATION WlxStartApplication;
114
115 PFWLXNETWORKPROVIDERLOAD WlxNetworkProviderLoad;
116 PFWLXDISPLAYSTATUSMESSAGE WlxDisplayStatusMessage;
117 PFWLXGETSTATUSMESSAGE WlxGetStatusMessage;
118 PFWLXREMOVESTATUSMESSAGE WlxRemoveStatusMessage;
119 } MSGINAFUNCTIONS, *PMSGINAFUNCTIONS;
120
121 typedef struct _MSGINAINSTANCE
122 {
123 HMODULE hDllInstance;
124 MSGINAFUNCTIONS Functions;
125 PVOID Context;
126 DWORD Version;
127 } MSGINAINSTANCE, *PMSGINAINSTANCE;
128
129 typedef struct _WLSESSION
130 {
131 MSGINAINSTANCE MsGina;
132 DWORD SASAction;
133 DWORD LogonStatus;
134 BOOL SuppressStatus;
135 BOOL TaskManHotkey;
136 HWND SASWindow;
137 HWINSTA InteractiveWindowStation;
138 LPWSTR InteractiveWindowStationName;
139 HDESK ApplicationDesktop;
140 HDESK WinlogonDesktop;
141 HDESK ScreenSaverDesktop;
142 LUID LogonId;
143 } WLSESSION, *PWLSESSION;
144
145 extern HINSTANCE hAppInstance;
146 extern PWLSESSION WLSession;
147
148 BOOL
149 InitializeSAS(PWLSESSION Session);
150 void
151 DispatchSAS(PWLSESSION Session, DWORD dwSasType);
152
153 #define LOGON_INITIALIZING 1
154 #define LOGON_NONE 2
155 #define LOGON_SHOWINGLOGON 3
156
157 #define LOGON_SHUTDOWN 9
158
159 #define WLX_SHUTTINGDOWN(Status) \
160 (((Status) == WLX_SAS_ACTION_SHUTDOWN) || \
161 ((Status) == WLX_SAS_ACTION_SHUTDOWN_POWER_OFF) || \
162 ((Status) == WLX_SAS_ACTION_SHUTDOWN_REBOOT) \
163 )
164
165 #define WLX_SUSPENDING(Status) \
166 (((Status) == WLX_SAS_ACTION_SHUTDOWN_SLEEP) || \
167 ((Status) == WLX_SAS_ACTION_SHUTDOWN_SLEEP2) || \
168 ((Status) == WLX_SAS_ACTION_SHUTDOWN_HIBERNATE) \
169 )
170
171 #define RemoveStatusMessage(Session) \
172 Session->MsGina.Functions.WlxRemoveStatusMessage(Session->MsGina.Context);
173 #define DisplaySASNotice(Session) \
174 Session->MsGina.Functions.WlxDisplaySASNotice(Session->MsGina.Context);
175
176 /* user32 */
177 BOOL WINAPI
178 UpdatePerUserSystemParameters(DWORD dwUnknown,
179 DWORD dwReserved);
180
181 #endif /* __WINLOGON_MAIN_H__ */
182
183 /* EOF */