Synchronize with trunk's revision r57629.
[reactos.git] / win32ss / user / win32csr / dllmain.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS system libraries
4 * FILE: subsys/csrss/win32csr/dllmain.c
5 * PURPOSE: Initialization
6 * PROGRAMMERS: Dmitry Philippov (shedon@mail.ru)
7 */
8
9 /* INCLUDES ******************************************************************/
10
11 #include "win32csr.h"
12
13 #define NDEBUG
14 #include <debug.h>
15
16 /* GLOBALS *******************************************************************/
17
18 HANDLE Win32CsrApiHeap;
19 HINSTANCE Win32CsrDllHandle = NULL;
20
21 PCSR_API_ROUTINE Win32CsrApiDefinitions[3] =
22 {
23 CsrCreateDesktop,
24 CsrShowDesktop,
25 CsrHideDesktop,
26 };
27
28 BOOLEAN Win32CsrApiServerValidTable[3] =
29 {
30 FALSE,
31 FALSE,
32 FALSE
33 };
34
35 PCHAR Win32CsrApiNameTable[3] =
36 {
37 "CsrCreateDesktop",
38 "CsrShowDesktop",
39 "CsrHideDesktop",
40 };
41
42 static HHOOK hhk = NULL;
43
44 /* FUNCTIONS *****************************************************************/
45
46 LRESULT
47 CALLBACK
48 KeyboardHookProc(
49 int nCode,
50 WPARAM wParam,
51 LPARAM lParam)
52 {
53 return CallNextHookEx(hhk, nCode, wParam, lParam);
54 }
55
56 BOOL WINAPI
57 DllMain(HANDLE hDll,
58 DWORD dwReason,
59 LPVOID lpReserved)
60 {
61 if (DLL_PROCESS_ATTACH == dwReason)
62 {
63 Win32CsrDllHandle = hDll;
64 //
65 // HACK HACK HACK ReactOS to BOOT! Initialization BUG ALERT! See bug 5655.
66 //
67 hhk = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHookProc, NULL, 0);
68 // BUG ALERT! BUG ALERT! BUG ALERT! BUG ALERT! BUG ALERT! BUG ALERT! BUG ALERT!
69 // BUG ALERT! BUG ALERT! BUG ALERT! BUG ALERT! BUG ALERT! BUG ALERT! BUG ALERT!
70 // BUG ALERT! BUG ALERT! BUG ALERT! BUG ALERT! BUG ALERT! BUG ALERT! BUG ALERT!
71 }
72
73 return TRUE;
74 }
75
76 VOID
77 WINAPI
78 PrivateCsrssManualGuiCheck(LONG Check)
79 {
80 NtUserCallOneParam(Check, ONEPARAM_ROUTINE_CSRSS_GUICHECK);
81 }
82
83 DWORD
84 WINAPI
85 CreateSystemThreads(PVOID pParam)
86 {
87 NtUserCallOneParam((DWORD)pParam, ONEPARAM_ROUTINE_CREATESYSTEMTHREADS);
88 DPRINT1("This thread should not terminate!\n");
89 return 0;
90 }
91
92 CSR_SERVER_DLL_INIT(Win32CsrInitialization)
93 {
94 HANDLE ServerThread;
95 CLIENT_ID ClientId;
96 NTSTATUS Status;
97
98 Win32CsrApiHeap = RtlGetProcessHeap();
99
100 NtUserInitialize(0, NULL, NULL);
101
102 PrivateCsrssManualGuiCheck(0);
103
104 /* Setup the DLL Object */
105 LoadedServerDll->ApiBase = 4;
106 LoadedServerDll->HighestApiSupported = 3;
107 LoadedServerDll->DispatchTable = Win32CsrApiDefinitions;
108 LoadedServerDll->ValidTable = Win32CsrApiServerValidTable;
109 LoadedServerDll->NameTable = Win32CsrApiNameTable;
110 // LoadedServerDll->SizeOfProcessData = 0;
111 // LoadedServerDll->ConnectCallback = NULL;
112 // LoadedServerDll->DisconnectCallback = NULL;
113 // LoadedServerDll->HardErrorCallback = Win32CsrHardError;
114 // LoadedServerDll->NewProcessCallback = NULL;
115 // LoadedServerDll->DisconnectCallback = NULL;
116
117 /* Start Raw Input Threads */
118 Status = RtlCreateUserThread(NtCurrentProcess(), NULL, TRUE, 0, 0, 0, (PTHREAD_START_ROUTINE)CreateSystemThreads, (PVOID)0, &ServerThread, &ClientId);
119 if (NT_SUCCESS(Status))
120 {
121 NtResumeThread(ServerThread, NULL);
122 NtClose(ServerThread);
123 }
124 else
125 DPRINT1("Cannot start Raw Input Thread!\n");
126
127 return STATUS_SUCCESS;
128 }
129
130 /* EOF */