277 lines
6 KiB
C++
277 lines
6 KiB
C++
/*++
|
||
|
||
Copyright (c) 1995-1997 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
dbgwreq.cxx
|
||
|
||
Abstract:
|
||
|
||
This module contains the default ntsd debugger extensions for
|
||
IIS - W3SVC WAM_REQUEST
|
||
|
||
Author:
|
||
|
||
David Kaplan (DaveK) 6-Oct-1997
|
||
|
||
Revision History:
|
||
|
||
--*/
|
||
|
||
#include "inetdbgp.h"
|
||
|
||
# undef DBG_ASSERT
|
||
|
||
|
||
|
||
/***********************************************************************
|
||
* WAM_REQUEST functions
|
||
**********************************************************************/
|
||
|
||
VOID
|
||
PrintWamRequestThunk( PVOID pccDebuggee,
|
||
PVOID pccDebugger,
|
||
CHAR verbosity,
|
||
DWORD iCount);
|
||
|
||
VOID
|
||
PrintWamRequest( WAM_REQUEST * pwreqOriginal,
|
||
WAM_REQUEST * pwreq,
|
||
CHAR Verbosity );
|
||
|
||
|
||
|
||
VOID
|
||
PrintWamRequestThunk( PVOID pccDebuggee,
|
||
PVOID pccDebugger,
|
||
CHAR verbosity,
|
||
DWORD iCount)
|
||
{
|
||
|
||
//
|
||
// 'local' ==> inetdbg process
|
||
// 'remote' ==> inetinfo process
|
||
//
|
||
|
||
DEFINE_CPP_VAR( HTTP_REQUEST, hreq ); // local HTTP_REQUEST
|
||
DEFINE_CPP_VAR( WAM_REQUEST, wreq ); // local WAM_REQUEST
|
||
|
||
HTTP_REQUEST * phreq; // remote HTTP_REQUEST ptr
|
||
WAM_REQUEST * pwreq; // remote WAM_REQUEST ptr
|
||
|
||
//
|
||
// get local CLIENT_CONN ptr from caller
|
||
//
|
||
//
|
||
|
||
CLIENT_CONN * pcc = (CLIENT_CONN *) pccDebugger;
|
||
|
||
//
|
||
// get remote HTTP_REQUEST ptr from CLIENT_CONN
|
||
// and copy its contents into local HTTP_REQUEST
|
||
//
|
||
|
||
phreq = (HTTP_REQUEST *) pcc->_phttpReq;
|
||
move( hreq, phreq);
|
||
|
||
//
|
||
// get remote WAM_REQUEST ptr from local HTTP_REQUEST
|
||
//
|
||
// if non-null, copy its contents into local WAM_REQUEST
|
||
// and print it
|
||
//
|
||
|
||
pwreq = (WAM_REQUEST *) ( ((HTTP_REQUEST *) &hreq)->_pWamRequest );
|
||
|
||
if ( pwreq != NULL) {
|
||
|
||
move( wreq, pwreq);
|
||
|
||
PrintWamRequest(
|
||
pwreq
|
||
, GET_CPP_VAR_PTR( WAM_REQUEST, wreq)
|
||
, verbosity
|
||
);
|
||
|
||
}
|
||
|
||
} // PrintWamRequestThunk()
|
||
|
||
|
||
|
||
|
||
DECLARE_API( wreq )
|
||
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This function is called as an NTSD extension to format and dump
|
||
an object attributes structure.
|
||
|
||
Arguments:
|
||
|
||
hCurrentProcess - Supplies a handle to the current process (at the
|
||
time the extension was called).
|
||
|
||
hCurrentThread - Supplies a handle to the current thread (at the
|
||
time the extension was called).
|
||
|
||
CurrentPc - Supplies the current pc at the time the extension is
|
||
called.
|
||
|
||
lpExtensionApis - Supplies the address of the functions callable
|
||
by this extension.
|
||
|
||
lpArgumentString - Supplies the asciiz string that describes the
|
||
ansi string to be dumped.
|
||
|
||
Return Value:
|
||
|
||
None.
|
||
|
||
--*/
|
||
{
|
||
DEFINE_CPP_VAR( WAM_REQUEST, wreq );
|
||
WAM_REQUEST * pwreq;
|
||
|
||
INIT_API();
|
||
|
||
while (*lpArgumentString == ' ')
|
||
lpArgumentString++;
|
||
|
||
if ( !*lpArgumentString )
|
||
{
|
||
PrintUsage( "wreq" );
|
||
return;
|
||
}
|
||
|
||
if ( *lpArgumentString == '-' )
|
||
{
|
||
lpArgumentString++;
|
||
|
||
if ( *lpArgumentString == 'h' )
|
||
{
|
||
PrintUsage( "wreq" );
|
||
return;
|
||
}
|
||
|
||
|
||
if ( *lpArgumentString == 'l' ) {
|
||
|
||
DumpClientConnList( lpArgumentString[1],
|
||
PrintWamRequestThunk);
|
||
return;
|
||
}
|
||
|
||
} // if
|
||
|
||
//
|
||
// Treat the argument as the address of an AtqContext
|
||
//
|
||
|
||
pwreq = (WAM_REQUEST * ) GetExpression( lpArgumentString );
|
||
|
||
if ( !pwreq )
|
||
{
|
||
dprintf( "inetdbg.wreq: Unable to evaluate \"%s\"\n",
|
||
lpArgumentString );
|
||
|
||
return;
|
||
}
|
||
|
||
move( wreq, pwreq );
|
||
PrintWamRequest( pwreq, GET_CPP_VAR_PTR( WAM_REQUEST, wreq), '2');
|
||
|
||
return;
|
||
} // DECLARE_API( hreq )
|
||
|
||
|
||
|
||
VOID
|
||
PrintWamRequest( WAM_REQUEST * pwreqOriginal,
|
||
WAM_REQUEST * pwreq,
|
||
CHAR Verbosity )
|
||
/*++
|
||
Description:
|
||
This function takes the WAM_REQUEST object and prints out
|
||
the details for the same in the debugger. The granularity of the
|
||
deatils are controlled by the verbosity flag
|
||
|
||
Arguments:
|
||
pwreqOriginal - pointer to the location where the original WAM_REQUEST
|
||
object is located.
|
||
Note: pwreqOriginal points to object inside debuggee process
|
||
pwreq - pointer to the WAM_REQUEST object that is a copy
|
||
of the contents located at [pwreqOriginal]
|
||
Note: pwreq points to object inside the debugger process
|
||
Verbostiy - level of details requested.
|
||
|
||
Returns:
|
||
None
|
||
--*/
|
||
{
|
||
|
||
if ( Verbosity >= '0') {
|
||
|
||
//
|
||
// print Brief information about the WAM_REQUEST
|
||
//
|
||
|
||
dprintf(
|
||
"WAM_REQUEST: %p m_pHttpRequest = %p m_pExec = %p\n"
|
||
"Ref count = %d m_dwRequestID = %d\n"
|
||
, pwreqOriginal
|
||
, pwreq->m_pHttpRequest
|
||
, pwreq->m_pExec
|
||
, pwreq->m_cRefs
|
||
, pwreq->m_dwRequestID
|
||
);
|
||
|
||
}
|
||
|
||
if ( Verbosity >= '1' ) {
|
||
|
||
//
|
||
// Print all details for the WAM_REQUEST object
|
||
//
|
||
// UNDONE add support for strings
|
||
//
|
||
|
||
dprintf(
|
||
// "\t Path-translated = %s \n"
|
||
// "\t ISA DLL path = %s \n"
|
||
"\t m_pWamInfo = %p m_dwWamVersion = %08x\n"
|
||
"\t m_pWamExecInfo = %p m_hFileTfi = %p\n"
|
||
"\t m_fFinishWamRequest = %08x m_fWriteHeaders = %08x\n"
|
||
"\t m_leOOP.Flink = %p m_leOOP.Blink = %p \n"
|
||
// , pwreq->m_strPathTrans
|
||
// , pwreq->m_strISADllPath
|
||
, pwreq->m_pWamInfo
|
||
, pwreq->m_dwWamVersion
|
||
, pwreq->m_pWamExecInfo
|
||
, pwreq->m_hFileTfi
|
||
, pwreq->m_fFinishWamRequest
|
||
, pwreq->m_fWriteHeaders
|
||
, pwreq->m_leOOP.Flink
|
||
, pwreq->m_leOOP.Blink
|
||
);
|
||
|
||
}
|
||
|
||
|
||
if ( Verbosity >= '2' ) {
|
||
|
||
//
|
||
// UNDONE
|
||
//
|
||
}
|
||
|
||
return;
|
||
} // PrintWamRequest()
|
||
|
||
|
||
|
||
/************* end of file ********************************************/
|