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.
 
 
 
 
 
 

128 lines
3.1 KiB

/******************************Module*Header*******************************\
* Module Name: dib.c
*
* This file is for debugging tools and extensions.
*
* Created: 12-Jan-1996
* Author: VadimB
*
* History:
* Jan 12 96 VadimB Created to dump a list of dib.drv support structures
*
*
* Copyright (c) 1992 Microsoft Corporation
\**************************************************************************/
#include "precomp.h"
#pragma hdrstop
#include <wmdisp32.h>
#include <wcuricon.h>
#include <wucomm.h>
#include <doswow.h>
#include <wdib.h>
#include <wowgdip.h>
//
// Local function prototypes
//
extern INT WDahtoi(LPSZ lpsz);
extern INT WDParseArgStr(LPSZ lpszArgStr, CHAR **argv, INT iMax);
LPVOID DumpDibInfo(PDIBINFO pdi)
{
DIBINFO di;
READMEM_XRETV(di, pdi, NULL);
pdi = &di;
PRINTF(">> Structure at %08X\n", (DWORD)(LPVOID)pdi);
PRINTF("di_hdc: (32)%08X (16)%04X\n", pdi->di_hdc, ((DWORD)(pdi->di_hdc))<<2);
PRINTF("di_newdib: %08X\n", (DWORD)pdi->di_newdib);
PRINTF("di_newIntelDib: %08X\n", (DWORD)pdi->di_newIntelDib);
PRINTF("di_hbm: (32)%08X\n", (DWORD)pdi->di_hbm);
PRINTF("di_dibsize: %08X\n", (DWORD)pdi->di_dibsize);
PRINTF("di_originaldibsel: %08X\n", (DWORD)pdi->di_originaldibsel);
PRINTF("di_originaldibflags: %08X\n", (DWORD)pdi->di_originaldibflags);
PRINTF("di_lockcount: %08X\n", (DWORD)pdi->di_lockcount);
PRINTF("\n");
return (LPVOID)pdi->di_next;
}
VOID DumpDibChain(LPSTR lpszExpressionHead)
{
PDIBINFO pdi;
GETEXPRADDR(pdi, lpszExpressionHead);
READMEM_XRET(pdi, pdi);
if (NULL == pdi) {
PRINTF("List %s is empty!\n", lpszExpressionHead);
}
else {
PRINTF("\nDump of the DIB.DRV support structure: %s\n", lpszExpressionHead);
PRINTF("-------------------------------------------------------\n");
while (NULL != pdi) {
pdi = DumpDibInfo(pdi);
}
}
}
VOID
dhdib(
CMD_ARGLIST
)
{
// dump dib support chain
// dumps: dhdib @<address> - dump at address
// dumps: dhdib - everything...
CHAR* argv[3];
int nArgs;
BOOL fDumpDib = TRUE;
static CHAR* symDibHead = "wow32!pDibInfoHead";
PDIBINFO pdi;
CMD_INIT();
ASSERT_WOW_PRESENT;
nArgs = WDParseArgStr(lpArgumentString, argv, 2);
if (nArgs > 0) {
CHAR* parg = argv[0];
switch(toupper(*parg)) { // dump at...
case '@':
// recover address and dump!
{
CHAR* pch = *++parg ?
parg :
(nArgs >= 2 ? argv[1] : NULL);
if (pch) {
pdi = (PDIBINFO)WDahtoi(pch);
fDumpDib = FALSE;
}
else {
PRINTF("Invalid Parameter\n");
}
}
break;
default:
break;
}
}
if (fDumpDib) {
DumpDibChain(symDibHead);
}
else {
if (pdi) {
DumpDibInfo(pdi);
}
}
}