BOOL _cdecl VRipOutput( DWORD idErr, DWORD flags, LPSTR pszFile, int iLine, LPSTR pszFmt, ...) { char szT[160]; va_list arglist; va_start(arglist, pszFmt); vsprintf(szT, pszFmt, arglist); va_end(arglist); return RipOutput(idErr, flags, pszFile, iLine, szT, NULL); }
BOOL xxxActivateDebugger( UINT fsModifiers) { ULONG ArgLength; USER_API_MSG m; PACTIVATEDEBUGGERMSG a = &m.u.ActivateDebugger; PEPROCESS Process; HANDLE hDebugPort; NTSTATUS Status; if (fsModifiers & MOD_CONTROL) { #ifdef DEBUG if (RipOutput(0, RIP_WARNING, "User debugger", 0, "Debug prompt", NULL)) { DbgBreakPoint(); } #endif return FALSE; } else if (fsModifiers & MOD_SHIFT) { /* * Bail out if the process is not being debugged. */ if (gpepCSRSS->DebugPort == NULL) return FALSE; a->ClientId.UniqueProcess = gpepCSRSS->UniqueProcessId; } else { if ((gpqForeground == NULL) || (gpqForeground->ptiKeyboard == NULL)) return FALSE; a->ClientId = gpqForeground->ptiKeyboard->Thread->Cid; /* * Bail out if the process is not being debugged. */ if (!NT_SUCCESS(LockProcessByClientId(a->ClientId.UniqueProcess, &Process))) return FALSE; hDebugPort = Process->DebugPort; UnlockProcess(Process); if (hDebugPort == NULL) return FALSE; } /* * Send the datagram to CSR */ if (CsrApiPort != NULL) { ArgLength = sizeof(*a); ArgLength |= (ArgLength << 16); ArgLength += ((sizeof( CSR_API_MSG ) - sizeof( m.u )) << 16) | (FIELD_OFFSET( CSR_API_MSG, u ) - sizeof( m.h )); m.h.u1.Length = ArgLength; m.h.u2.ZeroInit = 0; m.CaptureBuffer = NULL; m.ApiNumber = CSR_MAKE_API_NUMBER( USERSRV_SERVERDLL_INDEX, UserpActivateDebugger); LeaveCrit(); Status = LpcRequestPort(CsrApiPort, (PPORT_MESSAGE)&m); EnterCrit(); UserAssert(NT_SUCCESS(Status)); } /* * Don't eat this event unless we are breaking into CSR! Since we have * choosen an arbitrary hot key like F12 for the debug key, we need to * pass on the key to the application, or apps that want this key would * never see it. If we had an api for installing a debug hot key * (export or MOD_DEBUG flag to RegisterHotKey()), then it would be ok * to eat because the user selected the hot key. But it is not ok to * eat it as long as we've picked an arbitrary hot key. scottlu. */ if (fsModifiers & MOD_SHIFT) return TRUE; else return FALSE; }