00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
#include "precomp.h"
00014
#pragma hdrstop
00015
00016
00017
00018
00019
#include "ntcsrmsg.h"
00020
#include "csrmsg.h"
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 BOOL xxxActivateDebugger(
00033 UINT fsModifiers)
00034 {
00035 ULONG ArgLength;
00036
USER_API_MSG m;
00037
PACTIVATEDEBUGGERMSG a = &m.
u.ActivateDebugger;
00038
PEPROCESS Process;
00039 HANDLE hDebugPort;
00040
NTSTATUS Status;
00041
if (fsModifiers & MOD_CONTROL) {
00042
#if DBG
00043
if (RipOutput(0, RIP_WARNING,
"User debugger", 0,
"Debug prompt",
NULL)) {
00044 DbgBreakPoint();
00045 }
00046
#endif
00047
return FALSE;
00048 }
else if (fsModifiers & MOD_SHIFT) {
00049
00050
00051
00052
00053
if (
gpepCSRSS->
DebugPort ==
NULL)
00054
return FALSE;
00055
00056 a->
ClientId.UniqueProcess =
gpepCSRSS->
UniqueProcessId;
00057 }
else {
00058
00059
if ((
gpqForeground ==
NULL) || (
gpqForeground->
ptiKeyboard ==
NULL))
00060
return FALSE;
00061
00062 a->
ClientId =
gpqForeground->
ptiKeyboard->pEThread->Cid;
00063
00064
LeaveCrit();
00065
Status =
LockProcessByClientId(a->
ClientId.UniqueProcess, &Process);
00066
EnterCrit();
00067
00068
00069
00070
00071
00072
if (!
NT_SUCCESS(
Status))
00073
return FALSE;
00074
00075 hDebugPort = Process->
DebugPort;
00076
UnlockProcess(Process);
00077
00078
if (hDebugPort ==
NULL)
00079
return FALSE;
00080 }
00081
00082
00083
00084
00085
if (
CsrApiPort !=
NULL) {
00086 ArgLength =
sizeof(*a);
00087 ArgLength |= (ArgLength << 16);
00088 ArgLength += ((
sizeof( CSR_API_MSG ) -
sizeof( m.
u )) << 16) |
00089 (FIELD_OFFSET( CSR_API_MSG, u ) -
sizeof( m.
h ));
00090 m.
h.u1.Length = ArgLength;
00091 m.
h.u2.ZeroInit = 0;
00092 m.
CaptureBuffer =
NULL;
00093 m.
ApiNumber = CSR_MAKE_API_NUMBER( USERSRV_SERVERDLL_INDEX,
00094
UserpActivateDebugger);
00095
LeaveCrit();
00096
Status =
LpcRequestPort(
CsrApiPort, (PPORT_MESSAGE)&m);
00097
EnterCrit();
00098 UserAssert(
NT_SUCCESS(
Status));
00099 }
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
if (fsModifiers & MOD_SHIFT)
00111
return TRUE;
00112
else
00113
return FALSE;
00114 }
00115
00116 DWORD GetRipComponent(VOID) {
return RIP_USERKRNL; }
00117
00118 DWORD GetDbgTagFlags(
int tag)
00119 {
00120
#if DEBUGTAGS
00121
return (
gpsi !=
NULL ?
gpsi->adwDBGTAGFlags[tag] : 0);
00122
#else
00123
return 0;
00124 UNREFERENCED_PARAMETER(tag);
00125
#endif // DEBUGTAGS
00126
}
00127
00128 DWORD GetRipPID(VOID) {
return (
gpsi !=
NULL ?
gpsi->
wRIPPID : 0); }
00129 DWORD GetRipFlags(VOID) {
return (
gpsi !=
NULL ?
gpsi->
wRIPFlags :
RIPF_DEFAULT); }
00130
00131 VOID SetRipFlags(DWORD dwRipFlags, DWORD dwRipPID)
00132 {
00133
_SetRipFlags(dwRipFlags, dwRipPID);
00134 }
00135
00136 VOID SetDbgTag(
int tag, DWORD dwBitFlags)
00137 {
00138
_SetDbgTag(tag, dwBitFlags);
00139 }
00140