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.2 KiB
128 lines
3.2 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);
|
|
}
|
|
}
|
|
}
|