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
;
22 static NTSTATUS (STDCALL
* DbgSsCallback
)(PVOID
,PVOID
) = 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 DbgSsCallback
= Callback
;
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 VOID STDCALL
DbgUiRemoteBreakin(VOID
)
191 RtlExitUserThread(STATUS_SUCCESS
);
194 NTSTATUS STDCALL
DbgUiIssueRemoteBreakin(HANDLE Process
)
197 CLIENT_ID cidClientId
;
199 ULONG nStackSize
= PAGE_SIZE
;
201 nErrCode
= RtlCreateUserThread
209 (PTHREAD_START_ROUTINE
)DbgUiRemoteBreakin
,
215 if(!NT_SUCCESS(nErrCode
)) return nErrCode
;
219 return STATUS_SUCCESS
;