3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS system libraries
5 * FILE: subsys/csrss/win32csr/dllmain.c
6 * PURPOSE: Initialization
9 /* INCLUDES ******************************************************************/
16 /* Not defined in any header file */
17 extern VOID STDCALL
PrivateCsrssManualGuiCheck(LONG Check
);
18 extern VOID STDCALL
PrivateCsrssInitialized();
20 /* GLOBALS *******************************************************************/
22 HANDLE Win32CsrApiHeap
;
23 HINSTANCE Win32CsrDllHandle
= NULL
;
24 static CSRSS_EXPORTED_FUNCS CsrExports
;
26 static CSRSS_API_DEFINITION Win32CsrApiDefinitions
[] =
28 CSRSS_DEFINE_API(WRITE_CONSOLE
, CsrWriteConsole
),
29 CSRSS_DEFINE_API(READ_CONSOLE
, CsrReadConsole
),
30 CSRSS_DEFINE_API(ALLOC_CONSOLE
, CsrAllocConsole
),
31 CSRSS_DEFINE_API(FREE_CONSOLE
, CsrFreeConsole
),
32 CSRSS_DEFINE_API(SCREEN_BUFFER_INFO
, CsrGetScreenBufferInfo
),
33 CSRSS_DEFINE_API(SET_CURSOR
, CsrSetCursor
),
34 CSRSS_DEFINE_API(FILL_OUTPUT
, CsrFillOutputChar
),
35 CSRSS_DEFINE_API(READ_INPUT
, CsrReadInputEvent
),
36 CSRSS_DEFINE_API(WRITE_CONSOLE_OUTPUT_CHAR
, CsrWriteConsoleOutputChar
),
37 CSRSS_DEFINE_API(WRITE_CONSOLE_OUTPUT_ATTRIB
, CsrWriteConsoleOutputAttrib
),
38 CSRSS_DEFINE_API(FILL_OUTPUT_ATTRIB
, CsrFillOutputAttrib
),
39 CSRSS_DEFINE_API(GET_CURSOR_INFO
, CsrGetCursorInfo
),
40 CSRSS_DEFINE_API(SET_CURSOR_INFO
, CsrSetCursorInfo
),
41 CSRSS_DEFINE_API(SET_ATTRIB
, CsrSetTextAttrib
),
42 CSRSS_DEFINE_API(GET_CONSOLE_MODE
, CsrGetConsoleMode
),
43 CSRSS_DEFINE_API(SET_CONSOLE_MODE
, CsrSetConsoleMode
),
44 CSRSS_DEFINE_API(CREATE_SCREEN_BUFFER
, CsrCreateScreenBuffer
),
45 CSRSS_DEFINE_API(SET_SCREEN_BUFFER
, CsrSetScreenBuffer
),
46 CSRSS_DEFINE_API(SET_TITLE
, CsrSetTitle
),
47 CSRSS_DEFINE_API(GET_TITLE
, CsrGetTitle
),
48 CSRSS_DEFINE_API(WRITE_CONSOLE_OUTPUT
, CsrWriteConsoleOutput
),
49 CSRSS_DEFINE_API(FLUSH_INPUT_BUFFER
, CsrFlushInputBuffer
),
50 CSRSS_DEFINE_API(SCROLL_CONSOLE_SCREEN_BUFFER
, CsrScrollConsoleScreenBuffer
),
51 CSRSS_DEFINE_API(READ_CONSOLE_OUTPUT_CHAR
, CsrReadConsoleOutputChar
),
52 CSRSS_DEFINE_API(READ_CONSOLE_OUTPUT_ATTRIB
, CsrReadConsoleOutputAttrib
),
53 CSRSS_DEFINE_API(GET_NUM_INPUT_EVENTS
, CsrGetNumberOfConsoleInputEvents
),
54 CSRSS_DEFINE_API(EXIT_REACTOS
, CsrExitReactos
),
55 CSRSS_DEFINE_API(PEEK_CONSOLE_INPUT
, CsrPeekConsoleInput
),
56 CSRSS_DEFINE_API(READ_CONSOLE_OUTPUT
, CsrReadConsoleOutput
),
57 CSRSS_DEFINE_API(WRITE_CONSOLE_INPUT
, CsrWriteConsoleInput
),
58 CSRSS_DEFINE_API(SETGET_CONSOLE_HW_STATE
, CsrHardwareStateProperty
),
59 CSRSS_DEFINE_API(GET_CONSOLE_WINDOW
, CsrGetConsoleWindow
),
60 CSRSS_DEFINE_API(CREATE_DESKTOP
, CsrCreateDesktop
),
61 CSRSS_DEFINE_API(SHOW_DESKTOP
, CsrShowDesktop
),
62 CSRSS_DEFINE_API(HIDE_DESKTOP
, CsrHideDesktop
),
63 CSRSS_DEFINE_API(SET_CONSOLE_ICON
, CsrSetConsoleIcon
),
64 CSRSS_DEFINE_API(SET_LOGON_NOTIFY_WINDOW
, CsrSetLogonNotifyWindow
),
65 CSRSS_DEFINE_API(REGISTER_LOGON_PROCESS
, CsrRegisterLogonProcess
),
66 CSRSS_DEFINE_API(GET_CONSOLE_CP
, CsrGetConsoleCodePage
),
67 CSRSS_DEFINE_API(SET_CONSOLE_CP
, CsrSetConsoleCodePage
),
68 CSRSS_DEFINE_API(GET_CONSOLE_OUTPUT_CP
, CsrGetConsoleOutputCodePage
),
69 CSRSS_DEFINE_API(SET_CONSOLE_OUTPUT_CP
, CsrSetConsoleOutputCodePage
),
70 CSRSS_DEFINE_API(GET_PROCESS_LIST
, CsrGetProcessList
),
74 static CSRSS_OBJECT_DEFINITION Win32CsrObjectDefinitions
[] =
76 { CONIO_CONSOLE_MAGIC
, ConioDeleteConsole
},
77 { CONIO_SCREEN_BUFFER_MAGIC
, ConioDeleteScreenBuffer
},
81 /* FUNCTIONS *****************************************************************/
88 if (DLL_PROCESS_ATTACH
== dwReason
)
90 Win32CsrDllHandle
= hDll
;
97 Win32CsrInsertObject(PCSRSS_PROCESS_DATA ProcessData
,
101 InitializeCriticalSection(&(Object
->Lock
));
103 return (CsrExports
.CsrInsertObjectProc
)(ProcessData
, Handle
, Object
);
107 Win32CsrGetObject(PCSRSS_PROCESS_DATA ProcessData
,
111 return (CsrExports
.CsrGetObjectProc
)(ProcessData
, Handle
, Object
);
115 Win32CsrLockObject(PCSRSS_PROCESS_DATA ProcessData
,
122 Status
= (CsrExports
.CsrGetObjectProc
)(ProcessData
, Handle
, Object
);
123 if (! NT_SUCCESS(Status
))
128 if ((*Object
)->Type
!= Type
)
130 return STATUS_INVALID_HANDLE
;
133 EnterCriticalSection(&((*Object
)->Lock
));
135 return STATUS_SUCCESS
;
139 Win32CsrUnlockObject(Object_t
*Object
)
141 LeaveCriticalSection(&(Object
->Lock
));
145 Win32CsrReleaseObject(PCSRSS_PROCESS_DATA ProcessData
,
148 return (CsrExports
.CsrReleaseObjectProc
)(ProcessData
, Object
);
152 Win32CsrEnumProcesses(CSRSS_ENUM_PROCESS_PROC EnumProc
,
155 return (CsrExports
.CsrEnumProcessesProc
)(EnumProc
, Context
);
159 Win32CsrInitComplete(void)
161 PrivateCsrssInitialized();
167 Win32CsrInitialization(PCSRSS_API_DEFINITION
*ApiDefinitions
,
168 PCSRSS_OBJECT_DEFINITION
*ObjectDefinitions
,
169 CSRPLUGIN_INIT_COMPLETE_PROC
*InitComplete
,
170 PCSRSS_EXPORTED_FUNCS Exports
,
175 CsrExports
= *Exports
;
176 Win32CsrApiHeap
= CsrssApiHeap
;
178 PrivateCsrssManualGuiCheck(0);
179 CsrInitConsoleSupport();
180 ThreadHandle
= CreateThread(NULL
, 0, (LPTHREAD_START_ROUTINE
) Console_Api
, NULL
, 0, NULL
);
181 if (NULL
== ThreadHandle
)
183 DPRINT1("CSR: Unable to create console thread\n");
186 CloseHandle(ThreadHandle
);
188 *ApiDefinitions
= Win32CsrApiDefinitions
;
189 *ObjectDefinitions
= Win32CsrObjectDefinitions
;
190 *InitComplete
= Win32CsrInitComplete
;