* Hermes Belusca-Maito (hermes.belusca@sfr.fr)
*/
-#include "winsrv.h"
+/* INCLUDES *******************************************************************/
-/* Public Win32K Headers */
-// For calling NtUser...()
-#include <ntuser.h>
+#include "winsrv.h"
+#include "api.h"
#define NDEBUG
#include <debug.h>
-HANDLE DllHandle = NULL;
-// HANDLE WinSrvApiPort = NULL;
+/* GLOBALS ********************************************************************/
-/* Memory */
-HANDLE UserSrvHeap = NULL; // Our own heap.
-// HANDLE BaseSrvSharedHeap = NULL; // Shared heap with CSR. (CsrSrvSharedSectionHeap)
-// PBASE_STATIC_SERVER_DATA BaseStaticServerData = NULL; // Data that we can share amongst processes. Initialized inside BaseSrvSharedHeap.
+HINSTANCE UserServerDllInstance = NULL;
+/* Memory */
+HANDLE UserServerHeap = NULL; // Our own heap.
-PCSR_API_ROUTINE UserServerApiDispatchTable[UserpMaxApiNumber] =
+// Windows Server 2003 table from http://j00ru.vexillium.org/csrss_list/api_list.html#Windows_2k3
+PCSR_API_ROUTINE UserServerApiDispatchTable[UserpMaxApiNumber - USERSRV_FIRST_API_NUMBER] =
{
SrvExitWindowsEx,
// SrvEndTask,
// SrvGetSetShutdownBlockReason, // Added in Vista
};
-BOOLEAN UserServerApiServerValidTable[UserpMaxApiNumber] =
+BOOLEAN UserServerApiServerValidTable[UserpMaxApiNumber - USERSRV_FIRST_API_NUMBER] =
{
FALSE, // SrvExitWindowsEx
// FALSE, // SrvEndTask
// FALSE, // SrvCancelShutdown
// FALSE, // SrvConsoleHandleOperation
// FALSE, // SrvGetSetShutdownBlockReason
-
- // FALSE
};
-PCHAR UserServerApiNameTable[UserpMaxApiNumber] =
+PCHAR UserServerApiNameTable[UserpMaxApiNumber - USERSRV_FIRST_API_NUMBER] =
{
"SrvExitWindowsEx",
// "SrvEndTask",
// "SrvCancelShutdown",
// "SrvConsoleHandleOperation",
// "SrvGetSetShutdownBlockReason",
-
- // NULL
-};
-
-/*
-PCSR_API_ROUTINE Win32CsrApiDefinitions[] =
-{
- CsrGetHandle,
- CsrGetHandle,
- CsrCloseHandle,
- CsrVerifyHandle,
- CsrDuplicateHandle,
- CsrGetInputWaitHandle,
- CsrFillOutputChar,
- CsrReadInputEvent,
- CsrWriteConsoleOutputChar,
- CsrWriteConsoleOutputAttrib,
- CsrFillOutputAttrib,
- CsrSetTextAttrib,
- CsrWriteConsoleOutput,
- CsrFlushInputBuffer,
- CsrReadConsoleOutputChar,
- CsrReadConsoleOutputAttrib,
- CsrExitReactos,
- CsrHardwareStateProperty,
- CsrCreateDesktop,
- CsrShowDesktop,
- CsrHideDesktop,
- CsrSetLogonNotifyWindow,
- CsrRegisterLogonProcess,
- CsrGenerateCtrlEvent,
-};
-
-static CSRSS_API_DEFINITION Win32CsrApiDefinitions[] =
-{
- CSRSS_DEFINE_API(GET_INPUT_HANDLE, CsrGetHandle),
- CSRSS_DEFINE_API(GET_OUTPUT_HANDLE, CsrGetHandle),
- CSRSS_DEFINE_API(CLOSE_HANDLE, CsrCloseHandle),
- CSRSS_DEFINE_API(VERIFY_HANDLE, CsrVerifyHandle),
- CSRSS_DEFINE_API(DUPLICATE_HANDLE, CsrDuplicateHandle),
- CSRSS_DEFINE_API(GET_INPUT_WAIT_HANDLE, CsrGetInputWaitHandle),
- CSRSS_DEFINE_API(WRITE_CONSOLE, CsrWriteConsole),
- CSRSS_DEFINE_API(READ_CONSOLE, CsrReadConsole),
- CSRSS_DEFINE_API(ALLOC_CONSOLE, CsrAllocConsole),
- CSRSS_DEFINE_API(FREE_CONSOLE, CsrFreeConsole),
- CSRSS_DEFINE_API(SCREEN_BUFFER_INFO, CsrGetScreenBufferInfo),
- CSRSS_DEFINE_API(SET_CURSOR, CsrSetCursor),
- CSRSS_DEFINE_API(FILL_OUTPUT, CsrFillOutputChar),
- CSRSS_DEFINE_API(READ_INPUT, CsrReadInputEvent),
- CSRSS_DEFINE_API(WRITE_CONSOLE_OUTPUT_CHAR, CsrWriteConsoleOutputChar),
- CSRSS_DEFINE_API(WRITE_CONSOLE_OUTPUT_ATTRIB, CsrWriteConsoleOutputAttrib),
- CSRSS_DEFINE_API(FILL_OUTPUT_ATTRIB, CsrFillOutputAttrib),
- CSRSS_DEFINE_API(GET_CURSOR_INFO, CsrGetCursorInfo),
- CSRSS_DEFINE_API(SET_CURSOR_INFO, CsrSetCursorInfo),
- CSRSS_DEFINE_API(SET_ATTRIB, CsrSetTextAttrib),
- CSRSS_DEFINE_API(GET_CONSOLE_MODE, CsrGetConsoleMode),
- CSRSS_DEFINE_API(SET_CONSOLE_MODE, CsrSetConsoleMode),
- CSRSS_DEFINE_API(CREATE_SCREEN_BUFFER, CsrCreateScreenBuffer),
- CSRSS_DEFINE_API(SET_SCREEN_BUFFER, CsrSetScreenBuffer),
- CSRSS_DEFINE_API(SET_TITLE, CsrSetTitle),
- CSRSS_DEFINE_API(GET_TITLE, CsrGetTitle),
- CSRSS_DEFINE_API(WRITE_CONSOLE_OUTPUT, CsrWriteConsoleOutput),
- CSRSS_DEFINE_API(FLUSH_INPUT_BUFFER, CsrFlushInputBuffer),
- CSRSS_DEFINE_API(SCROLL_CONSOLE_SCREEN_BUFFER, CsrScrollConsoleScreenBuffer),
- CSRSS_DEFINE_API(READ_CONSOLE_OUTPUT_CHAR, CsrReadConsoleOutputChar),
- CSRSS_DEFINE_API(READ_CONSOLE_OUTPUT_ATTRIB, CsrReadConsoleOutputAttrib),
- CSRSS_DEFINE_API(GET_NUM_INPUT_EVENTS, CsrGetNumberOfConsoleInputEvents),
- CSRSS_DEFINE_API(EXIT_REACTOS, CsrExitReactos),
- CSRSS_DEFINE_API(PEEK_CONSOLE_INPUT, CsrPeekConsoleInput),
- CSRSS_DEFINE_API(READ_CONSOLE_OUTPUT, CsrReadConsoleOutput),
- CSRSS_DEFINE_API(WRITE_CONSOLE_INPUT, CsrWriteConsoleInput),
- CSRSS_DEFINE_API(SETGET_CONSOLE_HW_STATE, CsrHardwareStateProperty),
- CSRSS_DEFINE_API(GET_CONSOLE_WINDOW, CsrGetConsoleWindow),
- CSRSS_DEFINE_API(CREATE_DESKTOP, CsrCreateDesktop),
- CSRSS_DEFINE_API(SHOW_DESKTOP, CsrShowDesktop),
- CSRSS_DEFINE_API(HIDE_DESKTOP, CsrHideDesktop),
- CSRSS_DEFINE_API(SET_CONSOLE_ICON, CsrSetConsoleIcon),
- CSRSS_DEFINE_API(SET_LOGON_NOTIFY_WINDOW, CsrSetLogonNotifyWindow),
- CSRSS_DEFINE_API(REGISTER_LOGON_PROCESS, CsrRegisterLogonProcess),
- CSRSS_DEFINE_API(GET_CONSOLE_CP, CsrGetConsoleCodePage),
- CSRSS_DEFINE_API(SET_CONSOLE_CP, CsrSetConsoleCodePage),
- CSRSS_DEFINE_API(GET_CONSOLE_OUTPUT_CP, CsrGetConsoleOutputCodePage),
- CSRSS_DEFINE_API(SET_CONSOLE_OUTPUT_CP, CsrSetConsoleOutputCodePage),
- CSRSS_DEFINE_API(GET_PROCESS_LIST, CsrGetProcessList),
- CSRSS_DEFINE_API(ADD_CONSOLE_ALIAS, CsrAddConsoleAlias),
- CSRSS_DEFINE_API(GET_CONSOLE_ALIAS, CsrGetConsoleAlias),
- CSRSS_DEFINE_API(GET_ALL_CONSOLE_ALIASES, CsrGetAllConsoleAliases),
- CSRSS_DEFINE_API(GET_ALL_CONSOLE_ALIASES_LENGTH, CsrGetAllConsoleAliasesLength),
- CSRSS_DEFINE_API(GET_CONSOLE_ALIASES_EXES, CsrGetConsoleAliasesExes),
- CSRSS_DEFINE_API(GET_CONSOLE_ALIASES_EXES_LENGTH, CsrGetConsoleAliasesExesLength),
- CSRSS_DEFINE_API(GENERATE_CTRL_EVENT, CsrGenerateCtrlEvent),
- CSRSS_DEFINE_API(SET_SCREEN_BUFFER_SIZE, CsrSetScreenBufferSize),
- CSRSS_DEFINE_API(GET_CONSOLE_SELECTION_INFO, CsrGetConsoleSelectionInfo),
- CSRSS_DEFINE_API(GET_COMMAND_HISTORY_LENGTH, CsrGetCommandHistoryLength),
- CSRSS_DEFINE_API(GET_COMMAND_HISTORY, CsrGetCommandHistory),
- CSRSS_DEFINE_API(EXPUNGE_COMMAND_HISTORY, CsrExpungeCommandHistory),
- CSRSS_DEFINE_API(SET_HISTORY_NUMBER_COMMANDS, CsrSetHistoryNumberCommands),
- CSRSS_DEFINE_API(GET_HISTORY_INFO, CsrGetHistoryInfo),
- CSRSS_DEFINE_API(SET_HISTORY_INFO, CsrSetHistoryInfo),
- { 0, 0, NULL }
};
-*/
/* FUNCTIONS ******************************************************************/
-/*
-VOID WINAPI UserStaticServerThread(PVOID x)
+// PUSER_SOUND_SENTRY. Used in basesrv.dll
+BOOL WINAPI _UserSoundSentry(VOID)
{
- // NTSTATUS Status = STATUS_SUCCESS;
- PPORT_MESSAGE Request = (PPORT_MESSAGE)x;
- PPORT_MESSAGE Reply = NULL;
- ULONG MessageType = 0;
-
- DPRINT("WINSRV: %s(%08lx) called\n", __FUNCTION__, x);
-
- MessageType = Request->u2.s2.Type;
- DPRINT("WINSRV: %s(%08lx) received a message (Type=%d)\n",
- __FUNCTION__, x, MessageType);
- switch (MessageType)
- {
- default:
- Reply = Request;
- /\* Status = *\/ NtReplyPort(WinSrvApiPort, Reply);
- break;
- }
+ // TODO: Do something.
+ return TRUE;
}
-*/
ULONG
InitializeVideoAddressSpace(VOID)
NtUserCallOneParam(Check, ONEPARAM_ROUTINE_CSRSS_GUICHECK);
}
+/*** HACK from win32csr... ***/
static HHOOK hhk = NULL;
-/*** HACK from win32csr... ***/
LRESULT
CALLBACK
KeyboardHookProc(int nCode,
CSR_SERVER_DLL_INIT(UserServerDllInitialization)
{
-/*
- NTSTATUS Status = STATUS_SUCCESS;
-
- DPRINT("WINSRV: %s called\n", __FUNCTION__);
-
- // Get the listening port from csrsrv.dll
- WinSrvApiPort = CsrQueryApiPort ();
- if (NULL == WinSrvApiPort)
- {
- return STATUS_UNSUCCESSFUL;
- }
- // Register our message dispatcher
- Status = CsrAddStaticServerThread (UserStaticServerThread);
- if (NT_SUCCESS(Status))
- {
- //TODO: perform the real user server internal initialization here
- }
- return Status;
-*/
-
/*** From win32csr... ***/
HANDLE ServerThread;
CLIENT_ID ClientId;
UINT i;
/*** END - From win32csr... ***/
- /* Initialize memory */
- UserSrvHeap = RtlGetProcessHeap(); // Initialize our own heap.
- // BaseSrvSharedHeap = LoadedServerDll->SharedSection; // Get the CSR shared heap.
- // LoadedServerDll->SharedSection = BaseStaticServerData;
+ /* Initialize the memory */
+ UserServerHeap = RtlGetProcessHeap();
+ /* Initialize the video */
CsrpInitVideo();
NtUserInitialize(0, NULL, NULL);
PrivateCsrssManualGuiCheck(0);
LoadedServerDll->NameTable = UserServerApiNameTable;
LoadedServerDll->SizeOfProcessData = 0;
LoadedServerDll->ConnectCallback = NULL;
- // LoadedServerDll->DisconnectCallback = Win32CsrReleaseConsole;
- // LoadedServerDll->NewProcessCallback = Win32CsrDuplicateHandleTable;
- LoadedServerDll->HardErrorCallback = Win32CsrHardError;
+ LoadedServerDll->DisconnectCallback = NULL;
+ LoadedServerDll->HardErrorCallback = UserServerHardError;
+ LoadedServerDll->ShutdownProcessCallback = NULL;
-/*** From win32csr... ***/
+ UserServerDllInstance = LoadedServerDll->ServerHandle;
+
+/*** From win32csr... See r54125 ***/
/* Start the Raw Input Thread and the Desktop Thread */
for (i = 0; i < 2; ++i)
{
return STATUS_SUCCESS;
}
-// PUSER_SOUND_SENTRY. Used in basesrv.dll
-BOOL WINAPI _UserSoundSentry(VOID)
-{
- // Do something.
- return TRUE;
-}
-
BOOL
WINAPI
-DllMain(IN HANDLE hDll,
+DllMain(IN HINSTANCE hInstanceDll,
IN DWORD dwReason,
IN LPVOID lpReserved)
{
+ UNREFERENCED_PARAMETER(hInstanceDll);
UNREFERENCED_PARAMETER(dwReason);
UNREFERENCED_PARAMETER(lpReserved);
if (DLL_PROCESS_ATTACH == dwReason)
{
- DllHandle = hDll;
-
+ DPRINT1("WINSRV - HACK: Use keyboard hook hack\n");
/*** HACK from win32csr... ***/
-
//
// HACK HACK HACK ReactOS to BOOT! Initialization BUG ALERT! See bug 5655.
//