Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

160 lines
5.0 KiB

/**********************************************************************/
/** Microsoft Windows NT **/
/** Copyright(c) Microsoft Corp., 1991 **/
/**********************************************************************/
/*
w3dbg.c
This is the main module for the W3 Server debugger extension DLL.
This module contains the DLL initialization/termination code and a
few utility functions.
FILE HISTORY:
KeithMo 18-May-1993 Created.
*/
#include "w3dbg.h"
//
// Globals shared by all extension commands.
//
PNTSD_OUTPUT_ROUTINE DebugPrint;
PNTSD_GET_EXPRESSION DebugEval;
PNTSD_GET_SYMBOL DebugGetSymbol;
PNTSD_DISASM DebugDisassem;
PNTSD_CHECK_CONTROL_C DebugCheckCtrlC;
/*******************************************************************
NAME: W3DbgDllInitialize
SYNOPSIS: This DLL entry point is called when processes & threads
are initialized and terminated, or upon calls to
LoadLibrary() and FreeLibrary().
ENTRY: hDll - A handle to the DLL.
nReason - Indicates why the DLL entry
point is being called.
pReserved - Reserved.
RETURNS: BOOLEAN - TRUE = DLL init was successful.
FALSE = DLL init failed.
NOTES: The return value is only relevant during processing of
DLL_PROCESS_ATTACH notifications.
HISTORY:
KeithMo 18-May-1993 Created.
********************************************************************/
BOOLEAN W3DbgDllInitialize( HANDLE hDll,
DWORD nReason,
LPVOID pReserved )
{
BOOLEAN fResult = TRUE;
switch( nReason )
{
case DLL_PROCESS_ATTACH:
//
// This notification indicates that the DLL is attaching to
// the address space of the current process. This is either
// the result of the process starting up, or after a call to
// LoadLibrary(). The DLL should us this as a hook to
// initialize any instance data or to allocate a TLS index.
//
// This call is made in the context of the thread that
// caused the process address space to change.
//
break;
case DLL_PROCESS_DETACH:
//
// This notification indicates that the calling process is
// detaching the DLL from its address space. This is either
// due to a clean process exit or from a FreeLibrary() call.
// The DLL should use this opportunity to return any TLS
// indexes allocated and to free any thread local data.
//
// Note that this notification is posted only once per
// process. Individual threads do not invoke the
// DLL_THREAD_DETACH notification.
//
break;
case DLL_THREAD_ATTACH:
//
// This notfication indicates that a new thread is being
// created in the current process. All DLLs attached to
// the process at the time the thread starts will be
// notified. The DLL should use this opportunity to
// initialize a TLS slot for the thread.
//
// Note that the thread that posts the DLL_PROCESS_ATTACH
// notification will not post a DLL_THREAD_ATTACH.
//
// Note also that after a DLL is loaded with LoadLibrary,
// only threads created after the DLL is loaded will
// post this notification.
//
break;
case DLL_THREAD_DETACH:
//
// This notification indicates that a thread is exiting
// cleanly. The DLL should use this opportunity to
// free any data stored in TLS indices.
//
break;
default:
//
// Who knows? Just ignore it.
//
break;
}
return fResult;
} // W3DbgDllInitialize
/*******************************************************************
NAME: GrabDebugApis
SYNOPSIS: Initializes the global variables that hold pointers
to the debugger API functions.
ENTRY: lpExtensionApis - Points to a structure that
contains pointers to the
various debugger APIs.
HISTORY:
KeithMo 18-May-1993 Created.
********************************************************************/
VOID GrabDebugApis( LPVOID lpExtensionApis )
{
PNTSD_EXTENSION_APIS lpNtsdApis = (PNTSD_EXTENSION_APIS)lpExtensionApis;
DebugPrint = lpNtsdApis->lpOutputRoutine;
DebugEval = lpNtsdApis->lpGetExpressionRoutine;
DebugGetSymbol = lpNtsdApis->lpGetSymbolRoutine;
DebugDisassem = lpNtsdApis->lpDisasmRoutine;
DebugCheckCtrlC = lpNtsdApis->lpCheckControlCRoutine;
} // GrabDebugApis