windows-nt/Source/XPSP1/NT/sdktools/debuggers/dbgsrv/dbgsrv.cpp
2020-09-26 16:20:57 +08:00

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();
}