windows-nt/Source/XPSP1/NT/net/tcpip/driver/kdext2/ntkd/kd.c
2020-09-26 16:20:57 +08:00

239 lines
8.4 KiB
C

/*++
Copyright (c) 1999-2000 Microsoft Corporation
Module Name:
kd.c
Abstract:
Contains debugger extension defaults and setup.
Author:
Scott Holden (sholden) 24-Apr-1999
Revision History:
--*/
#include "tcpipxp.h"
//
// Globals.
//
EXT_API_VERSION ApiVersion = { 3, 5, EXT_API_VERSION_NUMBER, 0 };
WINDBG_EXTENSION_APIS ExtensionApis;
USHORT SavedMajorVersion;
USHORT SavedMinorVersion;
BOOL ChkTarget;
VERB g_Verbosity = 0;
//
// Print help.
//
#define TAB "\t"
DECLARE_API(help)
{
dprintf("TCP/IP debugger extension commands:" ENDL ENDL);
dprintf(TAB "tcpv - Global setting of verbosity of searches." ENDL);
dprintf(TAB " 0 - One liner" ENDL);
dprintf(TAB " 1 - Medium" ENDL);
dprintf(TAB " 2 - Full structure dump." ENDL);
dprintf(TAB " some dumps have global verbosity override, indicated as [v] below." ENDL);
dprintf(ENDL);
dprintf("Simple structure dumping" ENDL);
dprintf(TAB "ipaddr <ulong> - Dumps ipaddr in <a.b.c.d> format." ENDL);
dprintf(TAB "macaddr <ptr> - Dumps 802.3 address in x-x-x-x-x-x" ENDL);
dprintf(TAB "ao <ptr> [v] - Dumps an AddrObj" ENDL);
dprintf(TAB "tcb <ptr> [v] - Dumps a TCB" ENDL);
dprintf(TAB "twtcb <ptr> [v] - Dumps a TWTCB" ENDL);
dprintf(TAB "tcpctxt <ptr> [v] - Dumps a TCP_CONTEXT" ENDL);
dprintf(TAB "tcpfo <ptr> [v] - Dumps a FILE_OBJECT" ENDL);
dprintf(TAB "tc <ptr> [v] - Dumps a TCPConn" ENDL);
dprintf(TAB "trr <ptr> [v] - Dumps a TCPRcvReq" ENDL);
dprintf(TAB "tsr <ptr> [v] - Dumps a TCPRSendReq" ENDL);
dprintf(TAB "scc <ptr> [v] - Dumps a SendCmpltContext" ENDL);
dprintf(TAB "trh <ptr> [v] - Dumps a TCPRAHdr" ENDL);
dprintf(TAB "dsr <ptr> [v] - Dumps a DGSendReq" ENDL);
dprintf(TAB "drr <ptr> [v] - Dumps a DGRcvReq" ENDL);
dprintf(TAB "udph <ptr> [v] - Dumps an UDPHeader" ENDL);
dprintf(TAB "tcph <ptr> [v] - Dumps an TCPHeader" ENDL);
dprintf(TAB "iph <ptr> [v] - Dumps an IPHeader" ENDL);
dprintf(TAB "icmph <ptr> [v] - Dumps an ICMPHeader" ENDL);
dprintf(TAB "arph <ptr> [v] - Dumps an ARPHeader" ENDL);
dprintf(TAB "ipi <ptr> [v] - Dumps an IPInfo" ENDL);
dprintf(TAB "rce <ptr> [v] - Dumps a RouteCacheEntry" ENDL);
dprintf(TAB "nte <ptr> [v] - Dumps a NetTableEntry" ENDL);
dprintf(TAB "ate <ptr> [v] - Dumps an ARPTableEntry" ENDL);
dprintf(TAB "aia <ptr> [v] - Dumps an ARPIPAddr" ENDL);
dprintf(TAB "rte <ptr> [v] - Dumps a RouteTableEntry" ENDL);
dprintf(TAB "ioi <ptr> [v] - Dumps an IPOptInfo" ENDL);
dprintf(TAB "cb <ptr> [v] - Dumps a TCPConnBlock" ENDL);
dprintf(TAB "pc <ptr> [v] - Dumps a PacketContext" ENDL);
dprintf(TAB "ai <ptr> [v] - Dumps an ARPInterface" ENDL);
dprintf(TAB "interface <ptr> [v] - Dumps an Interface" ENDL);
dprintf(TAB "lip <ptr> [v] - Dumps a LLIPBindInfo" ENDL);
dprintf(TAB "link <ptr> [v] - Dumps a LinkEntry" ENDL);
dprintf(ENDL);
dprintf("Dump and search lists and tables" ENDL);
dprintf(TAB "mdlc <ptr> [v] - Dumps the given MDL chain" ENDL);
dprintf(TAB "arptable <ptr> - Dumps the given ARPTable" ENDL);
dprintf(TAB "conntable - Dumps the ConnTable" ENDL);
dprintf(TAB "ailist - Dumps the ARPInterface list" ENDL);
dprintf(TAB "iflist - Dumps the Interface list" ENDL);
dprintf(TAB "rtetable - Dumps the RouteTable" ENDL);
dprintf(TAB "rtes - Dumps the RouteTable in route print format" ENDL);
dprintf(TAB "srchtcbtable - Searches TCB table and dumps found TCBs." ENDL);
dprintf(TAB " port <n> - Searches <n> against source and dest port on TCB" ENDL);
dprintf(TAB " ipaddr <a.b.c.d> - Searches <a.b.c.d> against source and dest ipaddr on TCB" ENDL);
dprintf(TAB " all - Dumps all TCBs in the TCB table" ENDL);
dprintf(TAB "srchtwtcbtable - Searches TimeWait TCB table and dumps found TWTCBs." ENDL);
dprintf(TAB " port <n> - Searches <n> against source and dest port on TCB" ENDL);
dprintf(TAB " ipaddr <a.b.c.d> - Searches <a.b.c.d> against source and dest ipaddr on TCB" ENDL);
dprintf(TAB " all - Dumps all TCBs in the TCB table" ENDL);
dprintf(TAB "srchtwtcbq - Searches TimeWait TCB Queue and dumps found TWTCBs." ENDL);
dprintf(TAB " port <n> - Searches <n> against source and dest port on TCB" ENDL);
dprintf(TAB " ipaddr <a.b.c.d> - Searches <a.b.c.d> against source and dest ipaddr on TCB" ENDL);
dprintf(TAB " all - Dumps all TCBs in the TCB table" ENDL);
dprintf(TAB "srchaotable - Searches AO tables and dumps found AOs" ENDL);
dprintf(TAB " port <n> - Searches <n> against source and dest port on TCB" ENDL);
dprintf(TAB " ipaddr <a.b.c.d> - Searches <a.b.c.d> against source and dest ipaddr on TCB" ENDL);
dprintf(TAB " prot <udp|tcp|raw> - Searches AO table for specific protocol" ENDL);
dprintf(TAB " stats - Only dumps stats for AOs in the table" ENDL);
dprintf(TAB " all - Dumps all AOs in the AO table" ENDL);
dprintf(TAB "srchntelist - Dumps NTE list and dumps found NTEs" ENDL);
dprintf(TAB " ipaddr <a.b.c.d> - Searches <a.b.c.d> against NTEs" ENDL);
dprintf(TAB " context <context> - Dumps all NTEs with context" ENDL);
dprintf(TAB " all - Dumps all NTEs in the NTE list" ENDL);
dprintf(TAB "srchlink <ptr> - Dumps a LinkEntry list starting at <ptr>" ENDL);
dprintf(TAB " ipaddr <a.b.c.d> - Searches <a.b.c.d> against LinkEntry's NextHop addr" ENDL);
dprintf(TAB " all - Dumps all LinkEntry's in given list" ENDL);
dprintf(ENDL);
dprintf("Dump global variables and paramters" ENDL);
dprintf(TAB "gtcp - All TCP globals" ENDL);
dprintf(TAB "gip - All IP globals" ENDL);
dprintf("" ENDL);
dprintf( "Compiled on " __DATE__ " at " __TIME__ "" ENDL );
return;
}
//
// Initialization.
//
DllInit(
HANDLE hModule,
DWORD dwReason,
DWORD dwReserved
)
{
switch (dwReason) {
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hModule);
InitTcpipx();
break;
}
return TRUE;
}
//
// WinDbgExtensionDllInit - Called by debugger to init function pointers.
//
VOID
WinDbgExtensionDllInit(
PWINDBG_EXTENSION_APIS lpExtensionApis,
USHORT MajorVersion,
USHORT MinorVersion
)
{
ExtensionApis = *lpExtensionApis;
SavedMajorVersion = MajorVersion;
SavedMinorVersion = MinorVersion;
ChkTarget = SavedMajorVersion == 0x0c ? TRUE : FALSE;
return;
}
DECLARE_API(version)
{
#if DBG
PCHAR DebuggerType = "Checked";
#else
PCHAR DebuggerType = "Free";
#endif
dprintf( "%s Extension dll for Build %d debugging %s kernel for Build %d" ENDL,
DebuggerType,
VER_PRODUCTBUILD,
SavedMajorVersion == 0x0c ? "Checked" : "Free",
SavedMinorVersion
);
}
VOID
CheckVersion(
VOID
)
{
return;
}
LPEXT_API_VERSION
ExtensionApiVersion(
VOID
)
{
return &ApiVersion;
}
//
// Set verbosity level for debugger extensions.
//
DECLARE_API(tcpv)
{
VERB v;
if (*args)
{
v = atoi(args);
if (v >= VERB_MIN && v <= VERB_MAX)
{
g_Verbosity = v;
}
else
{
dprintf("Bad verbosity value. Must be = [0 | 1 | 2]" ENDL);
}
}
dprintf("Current verbosity = %s" ENDL,
g_Verbosity == VERB_MIN ? "VERB_MIN" :
g_Verbosity == VERB_MED ? "VERB_MED" :
g_Verbosity == VERB_MAX ? "VERB_MAX" : "??????");
return;
}