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>
20 /* FUNCTIONS *****************************************************************/
22 static HANDLE DbgSsApiPort
= NULL
;
23 static HANDLE DbgSsReplyPort
= NULL
;
26 typedef struct _LPC_DBGSS_MESSAGE
33 } LPC_DBGSS_MESSAGE
, *PLPC_DBGSS_MESSAGE
;
36 /* FUNCTIONS *****************************************************************/
39 DbgSsServerThread(PVOID Unused
)
41 LPC_DBGSS_MESSAGE Message
;
46 Status
= NtReplyWaitReceivePort (DbgSsApiPort
,
49 (PLPC_MESSAGE
)&Message
);
50 if (!NT_SUCCESS(Status
))
52 DbgPrint ("DbgSs: NtReplyWaitReceivePort failed - Status == %lx\n",
59 /* FIXME: missing code!! */
70 DbgSsHandleKmApiMsg(ULONG Unknown1
,
73 return STATUS_NOT_IMPLEMENTED
;
81 DbgSsInitialize(HANDLE ReplyPort
,
86 SECURITY_QUALITY_OF_SERVICE Qos
;
87 UNICODE_STRING PortName
= ROS_STRING_INITIALIZER(L
"\\DbgSsApiPort");
90 Qos
.Length
= sizeof(SECURITY_QUALITY_OF_SERVICE
);
91 Qos
.ImpersonationLevel
= SecurityIdentification
;
92 Qos
.ContextTrackingMode
= SECURITY_DYNAMIC_TRACKING
;
93 Qos
.EffectiveOnly
= TRUE
;
95 Status
= NtConnectPort (&DbgSsApiPort
,
103 if (!NT_SUCCESS(Status
))
106 DbgSsReplyPort
= ReplyPort
;
107 // UnknownData1 = Unknown1;
108 // UnknownData2 = Unknown2;
109 // UnknownData3 = Unknown3;
111 Status
= RtlCreateUserThread (NtCurrentProcess (),
117 (PTHREAD_START_ROUTINE
)DbgSsServerThread
,
130 DbgUiConnectToDbg(VOID
)
132 SECURITY_QUALITY_OF_SERVICE Qos
;
133 UNICODE_STRING PortName
= ROS_STRING_INITIALIZER(L
"\\DbgUiApiPort");
138 Teb
= NtCurrentTeb ();
140 Qos
.Length
= sizeof(SECURITY_QUALITY_OF_SERVICE
);
141 Qos
.ImpersonationLevel
= SecurityIdentification
;
142 Qos
.ContextTrackingMode
= SECURITY_DYNAMIC_TRACKING
;
143 Qos
.EffectiveOnly
= TRUE
;
145 InfoSize
= sizeof(ULONG
);
147 Status
= NtConnectPort (&Teb
->DbgSsReserved
[1],
153 &Teb
->DbgSsReserved
[0],
155 if (!NT_SUCCESS(Status
))
157 Teb
->DbgSsReserved
[1] = NULL
;
161 NtRegisterThreadTerminatePort(Teb
->DbgSsReserved
[1]);
171 DbgUiContinue(PCLIENT_ID ClientId
,
172 ULONG ContinueStatus
)
174 return STATUS_NOT_IMPLEMENTED
;
182 DbgUiWaitStateChange(ULONG Unknown1
,
185 return STATUS_NOT_IMPLEMENTED
;
188 NTSTATUS STDCALL
DbgUiRemoteBreakin(VOID
)
192 RtlRosExitUserThread(0);
195 return STATUS_SUCCESS
;
198 NTSTATUS STDCALL
DbgUiIssueRemoteBreakin(HANDLE Process
)
201 CLIENT_ID cidClientId
;
203 ULONG nStackSize
= PAGE_SIZE
;
205 nErrCode
= RtlCreateUserThread
213 (PTHREAD_START_ROUTINE
)DbgUiRemoteBreakin
,
219 if(!NT_SUCCESS(nErrCode
)) return nErrCode
;
223 return STATUS_SUCCESS
;