1 /* $Id: debug.c,v 1.13 2003/12/30 05:10:32 hyperion Exp $
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * FILE: lib/ntdll/dbg/debug.c
6 * PURPOSE: User mode debugger support functions
7 * PROGRAMMER: Eric Kohl
12 /* INCLUDES *****************************************************************/
14 #include <ddk/ntddk.h>
15 #include <ntdll/rtl.h>
16 #include <rosrtl/string.h>
17 #include <rosrtl/thread.h>
18 #include <ntdll/dbg.h>
21 /* FUNCTIONS *****************************************************************/
23 static HANDLE DbgSsApiPort
= NULL
;
24 static HANDLE DbgSsReplyPort
= NULL
;
27 typedef struct _LPC_DBGSS_MESSAGE
34 } LPC_DBGSS_MESSAGE
, *PLPC_DBGSS_MESSAGE
;
37 /* FUNCTIONS *****************************************************************/
40 DbgSsServerThread(PVOID Unused
)
42 LPC_DBGSS_MESSAGE Message
;
47 Status
= NtReplyWaitReceivePort (DbgSsApiPort
,
50 (PLPC_MESSAGE
)&Message
);
51 if (!NT_SUCCESS(Status
))
53 DbgPrint ("DbgSs: NtReplyWaitReceivePort failed - Status == %lx\n",
60 /* FIXME: missing code!! */
71 DbgSsHandleKmApiMsg(ULONG Unknown1
,
74 return STATUS_NOT_IMPLEMENTED
;
82 DbgSsInitialize(HANDLE ReplyPort
,
87 SECURITY_QUALITY_OF_SERVICE Qos
;
88 UNICODE_STRING PortName
= ROS_STRING_INITIALIZER(L
"\\DbgSsApiPort");
91 Qos
.Length
= sizeof(SECURITY_QUALITY_OF_SERVICE
);
92 Qos
.ImpersonationLevel
= SecurityIdentification
;
93 Qos
.ContextTrackingMode
= SECURITY_DYNAMIC_TRACKING
;
94 Qos
.EffectiveOnly
= TRUE
;
96 Status
= NtConnectPort (&DbgSsApiPort
,
104 if (!NT_SUCCESS(Status
))
107 DbgSsReplyPort
= ReplyPort
;
108 // UnknownData1 = Unknown1;
109 // UnknownData2 = Unknown2;
110 // UnknownData3 = Unknown3;
112 Status
= RtlCreateUserThread (NtCurrentProcess (),
118 (PTHREAD_START_ROUTINE
)DbgSsServerThread
,
131 DbgUiConnectToDbg(VOID
)
133 SECURITY_QUALITY_OF_SERVICE Qos
;
134 UNICODE_STRING PortName
= ROS_STRING_INITIALIZER(L
"\\DbgUiApiPort");
139 Teb
= NtCurrentTeb ();
141 Qos
.Length
= sizeof(SECURITY_QUALITY_OF_SERVICE
);
142 Qos
.ImpersonationLevel
= SecurityIdentification
;
143 Qos
.ContextTrackingMode
= SECURITY_DYNAMIC_TRACKING
;
144 Qos
.EffectiveOnly
= TRUE
;
146 InfoSize
= sizeof(ULONG
);
148 Status
= NtConnectPort (&Teb
->DbgSsReserved
[1],
154 &Teb
->DbgSsReserved
[0],
156 if (!NT_SUCCESS(Status
))
158 Teb
->DbgSsReserved
[1] = NULL
;
162 NtRegisterThreadTerminatePort(Teb
->DbgSsReserved
[1]);
172 DbgUiContinue(PCLIENT_ID ClientId
,
173 ULONG ContinueStatus
)
175 return STATUS_NOT_IMPLEMENTED
;
183 DbgUiWaitStateChange(ULONG Unknown1
,
186 return STATUS_NOT_IMPLEMENTED
;
189 NTSTATUS STDCALL
DbgUiRemoteBreakin(VOID
)
193 RtlRosExitUserThread(0);
196 return STATUS_SUCCESS
;
199 NTSTATUS STDCALL
DbgUiIssueRemoteBreakin(HANDLE Process
)
202 CLIENT_ID cidClientId
;
204 ULONG nStackSize
= PAGE_SIZE
;
206 nErrCode
= RtlCreateUserThread
214 (PTHREAD_START_ROUTINE
)DbgUiRemoteBreakin
,
220 if(!NT_SUCCESS(nErrCode
)) return nErrCode
;
224 return STATUS_SUCCESS
;