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)
9 /* INCLUDES ******************************************************************/
14 /* Not defined in any header file */
15 extern VOID WINAPI
PrivateCsrssManualGuiCheck(LONG Check
);
16 extern VOID WINAPI
PrivateCsrssInitialized();
17 extern VOID WINAPI
InitializeAppSwitchHook();
19 /* GLOBALS *******************************************************************/
21 HANDLE Win32CsrApiHeap
;
22 HINSTANCE Win32CsrDllHandle
= NULL
;
23 static CSRSS_EXPORTED_FUNCS CsrExports
;
25 static CSRSS_API_DEFINITION Win32CsrApiDefinitions
[] =
27 CSRSS_DEFINE_API(WRITE_CONSOLE
, CsrWriteConsole
),
28 CSRSS_DEFINE_API(READ_CONSOLE
, CsrReadConsole
),
29 CSRSS_DEFINE_API(ALLOC_CONSOLE
, CsrAllocConsole
),
30 CSRSS_DEFINE_API(FREE_CONSOLE
, CsrFreeConsole
),
31 CSRSS_DEFINE_API(SCREEN_BUFFER_INFO
, CsrGetScreenBufferInfo
),
32 CSRSS_DEFINE_API(SET_CURSOR
, CsrSetCursor
),
33 CSRSS_DEFINE_API(FILL_OUTPUT
, CsrFillOutputChar
),
34 CSRSS_DEFINE_API(READ_INPUT
, CsrReadInputEvent
),
35 CSRSS_DEFINE_API(WRITE_CONSOLE_OUTPUT_CHAR
, CsrWriteConsoleOutputChar
),
36 CSRSS_DEFINE_API(WRITE_CONSOLE_OUTPUT_ATTRIB
, CsrWriteConsoleOutputAttrib
),
37 CSRSS_DEFINE_API(FILL_OUTPUT_ATTRIB
, CsrFillOutputAttrib
),
38 CSRSS_DEFINE_API(GET_CURSOR_INFO
, CsrGetCursorInfo
),
39 CSRSS_DEFINE_API(SET_CURSOR_INFO
, CsrSetCursorInfo
),
40 CSRSS_DEFINE_API(SET_ATTRIB
, CsrSetTextAttrib
),
41 CSRSS_DEFINE_API(GET_CONSOLE_MODE
, CsrGetConsoleMode
),
42 CSRSS_DEFINE_API(SET_CONSOLE_MODE
, CsrSetConsoleMode
),
43 CSRSS_DEFINE_API(CREATE_SCREEN_BUFFER
, CsrCreateScreenBuffer
),
44 CSRSS_DEFINE_API(SET_SCREEN_BUFFER
, CsrSetScreenBuffer
),
45 CSRSS_DEFINE_API(SET_TITLE
, CsrSetTitle
),
46 CSRSS_DEFINE_API(GET_TITLE
, CsrGetTitle
),
47 CSRSS_DEFINE_API(WRITE_CONSOLE_OUTPUT
, CsrWriteConsoleOutput
),
48 CSRSS_DEFINE_API(FLUSH_INPUT_BUFFER
, CsrFlushInputBuffer
),
49 CSRSS_DEFINE_API(SCROLL_CONSOLE_SCREEN_BUFFER
, CsrScrollConsoleScreenBuffer
),
50 CSRSS_DEFINE_API(READ_CONSOLE_OUTPUT_CHAR
, CsrReadConsoleOutputChar
),
51 CSRSS_DEFINE_API(READ_CONSOLE_OUTPUT_ATTRIB
, CsrReadConsoleOutputAttrib
),
52 CSRSS_DEFINE_API(GET_NUM_INPUT_EVENTS
, CsrGetNumberOfConsoleInputEvents
),
53 CSRSS_DEFINE_API(EXIT_REACTOS
, CsrExitReactos
),
54 CSRSS_DEFINE_API(PEEK_CONSOLE_INPUT
, CsrPeekConsoleInput
),
55 CSRSS_DEFINE_API(READ_CONSOLE_OUTPUT
, CsrReadConsoleOutput
),
56 CSRSS_DEFINE_API(WRITE_CONSOLE_INPUT
, CsrWriteConsoleInput
),
57 CSRSS_DEFINE_API(SETGET_CONSOLE_HW_STATE
, CsrHardwareStateProperty
),
58 CSRSS_DEFINE_API(GET_CONSOLE_WINDOW
, CsrGetConsoleWindow
),
59 CSRSS_DEFINE_API(CREATE_DESKTOP
, CsrCreateDesktop
),
60 CSRSS_DEFINE_API(SHOW_DESKTOP
, CsrShowDesktop
),
61 CSRSS_DEFINE_API(HIDE_DESKTOP
, CsrHideDesktop
),
62 CSRSS_DEFINE_API(SET_CONSOLE_ICON
, CsrSetConsoleIcon
),
63 CSRSS_DEFINE_API(SET_LOGON_NOTIFY_WINDOW
, CsrSetLogonNotifyWindow
),
64 CSRSS_DEFINE_API(REGISTER_LOGON_PROCESS
, CsrRegisterLogonProcess
),
65 CSRSS_DEFINE_API(GET_CONSOLE_CP
, CsrGetConsoleCodePage
),
66 CSRSS_DEFINE_API(SET_CONSOLE_CP
, CsrSetConsoleCodePage
),
67 CSRSS_DEFINE_API(GET_CONSOLE_OUTPUT_CP
, CsrGetConsoleOutputCodePage
),
68 CSRSS_DEFINE_API(SET_CONSOLE_OUTPUT_CP
, CsrSetConsoleOutputCodePage
),
69 CSRSS_DEFINE_API(GET_PROCESS_LIST
, CsrGetProcessList
),
70 CSRSS_DEFINE_API(ADD_CONSOLE_ALIAS
, CsrAddConsoleAlias
),
71 CSRSS_DEFINE_API(GET_CONSOLE_ALIAS
, CsrGetConsoleAlias
),
72 CSRSS_DEFINE_API(GET_ALL_CONSOLE_ALIASES
, CsrGetAllConsoleAliases
),
73 CSRSS_DEFINE_API(GET_ALL_CONSOLE_ALIASES_LENGTH
, CsrGetAllConsoleAliasesLength
),
74 CSRSS_DEFINE_API(GET_CONSOLE_ALIASES_EXES
, CsrGetConsoleAliasesExes
),
75 CSRSS_DEFINE_API(GET_CONSOLE_ALIASES_EXES_LENGTH
, CsrGetConsoleAliasesExesLength
),
76 CSRSS_DEFINE_API(GENERATE_CTRL_EVENT
, CsrGenerateCtrlEvent
),
77 CSRSS_DEFINE_API(SET_SCREEN_BUFFER_SIZE
, CsrSetScreenBufferSize
),
81 static CSRSS_OBJECT_DEFINITION Win32CsrObjectDefinitions
[] =
83 { CONIO_CONSOLE_MAGIC
, ConioDeleteConsole
},
84 { CONIO_SCREEN_BUFFER_MAGIC
, ConioDeleteScreenBuffer
},
88 /* FUNCTIONS *****************************************************************/
95 if (DLL_PROCESS_ATTACH
== dwReason
)
97 Win32CsrDllHandle
= hDll
;
98 InitializeAppSwitchHook();
105 Win32CsrInsertObject(PCSRSS_PROCESS_DATA ProcessData
,
111 return (CsrExports
.CsrInsertObjectProc
)(ProcessData
, Handle
, Object
, Access
, Inheritable
);
115 Win32CsrGetObject(PCSRSS_PROCESS_DATA ProcessData
,
120 return (CsrExports
.CsrGetObjectProc
)(ProcessData
, Handle
, Object
, Access
);
124 Win32CsrLockObject(PCSRSS_PROCESS_DATA ProcessData
,
132 Status
= (CsrExports
.CsrGetObjectProc
)(ProcessData
, Handle
, Object
, Access
);
133 if (! NT_SUCCESS(Status
))
138 if ((*Object
)->Type
!= Type
)
140 (CsrExports
.CsrReleaseObjectByPointerProc
)(*Object
);
141 return STATUS_INVALID_HANDLE
;
144 EnterCriticalSection(&((*Object
)->Lock
));
146 return STATUS_SUCCESS
;
150 Win32CsrUnlockObject(Object_t
*Object
)
152 LeaveCriticalSection(&(Object
->Lock
));
153 (CsrExports
.CsrReleaseObjectByPointerProc
)(Object
);
157 Win32CsrReleaseObjectByPointer(Object_t
*Object
)
159 return (CsrExports
.CsrReleaseObjectByPointerProc
)(Object
);
163 Win32CsrReleaseObject(PCSRSS_PROCESS_DATA ProcessData
,
166 return (CsrExports
.CsrReleaseObjectProc
)(ProcessData
, Object
);
170 Win32CsrEnumProcesses(CSRSS_ENUM_PROCESS_PROC EnumProc
,
173 return (CsrExports
.CsrEnumProcessesProc
)(EnumProc
, Context
);
177 Win32CsrInitComplete(void)
179 PrivateCsrssInitialized();
185 Win32CsrInitialization(PCSRSS_API_DEFINITION
*ApiDefinitions
,
186 PCSRSS_OBJECT_DEFINITION
*ObjectDefinitions
,
187 CSRPLUGIN_INIT_COMPLETE_PROC
*InitComplete
,
188 CSRPLUGIN_HARDERROR_PROC
*HardError
,
189 PCSRSS_EXPORTED_FUNCS Exports
,
193 CsrExports
= *Exports
;
194 Win32CsrApiHeap
= CsrssApiHeap
;
196 Status
= NtUserInitialize(0 ,NULL
, NULL
);
198 PrivateCsrssManualGuiCheck(0);
199 CsrInitConsoleSupport();
201 *ApiDefinitions
= Win32CsrApiDefinitions
;
202 *ObjectDefinitions
= Win32CsrObjectDefinitions
;
203 *InitComplete
= Win32CsrInitComplete
;
204 *HardError
= Win32CsrHardError
;