-/* $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
/* 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;
Status = NtReplyWaitReceivePort (DbgSsApiPort,
NULL,
NULL,
- (PLPC_MESSAGE)&Message);
+ (PPORT_MESSAGE)&Message);
if (!NT_SUCCESS(Status))
{
DbgPrint ("DbgSs: NtReplyWaitReceivePort failed - Status == %lx\n",
}
+/*
+ * @unimplemented
+ */
NTSTATUS STDCALL
DbgSsHandleKmApiMsg(ULONG Unknown1,
HANDLE EventHandle)
}
+/*
+ * @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);
return Status;
DbgSsReplyPort = ReplyPort;
-// UnknownData1 = Unknown1;
+ DbgSsCallback = Callback;
// UnknownData2 = Unknown2;
// UnknownData3 = Unknown3;
NULL,
FALSE,
0,
- NULL,
- NULL,
+ 0,
+ 0,
(PTHREAD_START_ROUTINE)DbgSsServerThread,
NULL,
NULL,
}
+/*
+ * @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;
}
+/*
+ * @unimplemented
+ */
NTSTATUS STDCALL
DbgUiContinue(PCLIENT_ID ClientId,
ULONG ContinueStatus)
}
+/*
+ * @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 */