2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS User API Server DLL
4 * FILE: win32ss/user/winsrv/usersrv/init.c
5 * PURPOSE: Initialization
6 * PROGRAMMERS: Dmitry Philippov (shedon@mail.ru)
7 * Hermes Belusca-Maito (hermes.belusca@sfr.fr)
10 /* INCLUDES *******************************************************************/
18 /* GLOBALS ********************************************************************/
20 HINSTANCE UserServerDllInstance
= NULL
;
23 HANDLE UserServerHeap
= NULL
; // Our own heap.
25 // Windows Server 2003 table from http://j00ru.vexillium.org/csrss_list/api_list.html#Windows_2k3
26 PCSR_API_ROUTINE UserServerApiDispatchTable
[UserpMaxApiNumber
- USERSRV_FIRST_API_NUMBER
] =
31 SrvRegisterServicesProcess
, // Not present in Win7
33 SrvGetThreadConsoleDesktop
, // Not present in Win7
35 SrvRegisterLogonProcess
, // Not present in Win7
36 SrvCreateSystemThreads
,
37 SrvRecordShutdownReason
,
38 // SrvCancelShutdown, // Added in Vista
39 // SrvConsoleHandleOperation, // Added in Win7
40 // SrvGetSetShutdownBlockReason, // Added in Vista
43 BOOLEAN UserServerApiServerValidTable
[UserpMaxApiNumber
- USERSRV_FIRST_API_NUMBER
] =
45 FALSE
, // SrvExitWindowsEx
48 FALSE
, // SrvRegisterServicesProcess
49 FALSE
, // SrvActivateDebugger
50 TRUE
, // SrvGetThreadConsoleDesktop
51 FALSE
, // SrvDeviceEvent
52 FALSE
, // SrvRegisterLogonProcess
53 FALSE
, // SrvCreateSystemThreads
54 FALSE
, // SrvRecordShutdownReason
55 // FALSE, // SrvCancelShutdown
56 // FALSE, // SrvConsoleHandleOperation
57 // FALSE, // SrvGetSetShutdownBlockReason
61 * On Windows Server 2003, CSR Servers contain
62 * the API Names Table only in Debug Builds.
65 PCHAR UserServerApiNameTable
[UserpMaxApiNumber
- USERSRV_FIRST_API_NUMBER
] =
70 "SrvRegisterServicesProcess",
71 "SrvActivateDebugger",
72 "SrvGetThreadConsoleDesktop",
74 "SrvRegisterLogonProcess",
75 "SrvCreateSystemThreads",
76 "SrvRecordShutdownReason",
77 // "SrvCancelShutdown",
78 // "SrvConsoleHandleOperation",
79 // "SrvGetSetShutdownBlockReason",
83 /* FUNCTIONS ******************************************************************/
85 // PUSER_SOUND_SENTRY. Used in basesrv.dll
86 BOOL WINAPI
_UserSoundSentry(VOID
)
88 // TODO: Do something.
92 // From win32ss/user/win32csr/dllmain.c
95 PrivateCsrssManualGuiCheck(LONG Check
)
97 NtUserCallOneParam(Check
, ONEPARAM_ROUTINE_CSRSS_GUICHECK
);
102 CreateSystemThreads(PVOID pParam
)
104 NtUserCallOneParam((DWORD
)pParam
, ONEPARAM_ROUTINE_CREATESYSTEMTHREADS
);
105 DPRINT1("This thread should not terminate!\n");
109 CSR_API(SrvCreateSystemThreads
)
111 DPRINT1("%s not yet implemented\n", __FUNCTION__
);
112 return STATUS_NOT_IMPLEMENTED
;
115 CSR_API(SrvActivateDebugger
)
117 DPRINT1("%s not yet implemented\n", __FUNCTION__
);
118 return STATUS_NOT_IMPLEMENTED
;
121 CSR_API(SrvGetThreadConsoleDesktop
)
123 DPRINT1("%s not yet implemented\n", __FUNCTION__
);
124 return STATUS_NOT_IMPLEMENTED
;
127 CSR_API(SrvDeviceEvent
)
129 DPRINT1("%s not yet implemented\n", __FUNCTION__
);
130 return STATUS_NOT_IMPLEMENTED
;
133 CSR_SERVER_DLL_INIT(UserServerDllInitialization
)
135 /*** From win32csr... ***/
140 /*** END - From win32csr... ***/
142 /* Initialize the memory */
143 UserServerHeap
= RtlGetProcessHeap();
145 /* Initialize the video */
146 NtUserInitialize(0, NULL
, NULL
); //
147 PrivateCsrssManualGuiCheck(0);
149 /* Setup the DLL Object */
150 LoadedServerDll
->ApiBase
= USERSRV_FIRST_API_NUMBER
;
151 LoadedServerDll
->HighestApiSupported
= UserpMaxApiNumber
;
152 LoadedServerDll
->DispatchTable
= UserServerApiDispatchTable
;
153 LoadedServerDll
->ValidTable
= UserServerApiServerValidTable
;
155 LoadedServerDll
->NameTable
= UserServerApiNameTable
;
157 LoadedServerDll
->SizeOfProcessData
= 0;
158 LoadedServerDll
->ConnectCallback
= NULL
;
159 LoadedServerDll
->DisconnectCallback
= NULL
;
160 LoadedServerDll
->HardErrorCallback
= UserServerHardError
;
161 LoadedServerDll
->ShutdownProcessCallback
= NULL
;
163 UserServerDllInstance
= LoadedServerDll
->ServerHandle
;
165 /*** From win32csr... See r54125 ***/
166 /* Start the Raw Input Thread and the Desktop Thread */
167 for (i
= 0; i
< 2; ++i
)
169 Status
= RtlCreateUserThread(NtCurrentProcess(),
172 (PVOID
)i
, &ServerThread
, &ClientId
);
173 if (NT_SUCCESS(Status
))
175 NtResumeThread(ServerThread
, NULL
);
176 NtClose(ServerThread
);
179 DPRINT1("Cannot start Raw Input Thread!\n");
181 /*** END - From win32csr... ***/
184 return STATUS_SUCCESS
;