75 lines
1.6 KiB
C++
75 lines
1.6 KiB
C++
|
//----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Starts a process server and sleeps forever.
|
||
|
//
|
||
|
// Copyright (C) Microsoft Corporation, 2000.
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include <dbgeng.h>
|
||
|
|
||
|
PDEBUG_CLIENT2 g_Client2;
|
||
|
|
||
|
void DECLSPEC_NORETURN
|
||
|
Panic(HRESULT Status, char* Format, ...)
|
||
|
{
|
||
|
va_list Args;
|
||
|
char Msg[256];
|
||
|
char Err[80];
|
||
|
|
||
|
va_start(Args, Format);
|
||
|
_vsnprintf(Msg, sizeof(Msg), Format, Args);
|
||
|
va_end(Args);
|
||
|
|
||
|
sprintf(Err, "Error 0x%08X", Status);
|
||
|
MessageBox(GetDesktopWindow(), Msg, Err, MB_OK);
|
||
|
exit(1);
|
||
|
}
|
||
|
|
||
|
void __cdecl
|
||
|
main(int Argc, char** Argv)
|
||
|
{
|
||
|
PSTR Options;
|
||
|
|
||
|
while (--Argc > 0)
|
||
|
{
|
||
|
Argv++;
|
||
|
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
if (Argc != 1)
|
||
|
{
|
||
|
Panic(E_INVALIDARG, "Usage: dbgsrv <transport>");
|
||
|
}
|
||
|
|
||
|
Options = *Argv;
|
||
|
|
||
|
HRESULT Status;
|
||
|
PDEBUG_CLIENT Client;
|
||
|
|
||
|
if ((Status = DebugCreate(__uuidof(IDebugClient),
|
||
|
(void**)&Client)) != S_OK)
|
||
|
{
|
||
|
Panic(Status, "DebugCreate");
|
||
|
}
|
||
|
if ((Status = Client->QueryInterface(__uuidof(IDebugClient2),
|
||
|
(void**)&g_Client2)) != S_OK)
|
||
|
{
|
||
|
Panic(Status, "dbgeng version 2 is required");
|
||
|
}
|
||
|
Client->Release();
|
||
|
|
||
|
if ((Status = g_Client2->
|
||
|
StartProcessServer(DEBUG_CLASS_USER_WINDOWS, Options, NULL)) != S_OK)
|
||
|
{
|
||
|
Panic(Status, "StartProcessServer");
|
||
|
}
|
||
|
|
||
|
g_Client2->WaitForProcessServerEnd(INFINITE);
|
||
|
|
||
|
g_Client2->EndSession(DEBUG_END_REENTRANT);
|
||
|
g_Client2->Release();
|
||
|
}
|