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 *****************************************************************/
17 #include <rosrtl/thread.h>
19 /* FUNCTIONS *****************************************************************/
21 static HANDLE DbgSsApiPort
= NULL
;
22 static HANDLE DbgSsReplyPort
= NULL
;
25 typedef struct _LPC_DBGSS_MESSAGE
32 } LPC_DBGSS_MESSAGE
, *PLPC_DBGSS_MESSAGE
;
35 /* FUNCTIONS *****************************************************************/
38 DbgSsServerThread(PVOID Unused
)
40 LPC_DBGSS_MESSAGE Message
;
45 Status
= NtReplyWaitReceivePort (DbgSsApiPort
,
48 (PLPC_MESSAGE
)&Message
);
49 if (!NT_SUCCESS(Status
))
51 DbgPrint ("DbgSs: NtReplyWaitReceivePort failed - Status == %lx\n",
58 /* FIXME: missing code!! */
69 DbgSsHandleKmApiMsg(ULONG Unknown1
,
72 return STATUS_NOT_IMPLEMENTED
;
80 DbgSsInitialize(HANDLE ReplyPort
,
85 SECURITY_QUALITY_OF_SERVICE Qos
;
86 UNICODE_STRING PortName
= RTL_CONSTANT_STRING(L
"\\DbgSsApiPort");
89 Qos
.Length
= sizeof(SECURITY_QUALITY_OF_SERVICE
);
90 Qos
.ImpersonationLevel
= SecurityIdentification
;
91 Qos
.ContextTrackingMode
= SECURITY_DYNAMIC_TRACKING
;
92 Qos
.EffectiveOnly
= TRUE
;
94 Status
= NtConnectPort (&DbgSsApiPort
,
102 if (!NT_SUCCESS(Status
))
105 DbgSsReplyPort
= ReplyPort
;
106 // UnknownData1 = Unknown1;
107 // UnknownData2 = Unknown2;
108 // UnknownData3 = Unknown3;
110 Status
= RtlCreateUserThread (NtCurrentProcess (),
116 (PTHREAD_START_ROUTINE
)DbgSsServerThread
,
129 DbgUiConnectToDbg(VOID
)
131 SECURITY_QUALITY_OF_SERVICE Qos
;
132 UNICODE_STRING PortName
= RTL_CONSTANT_STRING(L
"\\DbgUiApiPort");
137 Teb
= NtCurrentTeb ();
139 Qos
.Length
= sizeof(SECURITY_QUALITY_OF_SERVICE
);
140 Qos
.ImpersonationLevel
= SecurityIdentification
;
141 Qos
.ContextTrackingMode
= SECURITY_DYNAMIC_TRACKING
;
142 Qos
.EffectiveOnly
= TRUE
;
144 InfoSize
= sizeof(ULONG
);
146 Status
= NtConnectPort (&Teb
->DbgSsReserved
[1],
152 &Teb
->DbgSsReserved
[0],
154 if (!NT_SUCCESS(Status
))
156 Teb
->DbgSsReserved
[1] = NULL
;
160 NtRegisterThreadTerminatePort(Teb
->DbgSsReserved
[1]);
170 DbgUiContinue(PCLIENT_ID ClientId
,
171 ULONG ContinueStatus
)
173 return STATUS_NOT_IMPLEMENTED
;
181 DbgUiWaitStateChange(ULONG Unknown1
,
184 return STATUS_NOT_IMPLEMENTED
;
187 NTSTATUS STDCALL
DbgUiRemoteBreakin(VOID
)
191 RtlRosExitUserThread(0);
194 return STATUS_SUCCESS
;
197 NTSTATUS STDCALL
DbgUiIssueRemoteBreakin(HANDLE Process
)
200 CLIENT_ID cidClientId
;
202 ULONG nStackSize
= PAGE_SIZE
;
204 nErrCode
= RtlCreateUserThread
212 (PTHREAD_START_ROUTINE
)DbgUiRemoteBreakin
,
218 if(!NT_SUCCESS(nErrCode
)) return nErrCode
;
222 return STATUS_SUCCESS
;