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 *****************************************************************/
18 /* FUNCTIONS *****************************************************************/
20 static HANDLE DbgSsApiPort
= NULL
;
21 static HANDLE DbgSsReplyPort
= NULL
;
24 typedef struct _LPC_DBGSS_MESSAGE
31 } LPC_DBGSS_MESSAGE
, *PLPC_DBGSS_MESSAGE
;
34 /* FUNCTIONS *****************************************************************/
37 DbgSsServerThread(PVOID Unused
)
39 LPC_DBGSS_MESSAGE Message
;
44 Status
= NtReplyWaitReceivePort (DbgSsApiPort
,
47 (PLPC_MESSAGE
)&Message
);
48 if (!NT_SUCCESS(Status
))
50 DbgPrint ("DbgSs: NtReplyWaitReceivePort failed - Status == %lx\n",
57 /* FIXME: missing code!! */
68 DbgSsHandleKmApiMsg(ULONG Unknown1
,
71 return STATUS_NOT_IMPLEMENTED
;
79 DbgSsInitialize(HANDLE ReplyPort
,
84 SECURITY_QUALITY_OF_SERVICE Qos
;
85 UNICODE_STRING PortName
= RTL_CONSTANT_STRING(L
"\\DbgSsApiPort");
88 Qos
.Length
= sizeof(SECURITY_QUALITY_OF_SERVICE
);
89 Qos
.ImpersonationLevel
= SecurityIdentification
;
90 Qos
.ContextTrackingMode
= SECURITY_DYNAMIC_TRACKING
;
91 Qos
.EffectiveOnly
= TRUE
;
93 Status
= NtConnectPort (&DbgSsApiPort
,
101 if (!NT_SUCCESS(Status
))
104 DbgSsReplyPort
= ReplyPort
;
105 // UnknownData1 = Unknown1;
106 // UnknownData2 = Unknown2;
107 // UnknownData3 = Unknown3;
109 Status
= RtlCreateUserThread (NtCurrentProcess (),
115 (PTHREAD_START_ROUTINE
)DbgSsServerThread
,
128 DbgUiConnectToDbg(VOID
)
130 SECURITY_QUALITY_OF_SERVICE Qos
;
131 UNICODE_STRING PortName
= RTL_CONSTANT_STRING(L
"\\DbgUiApiPort");
136 Teb
= NtCurrentTeb ();
138 Qos
.Length
= sizeof(SECURITY_QUALITY_OF_SERVICE
);
139 Qos
.ImpersonationLevel
= SecurityIdentification
;
140 Qos
.ContextTrackingMode
= SECURITY_DYNAMIC_TRACKING
;
141 Qos
.EffectiveOnly
= TRUE
;
143 InfoSize
= sizeof(ULONG
);
145 Status
= NtConnectPort (&Teb
->DbgSsReserved
[1],
151 &Teb
->DbgSsReserved
[0],
153 if (!NT_SUCCESS(Status
))
155 Teb
->DbgSsReserved
[1] = NULL
;
159 NtRegisterThreadTerminatePort(Teb
->DbgSsReserved
[1]);
169 DbgUiContinue(PCLIENT_ID ClientId
,
170 ULONG ContinueStatus
)
172 return STATUS_NOT_IMPLEMENTED
;
180 DbgUiWaitStateChange(ULONG Unknown1
,
183 return STATUS_NOT_IMPLEMENTED
;
186 VOID STDCALL
DbgUiRemoteBreakin(VOID
)
190 RtlExitUserThread(STATUS_SUCCESS
);
193 NTSTATUS STDCALL
DbgUiIssueRemoteBreakin(HANDLE Process
)
196 CLIENT_ID cidClientId
;
198 ULONG nStackSize
= PAGE_SIZE
;
200 nErrCode
= RtlCreateUserThread
208 (PTHREAD_START_ROUTINE
)DbgUiRemoteBreakin
,
214 if(!NT_SUCCESS(nErrCode
)) return nErrCode
;
218 return STATUS_SUCCESS
;