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.
 
 
 
 
 
 

276 lines
6.0 KiB

/*++
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 ********************************************/