Added some init code for the embedded DBGSS. Modified: trunk/reactos/subsys/smss/debug.c Modified: trunk/reactos/subsys/smss/smapi.c _____
Modified: trunk/reactos/subsys/smss/debug.c --- trunk/reactos/subsys/smss/debug.c 2005-02-24 21:28:49 UTC (rev 13735) +++ trunk/reactos/subsys/smss/debug.c 2005-02-24 22:20:43 UTC (rev 13736) @@ -26,66 +26,147 @@
#define NTOS_MODE_USER #include <ntos.h> #include <rosrtl/string.h> -#include <sm/api.h> #include "smss.h"
+#define NDEBUG +#include <debug.h> + + /* GLOBALS ***********************************************************/
-HANDLE DbgSsApiPort = INVALID_HANDLE_VALUE; -HANDLE DbgUiApiPort = INVALID_HANDLE_VALUE; +HANDLE DbgSsApiPort = (HANDLE) 0; +HANDLE DbgUiApiPort = (HANDLE) 0;
/* FUNCTIONS *********************************************************/
-NTSTATUS -SmInitializeDbgSs (VOID) +static VOID STDCALL +DbgSsApiPortThread (PVOID dummy) { - NTSTATUS Status; - UNICODE_STRING UnicodeString; - OBJECT_ATTRIBUTES ObjectAttributes; + NTSTATUS Status = STATUS_SUCCESS; + LPC_MAX_MESSAGE Request = {{0}}; + + while (TRUE) + { + Status = NtListenPort (DbgSsApiPort, & Request.Header); + if (!NT_SUCCESS(Status)) + { + DPRINT1("SM: %s: NtListenPort() failed! (Status==x%08lx)\n", __FUNCTION__, Status); + break; + } + /* TODO */ + } + NtTerminateThread(NtCurrentThread(),Status); +}
+static VOID STDCALL +DbgUiApiPortThread (PVOID dummy) +{ + NTSTATUS Status = STATUS_SUCCESS; + LPC_MAX_MESSAGE Request = {{0}}; + + while (TRUE) + { + Status = NtListenPort (DbgUiApiPort, & Request.Header); + if (!NT_SUCCESS(Status)) + { + DPRINT1("SM: %s: NtListenPort() failed! (Status==x%08lx)\n", __FUNCTION__, Status); + break; + } + /* TODO */ + } + NtTerminateThread(NtCurrentThread(),Status); +}
- /* Create the \DbgSsApiPort object (LPC) */ - RtlRosInitUnicodeStringFromLiteral(&UnicodeString, - L"\DbgSsApiPort"); - InitializeObjectAttributes(&ObjectAttributes, - &UnicodeString, - PORT_ALL_ACCESS, - NULL, - NULL); +static NTSTATUS STDCALL +SmpCreatePT (IN OUT PHANDLE hPort, + IN LPWSTR wcPortName, + IN ULONG ulMaxDataSize, + IN ULONG ulMaxMessageSize, + IN ULONG ulPoolCharge OPTIONAL, + IN VOID (STDCALL * procServingThread)(PVOID) OPTIONAL, + IN OUT PHANDLE phServingThread OPTIONAL) +{ + NTSTATUS Status = STATUS_SUCCESS; + UNICODE_STRING PortName = {0}; + OBJECT_ATTRIBUTES ObjectAttributes; + HANDLE Thread = (HANDLE) 0; + CLIENT_ID Cid = {0, 0};
- Status = NtCreatePort(&DbgSsApiPort, - &ObjectAttributes, - 0, - 0, - 0); + RtlInitUnicodeString (& PortName, wcPortName); + InitializeObjectAttributes (& ObjectAttributes, + & PortName, + PORT_ALL_ACCESS, + NULL, + NULL); + Status = NtCreatePort (hPort, + & ObjectAttributes, + ulMaxDataSize, + ulMaxMessageSize, + ulPoolCharge); + if(STATUS_SUCCESS != Status) + { + return Status; + } + /* Create thread for DbgSsApiPort */ + RtlCreateUserThread(NtCurrentProcess(), + NULL, + FALSE, + 0, + NULL, + NULL, + (PTHREAD_START_ROUTINE) procServingThread, + hPort, + & Thread, + & Cid); + if((HANDLE) 0 == Thread) + { + NtClose(*hPort); + Status = STATUS_UNSUCCESSFUL; + } + if(NULL != phServingThread) + { + *phServingThread = Thread; + } + return Status; +}
- if (!NT_SUCCESS(Status)) - { - return(Status); - } - DbgPrint("SMSS: %s: \DbgSsApiPort created\n",__FUNCTION__); +NTSTATUS +SmInitializeDbgSs (VOID) +{ + NTSTATUS Status = STATUS_SUCCESS; + HANDLE hDbgSsApiPortThread = (HANDLE) 0;
- /* Create the \DbgUiApiPort object (LPC) */ - RtlRosInitUnicodeStringFromLiteral(&UnicodeString, - L"\DbgUiApiPort"); - InitializeObjectAttributes(&ObjectAttributes, - &UnicodeString, - PORT_ALL_ACCESS, - NULL, + DPRINT("SM: %s called\n", __FUNCTION__); + + /* Create the \DbgSsApiPort object (LPC) */ + Status = SmpCreatePT(& DbgSsApiPort, + SM_DBGSS_PORT_NAME, + 0, /* MaxDataSize */ + 0, /* MaxMessageSize */ + 0, /* PoolCharge */ + DbgSsApiPortThread, + & hDbgSsApiPortThread); + if(!NT_SUCCESS(Status)) + { + DPRINT("SM: %s: DBGSS port not created\n",__FUNCTION__); + return Status; + } + /* Create the \DbgUiApiPort object (LPC) */ + Status = SmpCreatePT(& DbgUiApiPort, + SM_DBGUI_PORT_NAME, + 0, /* MaxDataSize */ + 0, /* MaxMessageSize */ + 0, /* PoolCharge */ + DbgUiApiPortThread, NULL); - - Status = NtCreatePort(&DbgUiApiPort, - &ObjectAttributes, - 0, - 0, - 0); - if (!NT_SUCCESS(Status)) - { - return(Status); - } - DbgPrint("SMSS: %s: \DbgUiApiPort created\n",__FUNCTION__); - - return STATUS_SUCCESS; + if(!NT_SUCCESS(Status)) + { + DPRINT("SM: %s: DBGUI port not created\n",__FUNCTION__); + NtClose (hDbgSsApiPortThread); + NtClose (DbgSsApiPort); + return Status; + } + return STATUS_SUCCESS; }
/* EOF */ _____
Modified: trunk/reactos/subsys/smss/smapi.c --- trunk/reactos/subsys/smss/smapi.c 2005-02-24 21:28:49 UTC (rev 13735) +++ trunk/reactos/subsys/smss/smapi.c 2005-02-24 22:20:43 UTC (rev 13736) @@ -9,7 +9,7 @@
#include "smss.h" #include <rosrtl/string.h>
-//#define NDEBUG +#define NDEBUG #include <debug.h>
/* GLOBAL VARIABLES *********************************************************/