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 <ntdll/dbg.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 = UNICODE_STRING_INITIALIZER(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 = UNICODE_STRING_INITIALIZER(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 RtlExitUserThread(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;