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