doing my good dead for the day
[reactos.git] / reactos / lib / ntdll / dbg / debug.c
index abe495a..edf9e73 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: debug.c,v 1.5 2002/09/07 15:12:39 chorns Exp $
+/* $Id$
  *
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS kernel
@@ -11,9 +11,7 @@
 
 /* INCLUDES *****************************************************************/
 
-#define NTOS_USER_MODE
-#include <ntos.h>
-
+#include <ntdll.h>
 #define NDEBUG
 #include <debug.h>
 
 
 static HANDLE DbgSsApiPort = NULL;
 static HANDLE DbgSsReplyPort = NULL;
+static NTSTATUS (STDCALL * DbgSsCallback)(PVOID,PVOID) = NULL;
 
 
 typedef struct _LPC_DBGSS_MESSAGE
 {
-       LPC_MESSAGE Header;
+       PORT_MESSAGE Header;
        ULONG Unknown1;
        ULONG Unknown2;
        ULONG Unknown3;
@@ -46,7 +45,7 @@ DbgSsServerThread(PVOID Unused)
                Status = NtReplyWaitReceivePort (DbgSsApiPort,
                                                 NULL,
                                                 NULL,
-                                                (PLPC_MESSAGE)&Message);
+                                                (PPORT_MESSAGE)&Message);
                if (!NT_SUCCESS(Status))
                {
                        DbgPrint ("DbgSs: NtReplyWaitReceivePort failed - Status == %lx\n",
@@ -63,6 +62,9 @@ DbgSsServerThread(PVOID Unused)
 }
 
 
+/*
+ * @unimplemented
+ */
 NTSTATUS STDCALL
 DbgSsHandleKmApiMsg(ULONG Unknown1,
                    HANDLE EventHandle)
@@ -71,14 +73,17 @@ DbgSsHandleKmApiMsg(ULONG Unknown1,
 }
 
 
+/*
+ * @implemented
+ */
 NTSTATUS STDCALL
 DbgSsInitialize(HANDLE ReplyPort,
-               ULONG Unknown1,
+               PVOID Callback,
                ULONG Unknown2,
                ULONG Unknown3)
 {
        SECURITY_QUALITY_OF_SERVICE Qos;
-       UNICODE_STRING PortName = UNICODE_STRING_INITIALIZER(L"\\DbgSsApiPort");
+       UNICODE_STRING PortName = RTL_CONSTANT_STRING(L"\\DbgSsApiPort");
        NTSTATUS Status;
 
        Qos.Length = sizeof(SECURITY_QUALITY_OF_SERVICE);
@@ -98,7 +103,7 @@ DbgSsInitialize(HANDLE ReplyPort,
                return Status;
 
        DbgSsReplyPort = ReplyPort;
-//     UnknownData1 = Unknown1;
+       DbgSsCallback = Callback;
 //     UnknownData2 = Unknown2;
 //     UnknownData3 = Unknown3;
 
@@ -106,8 +111,8 @@ DbgSsInitialize(HANDLE ReplyPort,
                                      NULL,
                                      FALSE,
                                      0,
-                                     NULL,
-                                     NULL,
+                                     0,
+                                     0,
                                      (PTHREAD_START_ROUTINE)DbgSsServerThread,
                                      NULL,
                                      NULL,
@@ -117,11 +122,14 @@ DbgSsInitialize(HANDLE ReplyPort,
 }
 
 
+/*
+ * @implemented
+ */
 NTSTATUS STDCALL
 DbgUiConnectToDbg(VOID)
 {
        SECURITY_QUALITY_OF_SERVICE Qos;
-       UNICODE_STRING PortName = UNICODE_STRING_INITIALIZER(L"\\DbgUiApiPort");
+       UNICODE_STRING PortName = RTL_CONSTANT_STRING(L"\\DbgUiApiPort");
        NTSTATUS Status;
        PTEB Teb;
        ULONG InfoSize;
@@ -155,6 +163,9 @@ DbgUiConnectToDbg(VOID)
 }
 
 
+/*
+ * @unimplemented
+ */
 NTSTATUS STDCALL
 DbgUiContinue(PCLIENT_ID ClientId,
              ULONG ContinueStatus)
@@ -163,11 +174,49 @@ DbgUiContinue(PCLIENT_ID ClientId,
 }
 
 
+/*
+ * @unimplemented
+ */
 NTSTATUS STDCALL
-DbgUiWaitStateChange(ULONG Unknown1,
-                    ULONG Unknown2)
+DbgUiWaitStateChange(PDBGUI_WAIT_STATE_CHANGE DbgUiWaitStateCange,
+                     PLARGE_INTEGER TimeOut)
 {
   return STATUS_NOT_IMPLEMENTED;
 }
 
+VOID STDCALL DbgUiRemoteBreakin(VOID)
+{
+ DbgBreakPoint();
+
+ RtlExitUserThread(STATUS_SUCCESS);
+}
+
+NTSTATUS STDCALL DbgUiIssueRemoteBreakin(HANDLE Process)
+{
+ HANDLE hThread;
+ CLIENT_ID cidClientId;
+ NTSTATUS nErrCode;
+ ULONG nStackSize = PAGE_SIZE;
+
+ nErrCode = RtlCreateUserThread
+ (
+  Process,
+  NULL,
+  FALSE,
+  0,
+  nStackSize,
+  nStackSize,
+  (PTHREAD_START_ROUTINE)DbgUiRemoteBreakin,
+  NULL,
+  &hThread,
+  &cidClientId
+ );
+
+ if(!NT_SUCCESS(nErrCode)) return nErrCode;
+
+ NtClose(hThread);
+
+ return STATUS_SUCCESS;
+}
+
 /* EOF */