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 *******************************************************************/
19 /* GLOBALS ********************************************************************/
21 HINSTANCE UserServerDllInstance
= NULL
;
24 HANDLE UserServerHeap
= NULL
; // Our own heap.
26 // Windows Server 2003 table from http://j00ru.vexillium.org/csrss_list/api_list.html#Windows_2k3
27 PCSR_API_ROUTINE UserServerApiDispatchTable
[UserpMaxApiNumber
- USERSRV_FIRST_API_NUMBER
] =
32 SrvRegisterServicesProcess
, // Not present in Win7
34 SrvGetThreadConsoleDesktop
, // Not present in Win7
36 SrvRegisterLogonProcess
, // Not present in Win7
37 SrvCreateSystemThreads
,
38 SrvRecordShutdownReason
,
39 // SrvCancelShutdown, // Added in Vista
40 // SrvConsoleHandleOperation, // Added in Win7
41 // SrvGetSetShutdownBlockReason, // Added in Vista
44 BOOLEAN UserServerApiServerValidTable
[UserpMaxApiNumber
- USERSRV_FIRST_API_NUMBER
] =
46 FALSE
, // SrvExitWindowsEx
49 FALSE
, // SrvRegisterServicesProcess
50 FALSE
, // SrvActivateDebugger
51 TRUE
, // SrvGetThreadConsoleDesktop
52 FALSE
, // SrvDeviceEvent
53 FALSE
, // SrvRegisterLogonProcess
54 FALSE
, // SrvCreateSystemThreads
55 FALSE
, // SrvRecordShutdownReason
56 // FALSE, // SrvCancelShutdown
57 // FALSE, // SrvConsoleHandleOperation
58 // FALSE, // SrvGetSetShutdownBlockReason
62 * On Windows Server 2003, CSR Servers contain
63 * the API Names Table only in Debug Builds.
66 PCHAR UserServerApiNameTable
[UserpMaxApiNumber
- USERSRV_FIRST_API_NUMBER
] =
71 "SrvRegisterServicesProcess",
72 "SrvActivateDebugger",
73 "SrvGetThreadConsoleDesktop",
75 "SrvRegisterLogonProcess",
76 "SrvCreateSystemThreads",
77 "SrvRecordShutdownReason",
78 // "SrvCancelShutdown",
79 // "SrvConsoleHandleOperation",
80 // "SrvGetSetShutdownBlockReason",
84 /* FUNCTIONS ******************************************************************/
86 // PUSER_SOUND_SENTRY. Used in basesrv.dll
87 BOOL WINAPI
_UserSoundSentry(VOID
)
89 // TODO: Do something.
93 // From win32ss/user/win32csr/dllmain.c
96 PrivateCsrssManualGuiCheck(LONG Check
)
98 NtUserCallOneParam(Check
, ONEPARAM_ROUTINE_CSRSS_GUICHECK
);
103 CreateSystemThreads(PVOID pParam
)
105 NtUserCallOneParam((DWORD
)pParam
, ONEPARAM_ROUTINE_CREATESYSTEMTHREADS
);
106 DPRINT1("This thread should not terminate!\n");
110 CSR_API(SrvCreateSystemThreads
)
112 DPRINT1("%s not yet implemented\n", __FUNCTION__
);
113 return STATUS_NOT_IMPLEMENTED
;
116 CSR_API(SrvActivateDebugger
)
118 DPRINT1("%s not yet implemented\n", __FUNCTION__
);
119 return STATUS_NOT_IMPLEMENTED
;
122 CSR_API(SrvGetThreadConsoleDesktop
)
124 DPRINT1("%s not yet implemented\n", __FUNCTION__
);
125 return STATUS_NOT_IMPLEMENTED
;
128 CSR_API(SrvDeviceEvent
)
130 DPRINT1("%s not yet implemented\n", __FUNCTION__
);
131 return STATUS_NOT_IMPLEMENTED
;
134 CSR_SERVER_DLL_INIT(UserServerDllInitialization
)
136 /*** From win32csr... ***/
141 /*** END - From win32csr... ***/
143 /* Initialize the memory */
144 UserServerHeap
= RtlGetProcessHeap();
146 /* Initialize the video */
147 NtUserInitialize(0, NULL
, NULL
); //
148 PrivateCsrssManualGuiCheck(0);
150 /* Setup the DLL Object */
151 LoadedServerDll
->ApiBase
= USERSRV_FIRST_API_NUMBER
;
152 LoadedServerDll
->HighestApiSupported
= UserpMaxApiNumber
;
153 LoadedServerDll
->DispatchTable
= UserServerApiDispatchTable
;
154 LoadedServerDll
->ValidTable
= UserServerApiServerValidTable
;
156 LoadedServerDll
->NameTable
= UserServerApiNameTable
;
158 LoadedServerDll
->SizeOfProcessData
= 0;
159 LoadedServerDll
->ConnectCallback
= NULL
;
160 LoadedServerDll
->DisconnectCallback
= NULL
;
161 LoadedServerDll
->HardErrorCallback
= UserServerHardError
;
162 LoadedServerDll
->ShutdownProcessCallback
= NULL
;
164 UserServerDllInstance
= LoadedServerDll
->ServerHandle
;
166 /*** From win32csr... See r54125 ***/
167 /* Start the Raw Input Thread and the Desktop Thread */
168 for (i
= 0; i
< 2; ++i
)
170 Status
= RtlCreateUserThread(NtCurrentProcess(),
173 (PVOID
)i
, &ServerThread
, &ClientId
);
174 if (NT_SUCCESS(Status
))
176 NtResumeThread(ServerThread
, NULL
);
177 NtClose(ServerThread
);
180 DPRINT1("Cannot start Raw Input Thread!\n");
182 /*** END - From win32csr... ***/
185 return STATUS_SUCCESS
;