|
|
/*++
Copyright (C) Microsoft Corporation, 1990 - 2000 All rights reserved.
Module Name:
dbgspl.c
Abstract:
This module provides all the public exported APIs relating to Printer and Job management for the Local Print Providor
Author:
Krishna Ganugapati (KrishnaG) 1-July-1993
Revision History:
KrishnaG: Created: 1-July-1993 (imported most of IanJa's stuff) KrishnaG: Added: 7-July-1993 (added AndrewBe's UnicodeAnsi conversion routines) KrishnaG Added: 3-Aug-1993 (added DevMode/SecurityDescriptor dumps) MattFe 7 NOV 94 win32spl debug extentions
To do:
Write a generic dump unicode string (reduce the code!!)
--*/
#include "precomp.h"
#pragma hdrstop
#include "dbglocal.h"
#include "dbgsec.h"
#define NULL_TERMINATED 0
#define VERBOSE_ON 1
#define VERBOSE_OFF 0
typedef void (*PNTSD_OUTPUT_ROUTINE)(char *, ...);
BOOL DbgDumpIniPrintProc( HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PINIPRINTPROC pIniPrintProc );
BOOL DbgDumpIniDriver( HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PINIDRIVER pIniDriver );
BOOL DbgDumpIniEnvironment( HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PINIENVIRONMENT pIniEnvironment );
BOOL DbgDumpIniNetPrint( HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PININETPRINT pIniNetPrint );
BOOL DbgDumpIniMonitor( HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PINIMONITOR pIniMonitor );
BOOL DbgDumpIniPort( HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PINIPORT pIniPort );
BOOL DbgDumpIniPrinter(
HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PINIPRINTER pIniPrinter );
BOOL DbgDumpIniForm( HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PINIFORM pForm );
BOOL DbgDumpIniJob( HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PINIJOB pIniJob );
BOOL DbgDumpProvidor( HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, LPPROVIDOR pProvidor );
BOOL DbgDumpSpool( HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PSPOOL pSpool );
BOOL DbgDumpShadowFile( HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PSHADOWFILE pShadowFile );
BOOL DbgDumpShadowFile2( HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PSHADOWFILE_2 pShadowFile );
VOID PrintData( PNTSD_OUTPUT_ROUTINE Print, LPSTR TypeString, LPSTR VarString, ... );
BOOL DbgDumpWCacheIniPrinter( HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PWCACHEINIPRINTEREXTRA pWCacheIniPrinter );
BOOL DbgDumpWSpool( HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PWSPOOL pSpool );
BOOL DbgDumpIniSpooler( HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PINISPOOLER pIniSpooler );
BOOL DbgDumpIniVersion( HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PINIVERSION pIniVersion );
BOOL DbgDumpPrintHandle( HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PPRINTHANDLE pPrintHandle );
typedef struct _DBG_PRINTER_ACCESS { DWORD Attribute; LPSTR String; } DBG_PRINTER_ACCESS, *PDBG_PRINTER_ACCESS;
DBG_PRINTER_ACCESS PrinterAccessTable[] = { SERVER_ACCESS_ADMINISTER ,"Server_Access_Administer", SERVER_ACCESS_ENUMERATE ,"Server_Access_Enumerate", PRINTER_ACCESS_ADMINISTER ,"Printer_Access_Administer", PRINTER_ACCESS_USE ,"Printer_Access_Use", JOB_ACCESS_ADMINISTER ,"Job_Access_Administer" };
typedef struct _DBG_SPOOLER_FLAGS { DWORD SpoolerFlags; LPSTR String; } DBG_SPOOLER_FLAGS, *PDBG_SPOOLER_FLAGS;
DBG_SPOOLER_FLAGS SpoolerFlagsTable[] =
{ SPL_UPDATE_WININI_DEVICES ,"Update_WinIni_Devices", SPL_PRINTER_CHANGES ,"Printer_Changes", SPL_LOG_EVENTS ,"Log_Events", SPL_FORMS_CHANGE ,"Forms_Change", SPL_BROADCAST_CHANGE ,"Broadcast_Change", SPL_SECURITY_CHECK ,"Security_Check", SPL_OPEN_CREATE_PORTS ,"Open_Create_Ports", SPL_FAIL_OPEN_PRINTERS_PENDING_DELETION ,"Fail_Open_Printers_Pending_Deletion", SPL_REMOTE_HANDLE_CHECK ,"Remote_Handle_Check" };
typedef struct _DBG_PRINTER_STATUS { DWORD Status; LPSTR String; } DBG_PRINTER_STATUS, *PDBG_PRINTER_STATUS;
DBG_PRINTER_STATUS PrinterStatusTable[] =
{ PRINTER_ZOMBIE_OBJECT, "Zombie_Object", PRINTER_PENDING_CREATION, "Pending_Creation", PRINTER_OK, "OK", PRINTER_FROM_REG, "From_Reg", PRINTER_WAS_SHARED, "Was_Shared",
PRINTER_ERROR, "Error", PRINTER_PAPER_JAM, "PaperJam", PRINTER_PAPEROUT, "PaperOut", PRINTER_MANUAL_FEED, "ManualFeed", PRINTER_PAPER_PROBLEM, "PaperProblem", PRINTER_OFFLINE, "OffLine", PRINTER_IO_ACTIVE, "IOActive", PRINTER_BUSY, "Busy", PRINTER_PRINTING, "Printing", PRINTER_OUTPUT_BIN_FULL, "OutputBinFull", PRINTER_NOT_AVAILABLE, "NotAvailable", PRINTER_WAITING, "Waiting", PRINTER_PROCESSING, "Processing", PRINTER_INITIALIZING, "Initializing", PRINTER_WARMING_UP, "WarmingUp", PRINTER_TONER_LOW, "TonerLow", PRINTER_NO_TONER, "NoToner", PRINTER_PAGE_PUNT, "PagePunt", PRINTER_USER_INTERVENTION, "UserIntervention", PRINTER_OUT_OF_MEMORY, "OutOfMemory", PRINTER_DOOR_OPEN, "DoorOpen", PRINTER_SERVER_UNKNOWN, "ServerUnknown",
PRINTER_PAUSED, "Paused", PRINTER_PENDING_DELETION, "Pending_Deletion", };
typedef struct _DBG_EXTERNAL_PRINTER_STATUS { DWORD Status; LPSTR String; } DBG_EXTERNAL_PRINTER_STATUS, *PDBG_EXTERNAL_PRINTER_STATUS;
DBG_EXTERNAL_PRINTER_STATUS ExternalPrinterStatusTable[] =
{ PRINTER_STATUS_PAUSED , "Paused", PRINTER_STATUS_ERROR , "Error", PRINTER_STATUS_PENDING_DELETION , "Pending_Deletion", PRINTER_STATUS_PAPER_JAM , "Paper_Jam", PRINTER_STATUS_PAPER_OUT , "Paper_Out", PRINTER_STATUS_MANUAL_FEED , "Manual_Feed", PRINTER_STATUS_PAPER_PROBLEM , "Paper_Problem", PRINTER_STATUS_OFFLINE , "OffLine", PRINTER_STATUS_IO_ACTIVE , "IO_Active", PRINTER_STATUS_BUSY , "Busy", PRINTER_STATUS_PRINTING , "Printing", PRINTER_STATUS_OUTPUT_BIN_FULL , "Output_Bin_Full", PRINTER_STATUS_NOT_AVAILABLE , "Not_Available", PRINTER_STATUS_WAITING , "Waiting", PRINTER_STATUS_PROCESSING , "Processing", PRINTER_STATUS_INITIALIZING , "Initializing", PRINTER_STATUS_WARMING_UP , "Warming_Up", PRINTER_STATUS_TONER_LOW , "Toner_Low", PRINTER_STATUS_NO_TONER , "No_Toner", PRINTER_STATUS_PAGE_PUNT , "Page_Punt", PRINTER_STATUS_USER_INTERVENTION , "User_Intervention", PRINTER_STATUS_OUT_OF_MEMORY , "Out_Of_Memory", PRINTER_STATUS_DOOR_OPEN , "Door_Open", PRINTER_STATUS_SERVER_UNKNOWN , "Server_Unknown" };
typedef struct _DBG_PORT_STATUS { DWORD Status; LPSTR String; } DBG_PORT_STATUS, *PDBG_PORT_STATUS;
DBG_PORT_STATUS PortStatusTable[] =
{ PORT_STATUS_OFFLINE , "Offline", PORT_STATUS_PAPER_JAM , "PaperJam", PORT_STATUS_PAPER_OUT , "PaperOut", PORT_STATUS_OUTPUT_BIN_FULL , "OutputBinFull", PORT_STATUS_PAPER_PROBLEM , "PaperJam", PORT_STATUS_NO_TONER , "NoToner", PORT_STATUS_DOOR_OPEN , "DoorOpen", PORT_STATUS_USER_INTERVENTION , "UserIntervention", PORT_STATUS_OUT_OF_MEMORY , "OutOfMemory",
PORT_STATUS_TONER_LOW , "TonerLow",
PORT_STATUS_WARMING_UP , "WarmingUp", PORT_STATUS_POWER_SAVE , "PowerSave" };
typedef struct _DBG_PRINTER_ATTRIBUTE { DWORD Attribute; LPSTR String; } DBG_PRINTER_ATTRIBUTE, *PDBG_PRINTER_ATTRIBUTE;
DBG_PRINTER_ATTRIBUTE ChangeStatusTable[] =
{ STATUS_CHANGE_FORMING, "Forming", STATUS_CHANGE_VALID, "Valid", STATUS_CHANGE_CLOSING, "Closing", STATUS_CHANGE_CLIENT, "Client", STATUS_CHANGE_ACTIVE, "Active",
STATUS_CHANGE_INFO, "Info",
STATUS_CHANGE_ACTIVE_REQ, "ActiveRequest",
STATUS_CHANGE_DISCARDED, "Discarded",
STATUS_CHANGE_DISCARDNOTED, "DiscardNoted", };
DBG_PRINTER_ATTRIBUTE PrinterAttributeTable[] =
{ PRINTER_ATTRIBUTE_QUEUED, "Queued", PRINTER_ATTRIBUTE_DIRECT, "Direct", PRINTER_ATTRIBUTE_DEFAULT, "Default", PRINTER_ATTRIBUTE_SHARED, "Shared", PRINTER_ATTRIBUTE_NETWORK, "Network", PRINTER_ATTRIBUTE_LOCAL, "Local", PRINTER_ATTRIBUTE_HIDDEN, "Hidden", PRINTER_ATTRIBUTE_ENABLE_DEVQ, "Enable_DevQ", PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS, "KeepPrintedJobs", PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST, "DoCompleteFirst", PRINTER_ATTRIBUTE_ENABLE_BIDI, "EnableBidi", PRINTER_ATTRIBUTE_FAX, "Fax", PRINTER_ATTRIBUTE_WORK_OFFLINE, "Offline" };
typedef struct _DBG_JOB_STATUS { DWORD Status; LPSTR String; } DBG_JOB_STATUS, *PDBG_JOB_STATUS;
DBG_JOB_STATUS JobStatusTable[] =
{ JOB_PAUSED, "Paused", JOB_ERROR, "Error", JOB_OFFLINE, "OffLine", JOB_PAPEROUT, "PaperOut",
JOB_PENDING_DELETION, "Deleting", JOB_SPOOLING, "Spooling", JOB_PRINTING, "Printing", JOB_PRINTED, "Printed", JOB_BLOCKED_DEVQ, "Blocked_DevQ", JOB_DELETED, "Deleted",
JOB_DESPOOLING, "Despooling", JOB_DIRECT, "Direct", JOB_COMPLETE, "Complete", JOB_RESTART, "Restart", JOB_REMOTE, "Remote", JOB_NOTIFICATION_SENT, "Notification_Sent", JOB_PRINT_TO_FILE, "Print_To_File", JOB_TYPE_ADDJOB, "AddJob", JOB_SCHEDULE_JOB, "Schedule_Job", JOB_TIMEOUT, "Timeout", JOB_ABANDON, "Abandon", JOB_TRUE_EOJ, "TrueEOJ", JOB_COMPOUND, "Compound", JOB_HIDDEN, "Hidden", JOB_TYPE_OPTIMIZE, "MemoryMap Optimization", JOB_PP_CLOSE, "Print Proccessor Close", JOB_DOWNLEVEL, "Downlevel Job" };
typedef struct _DBG_PINIPORT_STATUS { DWORD Status; LPSTR String; } DBG_PINIPORT_STATUS, *PDBG_PINIPORT_STATUS;
DBG_PINIPORT_STATUS pIniPortStatusTable[]= { PP_PAUSED ,"Paused", PP_WAITING ,"Waiting", PP_RUNTHREAD ,"RunThread", PP_THREADRUNNING ,"ThreadRunning", PP_RESTART ,"Restart", PP_CHECKMON ,"CheckMon", PP_STOPMON ,"StopMon", PP_QPROCCHECK ,"QProcCheck", PP_QPROCPAUSE ,"QProcPause", PP_QPROCABORT ,"QProctAbort", PP_QPROCCLOSE ,"QProcClose", PP_PAUSEAFTER ,"PauseAfter", PP_MONITORRUNNING ,"MonitorRunning", PP_RUNMONITOR ,"RunMonitor", PP_MONITOR ,"Monitor", PP_FILE ,"File", PP_ERROR ,"Error", PP_WARNING ,"Warning", PP_INFORMATIONAL ,"Informational", PP_DELETING ,"Deleting", PP_STARTDOC ,"StartDoc", PP_PLACEHOLDER ,"Placeholder", };
typedef struct _DBG_WSPOOL_STATUS { DWORD Status; LPSTR String; } DBG_WSPOOL_STATUS, *PDBG_WSPOOL_STATUS;
DBG_WSPOOL_STATUS WSpoolStatusTable[]= { WSPOOL_STATUS_STARTDOC ,"StartDoc", WSPOOL_STATUS_BEGINPAGE ,"BeginPage", WSPOOL_STATUS_TEMP_CONNECTION ,"Temp_Connection", WSPOOL_STATUS_OPEN_ERROR ,"Open_Error", WSPOOL_STATUS_PRINT_FILE ,"Print_File", WSPOOL_STATUS_USE_CACHE ,"Use_Cache", WSPOOL_STATUS_NO_RPC_HANDLE ,"No_Rpc_Handle", WSPOOL_STATUS_PENDING_DELETE ,"Pending_delete", WSPOOL_STATUS_RESETPRINTER_PENDING ,"ResetPrinter_Pending" };
typedef struct _DBG_PSPOOL_STATUS { DWORD Status; LPSTR String; } DBG_PSPOOL_STATUS, *PDBG_PSPOOL_STATUS;
DBG_PSPOOL_STATUS pSpoolStatusTable[]= { SPOOL_STATUS_STARTDOC ,"StartDoc", SPOOL_STATUS_BEGINPAGE ,"BeginPage", SPOOL_STATUS_CANCELLED ,"Cancelled", SPOOL_STATUS_PRINTING ,"Printing", SPOOL_STATUS_ADDJOB ,"AddJob", SPOOL_STATUS_PRINT_FILE ,"Print_File", SPOOL_STATUS_NOTIFY ,"Notify", SPOOL_STATUS_FLUSH_PRINTER ,"FlushPrinter" };
typedef struct _DBG_PSPOOL_TYPE_OF_HANDLE { DWORD TypeOfHandle; LPSTR String; } DBG_PSPOOL_TYPE_OF_HANDLE, *PDBG_PSPOOL_TYPE_OF_HANDLE;
DBG_PSPOOL_TYPE_OF_HANDLE pSpoolTypeOfHandleTable[]= {
PRINTER_HANDLE_PRINTER, "Printer", PRINTER_HANDLE_REMOTE_DATA, "RemoteData", PRINTER_HANDLE_REMOTE_CALL, "RemoteCall", PRINTER_HANDLE_JOB, "Job", PRINTER_HANDLE_PORT, "Port", PRINTER_HANDLE_DIRECT, "Direct", PRINTER_HANDLE_SERVER, "Server", PRINTER_HANDLE_3XCLIENT, "Nt3x_Client", PRINTER_HANDLE_REMOTE_ADMIN, "Remote Admin" };
typedef struct _DBG_WCACHEPRINTER_STATUS { DWORD Status; LPSTR String; } DBG_WCACHEPRINTER_STATUS, *PDBG_WCACHEPRINTER_STATUS;
DBG_WCACHEPRINTER_STATUS WCachePrinterStatusTable[]= {
EXTRA_STATUS_PENDING_FFPCN ,"Pending_FFPCN", EXTRA_STATUS_DOING_REFRESH ,"Doing_Refresh" };
typedef struct _DBG_DEVMODE_FIELDS { DWORD dmField; LPSTR String; }DBG_DEVMODE_FIELDS;
#define MAX_DEVMODE_FIELDS 14
DBG_DEVMODE_FIELDS DevModeFieldsTable[] = { 0x00000001, "dm_orientation", 0x00000002, "dm_papersize", 0x00000004, "dm_paperlength", 0x00000008, "dm_paperwidth", 0x00000010, "dm_scale", 0x00000100, "dm_copies", 0x00000200, "dm_defautsource", 0x00000400, "dm_printquality", 0x00000800, "dm_color", 0x00001000, "dm_duplex", 0x00002000, "dm_yresolution", 0x00004000, "dm_ttoption", 0x00008000, "dm_collate", 0x00010000, "dm_formname" };
typedef struct _DBG_PINIDRIVER_FLAGS { DWORD dwDriverFlag; LPSTR String; } DBG_PINIDRIVER_FLAGS;
DBG_PINIDRIVER_FLAGS pIniDriverFlagsTable[] = { PRINTER_DRIVER_PENDING_DELETION, "Pending-Deletion" };
#define MAX_DEVMODE_PAPERSIZES 41
LPSTR DevModePaperSizes[] = { " Letter 8 1/2 x 11 in ", " Letter Small 8 1/2 x 11 in ", " Tabloid 11 x 17 in ", " Ledger 17 x 11 in ", " Legal 8 1/2 x 14 in ", " Statement 5 1/2 x 8 1/2 in ", " Executive 7 1/4 x 10 1/2 in ", " A3 297 x 420 mm ", " A4 210 x 297 mm ", " A4 Small 210 x 297 mm ", " A5 148 x 210 mm ", " B4 250 x 354 ", " B5 182 x 257 mm ", " Folio 8 1/2 x 13 in ", " Quarto 215 x 275 mm ", " 10x14 in ", " 11x17 in ", " Note 8 1/2 x 11 in ", " Envelope #9 3 7/8 x 8 7/8 ", " Envelope #10 4 1/8 x 9 1/2 ", " Envelope #11 4 1/2 x 10 3/8 ", " Envelope #12 4 \276 x 11 ", " Envelope #14 5 x 11 1/2 ", " C size sheet ", " D size sheet ", " E size sheet ", " Envelope DL 110 x 220mm ", " Envelope C5 162 x 229 mm ", " Envelope C3 324 x 458 mm ", " Envelope C4 229 x 324 mm ", " Envelope C6 114 x 162 mm ", " Envelope C65 114 x 229 mm ", " Envelope B4 250 x 353 mm ", " Envelope B5 176 x 250 mm ", " Envelope B6 176 x 125 mm ", " Envelope 110 x 230 mm ", " Envelope Monarch 3.875 x 7.5 in ", " 6 3/4 Envelope 3 5/8 x 6 1/2 in ", " US Std Fanfold 14 7/8 x 11 in ", " German Std Fanfold 8 1/2 x 12 in ", " German Legal Fanfold 8 1/2 x 13 in " };
VOID ExtractPrinterAccess(PNTSD_OUTPUT_ROUTINE Print, DWORD Attribute) { DWORD i = 0; if ( Attribute != 0 ) { (*Print)(" "); while (i < sizeof(PrinterAccessTable)/sizeof(PrinterAccessTable[0])) { if (Attribute & PrinterAccessTable[i].Attribute) { (*Print)("%s ", PrinterAccessTable[i].String); } i++; } (*Print)("\n"); } }
VOID ExtractPrinterAttributes(PNTSD_OUTPUT_ROUTINE Print, DWORD Attribute) { DWORD i = 0; if ( Attribute != 0 ) { (*Print)(" "); while (i < sizeof(PrinterAttributeTable)/sizeof(PrinterAttributeTable[0])) { if (Attribute & PrinterAttributeTable[i].Attribute) { (*Print)("%s ", PrinterAttributeTable[i].String); } i++; } (*Print)("\n"); } }
VOID ExtractChangeStatus(PNTSD_OUTPUT_ROUTINE Print, ESTATUS eStatus) { DWORD i = 0; if ( eStatus != 0 ) { (*Print)(" "); while (i < sizeof(ChangeStatusTable)/sizeof(ChangeStatusTable[0])) { if (eStatus & ChangeStatusTable[i].Attribute) { (*Print)("%s ", ChangeStatusTable[i].String); } i++; } (*Print)("\n"); } }
VOID ExtractExternalPrinterStatus(PNTSD_OUTPUT_ROUTINE Print, DWORD Status) { DWORD i = 0; if ( Status != 0 ) { (*Print)(" "); while (i < sizeof(ExternalPrinterStatusTable)/sizeof(ExternalPrinterStatusTable[0])) { if (Status & ExternalPrinterStatusTable[i].Status) { (*Print)("%s ", ExternalPrinterStatusTable[i].String); } i++; } (*Print)("\n"); } }
VOID ExtractSpoolerFlags(PNTSD_OUTPUT_ROUTINE Print, DWORD SpoolerFlags) { DWORD i = 0; if ( SpoolerFlags != 0 ) { (*Print)(" "); while (i < sizeof(SpoolerFlagsTable)/sizeof(SpoolerFlagsTable[0])) { if (SpoolerFlags & SpoolerFlagsTable[i].SpoolerFlags) { (*Print)("%s ", SpoolerFlagsTable[i].String); } i++; } (*Print)("\n"); } }
VOID ExtractPrinterStatus(PNTSD_OUTPUT_ROUTINE Print, DWORD Status) { DWORD i = 0; if ( Status != 0 ) { (*Print)(" "); while (i < sizeof(PrinterStatusTable)/sizeof(PrinterStatusTable[0])) { if (Status & PrinterStatusTable[i].Status) { (*Print)("%s ", PrinterStatusTable[i].String); } i++; } (*Print)("\n"); }
}
VOID ExtractWCachePrinterStatus(PNTSD_OUTPUT_ROUTINE Print, DWORD Status) { DWORD i = 0; if ( Status != 0 ) { (*Print)(" "); while (i < sizeof(WCachePrinterStatusTable)/sizeof(WCachePrinterStatusTable[0])) { if (Status & WCachePrinterStatusTable[i].Status) { (*Print)("%s ", WCachePrinterStatusTable[i].String); } i++; } (*Print)("\n"); }
}
VOID ExtractPortStatus(PNTSD_OUTPUT_ROUTINE Print, DWORD Status) { DWORD i = 0;
(*Print)(" "); if ( Status != 0 ) { while (i < sizeof(PortStatusTable)/sizeof(PortStatusTable[0])) { if (Status == PortStatusTable[i].Status) { (*Print)("%s ", PortStatusTable[i].String); } i++; } } else {
} (*Print)("\n");
}
VOID ExtractJobStatus(PNTSD_OUTPUT_ROUTINE Print, DWORD Status) { DWORD i = 0; if ( Status != 0 ) { (*Print)(" "); while (i < sizeof(JobStatusTable)/sizeof(JobStatusTable[0])) { if (Status & JobStatusTable[i].Status) { (*Print)("%s ", JobStatusTable[i].String); } i++; } (*Print)("\n"); } }
VOID ExtractpSpoolTypeOfHandle(PNTSD_OUTPUT_ROUTINE Print, DWORD TypeOfHandle) { DWORD i = 0; if ( TypeOfHandle != 0 ) { (*Print)(" "); while (i < sizeof(pSpoolTypeOfHandleTable)/sizeof(pSpoolTypeOfHandleTable[0])) { if (TypeOfHandle & pSpoolTypeOfHandleTable[i].TypeOfHandle) { (*Print)("%s ", pSpoolTypeOfHandleTable[i].String); } i++; } (*Print)("\n"); } }
VOID ExtractpSpoolStatus(PNTSD_OUTPUT_ROUTINE Print, DWORD Status) { DWORD i = 0; if ( Status != 0 ) { (*Print)(" "); while (i < sizeof(pSpoolStatusTable)/sizeof(pSpoolStatusTable[0])) { if (Status & pSpoolStatusTable[i].Status) { (*Print)("%s ", pSpoolStatusTable[i].String); } i++; } (*Print)("\n"); } }
VOID ExtractWSpoolStatus(PNTSD_OUTPUT_ROUTINE Print, DWORD Status) { DWORD i = 0; if ( Status != 0 ) { (*Print)(" "); while (i < sizeof(WSpoolStatusTable)/sizeof(WSpoolStatusTable[0])) { if (Status & WSpoolStatusTable[i].Status) { (*Print)("%s ", WSpoolStatusTable[i].String); } i++; } (*Print)("\n"); } }
VOID ExtractpIniPortStatus(PNTSD_OUTPUT_ROUTINE Print, DWORD Status) { DWORD i = 0; if ( Status != 0 ) { (*Print)(" "); while (i < sizeof(pIniPortStatusTable)/sizeof(pIniPortStatusTable[0])) { if (Status & pIniPortStatusTable[i].Status) { (*Print)("%s ", pIniPortStatusTable[i].String); } i++; } (*Print)("\n"); } }
VOID ExtractpIniDriverFlags(PNTSD_OUTPUT_ROUTINE Print, DWORD Flags) { DWORD i = 0; if ( Flags != 0 ) { (*Print)(" "); while (i < sizeof(pIniDriverFlagsTable)/sizeof(pIniDriverFlagsTable[0])) { if (Flags & pIniDriverFlagsTable[i].dwDriverFlag) { (*Print)("%s ", pIniDriverFlagsTable[i].String); } i++; } }
(*Print)("\n"); }
// All of the primary spooler structures are identified by an
// "signature" field which is the first DWORD in the structure
// This function examines the signature field in the structure
// and appropriately dumps out the contents of the structure in
// a human-readable format.
BOOL DbgDumpStructure(HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, UINT_PTR pData) {
INIDRIVER IniDriver; INIENVIRONMENT IniEnvironment; INIPRINTER IniPrinter; INIPRINTPROC IniPrintProc; ININETPRINT IniNetPrint; INIMONITOR IniMonitor; INIPORT IniPort; WINIPORT WIniPort; INIFORM IniForm; INIJOB IniJob; SPOOL Spool; WSPOOL WSpool; SHADOWFILE ShadowFile; SHADOWFILE_2 ShadowFile2; PRINTHANDLE PrintHandle; DWORD Signature; INISPOOLER IniSpooler; INIVERSION IniVersion; WCACHEINIPRINTEREXTRA WCacheIniPrinterExtra;
movestruct(pData,&Signature, DWORD); switch (Signature) {
case ISP_SIGNATURE: // dump INISPOOLER
movestruct(pData, &IniSpooler, INISPOOLER); DbgDumpIniSpooler(hCurrentProcess, Print, (PINISPOOLER)&IniSpooler); break;
case IPP_SIGNATURE: // dump INIPRINTPROC structure
movestruct(pData, &IniPrintProc, INIPRINTPROC); DbgDumpIniPrintProc(hCurrentProcess, Print, (PINIPRINTPROC)&IniPrintProc); break;
case ID_SIGNATURE: // dump INIDRIVER structure
movestruct(pData, &IniDriver, INIDRIVER); DbgDumpIniDriver(hCurrentProcess, Print, (PINIDRIVER)&IniDriver); break;
case IE_SIGNATURE: // dump INIENVIRONMENT structure
movestruct(pData, &IniEnvironment, INIENVIRONMENT); DbgDumpIniEnvironment(hCurrentProcess, Print, (PINIENVIRONMENT)&IniEnvironment); break;
case IV_SIGNATURE: // dump INIVERSION structure
movestruct(pData, &IniVersion, INIVERSION); DbgDumpIniVersion(hCurrentProcess, Print, (PINIVERSION)&IniVersion); break;
case IP_SIGNATURE: movestruct(pData, &IniPrinter, INIPRINTER); DbgDumpIniPrinter(hCurrentProcess, Print, (PINIPRINTER)&IniPrinter); break;
case WCIP_SIGNATURE: movestruct(pData, &WCacheIniPrinterExtra, WCACHEINIPRINTEREXTRA); DbgDumpWCacheIniPrinter(hCurrentProcess, Print, (PWCACHEINIPRINTEREXTRA)&WCacheIniPrinterExtra); break;
case IN_SIGNATURE: movestruct(pData, &IniNetPrint, ININETPRINT); DbgDumpIniNetPrint(hCurrentProcess, Print, (PININETPRINT)&IniNetPrint); break;
case IMO_SIGNATURE: movestruct(pData, &IniMonitor, INIMONITOR); DbgDumpIniMonitor(hCurrentProcess, Print, (PINIMONITOR)&IniMonitor); break;
case IPO_SIGNATURE: movestruct(pData, &IniPort, INIPORT); DbgDumpIniPort(hCurrentProcess, Print, (PINIPORT)&IniPort); break;
case WIPO_SIGNATURE: movestruct(pData, &WIniPort, WINIPORT); DbgDumpWIniPort(hCurrentProcess, Print, (PWINIPORT)&WIniPort); break;
case IFO_SIGNATURE: movestruct(pData, &IniForm, INIFORM); DbgDumpIniForm(hCurrentProcess, Print, (PINIFORM)&IniForm); break;
case IJ_SIGNATURE: movestruct(pData, &IniJob, INIJOB); DbgDumpIniJob(hCurrentProcess, Print, (PINIJOB)&IniJob); break;
case SJ_SIGNATURE: movestruct(pData, &Spool, SPOOL); DbgDumpSpool(hCurrentProcess, Print, (PSPOOL)&Spool); break;
case WSJ_SIGNATURE: movestruct(pData, &WSpool, WSPOOL); DbgDumpWSpool(hCurrentProcess, Print, (PWSPOOL)&WSpool); break;
case SF_SIGNATURE: movestruct(pData, &ShadowFile, SHADOWFILE); DbgDumpShadowFile(hCurrentProcess, Print, (PSHADOWFILE)&ShadowFile); break;
case SF_SIGNATURE_2: movestruct(pData, &ShadowFile2, SHADOWFILE_2); DbgDumpShadowFile2(hCurrentProcess, Print, (PSHADOWFILE_2)&ShadowFile2); break;
case PRINTHANDLE_SIGNATURE: movestruct(pData, &PrintHandle, PRINTHANDLE); DbgDumpPrintHandle(hCurrentProcess, Print, (PPRINTHANDLE)&PrintHandle); break;
default: // Unknown signature -- no data to dump
(*Print)("Warning: Unknown Signature\n"); break; } (*Print)("\n");
return TRUE; }
BOOL DbgDumpIniEntry(HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PINIENTRY pIniEntry) { WCHAR Buffer[MAX_PATH+1];
(*Print)("IniEntry\n"); (*Print)("DWORD signature %d\n", pIniEntry->signature); (*Print)("PINIENTRY pNext %p\n", pIniEntry->pNext);
movestr(pIniEntry->pName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pName %ws\n", Buffer);
return TRUE; }
BOOL DbgDumpIniPrintProc(HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PINIPRINTPROC pIniPrintProc) { WCHAR Buffer[MAX_PATH+1]; DWORD i = 0;
(*Print)("IniPrintProc\n"); (*Print)("DWORD signature %d\n", pIniPrintProc->signature); (*Print)("PINIPRINTPROC pNext %x\n", pIniPrintProc->pNext); (*Print)("DWORD cRef %d\n", pIniPrintProc->cRef);
movestr(pIniPrintProc->pName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("DWORD pName %ws\n", Buffer);
movestr(pIniPrintProc->pDLLName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pDLLName %ws\n", Buffer); (*Print)("LPWSTR cbDatatypes %d\n", pIniPrintProc->cbDatatypes); (*Print)("LPWSTR cDatatypes %d\n", pIniPrintProc->cDatatypes); for (i = 0; i < pIniPrintProc->cDatatypes; i++ ) { (*Print)(" Each of the Strings here \n"); } (*Print)("HANDLE hLibrary 0x%.8x\n", pIniPrintProc->hLibrary); (*Print)("FARPROC Install 0x%.8x\n", pIniPrintProc->Install); (*Print)("FARPROC EnumDatatypes 0x%.8x\n", pIniPrintProc->EnumDatatypes); (*Print)("FARPROC Open 0x%.8x\n", pIniPrintProc->Open); (*Print)("FARPROC Print 0x%.8x\n", pIniPrintProc->Print); (*Print)("FARPROC Close 0x%.8x\n", pIniPrintProc->Close); (*Print)("FARPROC Control 0x%.8x\n", pIniPrintProc->Control); (*Print)("CRITICAL_SECTION CriticalSection 0x%.8x\n", pIniPrintProc->CriticalSection);
return TRUE; }
BOOL DbgDumpIniDriver(HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PINIDRIVER pIniDriver) { WCHAR Buffer[MAX_PATH+1]; WCHAR UnKnown[] = L"Not Initialized"; WCHAR Kernel[] = L"Kernel Mode"; WCHAR User[] = L"User Mode"; SYSTEMTIME SystemTime;
(*Print)("IniDriver\n"); (*Print)("DWORD signature %d\n", pIniDriver->signature); (*Print)("PINIDRIVER pNext %p\n", pIniDriver->pNext); (*Print)("DWORD cRef %d\n", pIniDriver->cRef);
movestr(pIniDriver->pName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pName %ws\n", Buffer);
movestr(pIniDriver->pDriverFile, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pDriverFile %ws\n", Buffer);
movestr(pIniDriver->pConfigFile, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pConfigFile %ws\n", Buffer);
movestr(pIniDriver->pDataFile, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pDataFile %ws\n", Buffer);
movestr(pIniDriver->pHelpFile, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pHelpFile %ws\n", Buffer);
movestr(pIniDriver->pDependentFiles, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pDependentFiles %ws\n", Buffer);
movestr(pIniDriver->pMonitorName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pMonitorName %ws\n", Buffer); (*Print)("PINIMONITOR pIniLangMonitor %p\n", pIniDriver->pIniLangMonitor);
movestr(pIniDriver->pDefaultDataType, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pDefaultDataType %ws\n", Buffer);
movestr(pIniDriver->pszzPreviousNames, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pszzPreviousNames %ws\n", Buffer);
switch (pIniDriver->dwDriverAttributes) { case 0: (*Print)("DWORD dwDriverAttributes %ws\n", (LPWSTR)UnKnown); break; case 1: (*Print)("DWORD dwDriverAttributes %ws\n", (LPWSTR)Kernel); break; case 2: (*Print)("DWORD dwDriverAttributes %ws\n", (LPWSTR)User); break; }
(*Print)("DWORD cVersion %d\n", pIniDriver->cVersion); (*Print)("DWORD dwTempDir %d\n", pIniDriver->dwTempDir);
movestr(pIniDriver->pszMfgName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR Manufacturer %ws\n", Buffer);
movestr(pIniDriver->pszOEMUrl, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR OEM URL %ws\n", Buffer);
movestr(pIniDriver->pszHardwareID, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR HardwareID %ws\n", Buffer);
movestr(pIniDriver->pszProvider, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR Provider %ws\n", Buffer);
(*Print)("DWORDLONG DriverVersion %I64x\n", pIniDriver->dwlDriverVersion);
if (pIniDriver->ftDriverDate.dwHighDateTime && pIniDriver->ftDriverDate.dwLowDateTime && FileTimeToSystemTime(&pIniDriver->ftDriverDate, &SystemTime)) { (*Print)("SYSTEMTIME DriverDate %d/%d/%d %d %d:%d:%d.%d\n",SystemTime.wYear, SystemTime.wMonth, SystemTime.wDay, SystemTime.wDayOfWeek, SystemTime.wHour, SystemTime.wMinute, SystemTime.wSecond, SystemTime.wMilliseconds); } else { (*Print)("SYSTEMTIME DriverDate Not initialized\n"); }
(*Print)("DWORD dwDriverFlags %08x", pIniDriver->dwDriverFlags);
ExtractpIniDriverFlags(Print, pIniDriver->dwDriverFlags); return TRUE; }
BOOL DbgDumpIniEnvironment(HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PINIENVIRONMENT pIniEnvironment) { WCHAR Buffer[MAX_PATH+1];
(*Print)("IniEnvironment\n"); (*Print)("DWORD signature %d\n", pIniEnvironment->signature); (*Print)("struct _INIENVIRONMENT *pNext %p\n", pIniEnvironment->pNext); (*Print)("DWORD cRef %d\n", pIniEnvironment->cRef);
movestr(pIniEnvironment->pName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pName %ws\n", Buffer);
movestr(pIniEnvironment->pDirectory, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pDirectory %ws\n", Buffer);
(*Print)("PINIVERSION pIniVersion %p\n", pIniEnvironment->pIniVersion); (*Print)("PINIPRINTPROC pIniPrintProc %p\n", pIniEnvironment->pIniPrintProc); (*Print)("PINISPOOLER pIniSpooler %p\n", pIniEnvironment->pIniSpooler);
return TRUE; }
BOOL DbgDumpIniVersion( HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PINIVERSION pIniVersion ) { WCHAR Buffer[MAX_PATH+1];
(*Print)("IniVersion\n"); (*Print)("DWORD signature %d\n", pIniVersion->signature); (*Print)("struct _IniVersion *pNext %p\n", pIniVersion->pNext);
movestr(pIniVersion->pName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pName %ws\n", Buffer);
movestr(pIniVersion->szDirectory, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR szDirectory %ws\n", Buffer); (*Print)("DWORD cMajorVersion %d\n", pIniVersion->cMajorVersion ); (*Print)("DWORD cMinorVersion %d\n", pIniVersion->cMinorVersion ); (*Print)("PINIDRIVER pIniDriver %p\n", pIniVersion->pIniDriver );
return TRUE; }
BOOL DbgDumpWCacheIniPrinter(HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PWCACHEINIPRINTEREXTRA pWCacheIniPrinter) { WCHAR Buffer[MAX_PATH+1];
(*Print)("WCacheIniPrinterExtra\n"); (*Print)("DWORD signature %d\n", pWCacheIniPrinter->signature);
(*Print)("DWORD cb %d\n", pWCacheIniPrinter->cb);
(*Print)("LPPRINTER_INFO_2 pPI2 %p\n", pWCacheIniPrinter->pPI2); (*Print)("DWORD cbPI2 %d\n", pWCacheIniPrinter->cbPI2);
DbgDumpPI2( hCurrentProcess, Print, (UINT_PTR)pWCacheIniPrinter->pPI2, 1 );
(*Print)("DWORD cCacheID %d\n", pWCacheIniPrinter->cCacheID ); (*Print)("DWORD cRef %d\n", pWCacheIniPrinter->cRef ); (*Print)("DWORD dwServerVersion %x\n", pWCacheIniPrinter->dwServerVersion ); (*Print)("DWORD dwTickCount %x\n", pWCacheIniPrinter->dwTickCount ); (*Print)("DWORD Status 0x%.8x\n", pWCacheIniPrinter->Status ); ExtractWCachePrinterStatus( Print, pWCacheIniPrinter->Status );
return TRUE; }
BOOL DbgDumpIniPrinter(HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PINIPRINTER pIniPrinter) { WCHAR Buffer[MAX_PATH+1];
(*Print)("IniPrinter\n"); (*Print)("DWORD signature %d\n", pIniPrinter->signature);
(*Print)("PINIPRINTER pNext %p\n", pIniPrinter->pNext); (*Print)("DWORD cRef %d\n", pIniPrinter->cRef);
movestr(pIniPrinter->pName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pName %ws\n", Buffer);
movestr(pIniPrinter->pShareName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pShareName %ws\n", Buffer);
(*Print)("PINIPRINTPROC pIniPrintProc %p\n", pIniPrinter->pIniPrintProc);
movestr(pIniPrinter->pDatatype, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pDatatype %ws\n", Buffer);
movestr(pIniPrinter->pParameters, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pParameters %ws\n", Buffer);
movestr(pIniPrinter->pComment, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pComment %ws\n", Buffer);
(*Print)("PINIDRIVER pIniDriver %p\n", pIniPrinter->pIniDriver); (*Print)("DWORD cbDevMode %d\n", pIniPrinter->cbDevMode); (*Print)("LPDEVMODE pDevMode %p\n", pIniPrinter->pDevMode); (*Print)("DWORD Priority %d\n", pIniPrinter->Priority); (*Print)("DWORD DefaultPriority %d\n", pIniPrinter->DefaultPriority); (*Print)("DWORD StartTime %d\n", pIniPrinter->StartTime); (*Print)("DWORD UntilTime %d\n", pIniPrinter->UntilTime);
movestr(pIniPrinter->pSepFile, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pSepFile %ws\n", Buffer);
(*Print)("DWORD Status 0x%.8x\n", pIniPrinter->Status); ExtractPrinterStatus( Print, pIniPrinter->Status );
movestr(pIniPrinter->pLocation, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pLocation %ws\n", Buffer);
(*Print)("DWORD Attributes 0x%.8x\n",pIniPrinter->Attributes); ExtractPrinterAttributes( Print, pIniPrinter->Attributes );
(*Print)("DWORD cJobs %d\n", pIniPrinter->cJobs); (*Print)("DWORD AveragePPM %d\n", pIniPrinter->AveragePPM); (*Print)("BOOL GenerateOnClose 0x%.8x\n", pIniPrinter->GenerateOnClose); (*Print)("PINIPORT pIniNetPort %p\n", pIniPrinter->pIniNetPort); (*Print)("PINIJOB pIniFirstJob %p\n", pIniPrinter->pIniFirstJob); (*Print)("PINIJOB pIniLastJob %p\n", pIniPrinter->pIniLastJob); (*Print)("PSECURITY_DESCRIPTOR pSecurityDescriptor %p\n", pIniPrinter->pSecurityDescriptor); (*Print)("PSPOOL *pSpool %p\n", pIniPrinter->pSpool);
if ( pIniPrinter->pSpoolDir == NULL ) {
(*Print)("LPWSTR pSpoolDir %p\n", pIniPrinter->pSpoolDir);
} else {
movestr(pIniPrinter->pSpoolDir, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pSpoolDir %ws\n", Buffer); }
(*Print)("DWORD cTotalJobs %d\n", pIniPrinter->cTotalJobs); (*Print)("DWORD cTotalBytes.LowPart %d\n", pIniPrinter->cTotalBytes.LowPart); (*Print)("DWORD cTotalBytes.HighPart %d\n", pIniPrinter->cTotalBytes.HighPart); (*Print)("SYSTEMTIME stUpTime %d/%d/%d %d %d:%d:%d.%d\n",pIniPrinter->stUpTime.wYear, pIniPrinter->stUpTime.wMonth, pIniPrinter->stUpTime.wDay, pIniPrinter->stUpTime.wDayOfWeek, pIniPrinter->stUpTime.wHour, pIniPrinter->stUpTime.wMinute, pIniPrinter->stUpTime.wSecond, pIniPrinter->stUpTime.wMilliseconds); (*Print)("DWORD MaxcRef %d\n", pIniPrinter->MaxcRef); (*Print)("DWORD cTotalPagesPrinted %d\n", pIniPrinter->cTotalPagesPrinted); (*Print)("DWORD cSpooling %d\n", pIniPrinter->cSpooling); (*Print)("DWORD cMaxSpooling %d\n", pIniPrinter->cMaxSpooling); (*Print)("DWORD cErrorOutOfPaper %d\n", pIniPrinter->cErrorOutOfPaper); (*Print)("DWORD cErrorNotReady %d\n", pIniPrinter->cErrorNotReady); (*Print)("DWORD cJobError %d\n", pIniPrinter->cJobError); (*Print)("DWORD dwLastError %d\n", pIniPrinter->dwLastError); (*Print)("PINISPOOLER pIniSpooler %p\n", pIniPrinter->pIniSpooler); (*Print)("DWORD cZombieRef %d\n", pIniPrinter->cZombieRef); (*Print)("LPBYTE pExtraData %x\n", pIniPrinter->pExtraData); (*Print)("DWORD cChangeID %d\n", pIniPrinter->cChangeID); (*Print)("DWORD cPorts %d\n", pIniPrinter->cPorts); (*Print)("PINIPORT *ppIniPorts %x\n", pIniPrinter->ppIniPorts); (*Print)("DWORD PortStatus %d\n", pIniPrinter->PortStatus); (*Print)("DWORD dnsTimeout %d\n", pIniPrinter->dnsTimeout); (*Print)("DWORD txTimeout %d\n", pIniPrinter->txTimeout); movestr(pIniPrinter->pszObjectGUID, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pszObjectGUID %ws\n", Buffer); (*Print)("DWORD DsKeyUpdate %x\n", pIniPrinter->DsKeyUpdate); (*Print)("DWORD DsKeyUpdateForeground %x\n", pIniPrinter->DsKeyUpdateForeground); movestr(pIniPrinter->pszDN, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pszDN %ws\n", Buffer); movestr(pIniPrinter->pszCN, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pszCN %ws\n", Buffer); (*Print)("DWORD cRefIC %d\n", pIniPrinter->cRefIC); (*Print)("DWORD dwAction %d\n", pIniPrinter->dwAction); (*Print)("BOOL bDsPendingDeletion %d\n", pIniPrinter->bDsPendingDeletion);
return TRUE; }
BOOL DbgDumpIniNetPrint(HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PININETPRINT pIniNetPrint) { WCHAR Buffer[MAX_PATH+1];
(*Print)("IniNetPrint\n"); (*Print)("DWORD signature %d\n", pIniNetPrint->signature); (*Print)("PININETPRINT *pNext %p\n", pIniNetPrint->pNext); (*Print)("DWORD TickCount %d\n", pIniNetPrint->TickCount);
movestr(pIniNetPrint->pDescription, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pDescription %ws\n", Buffer);
movestr(pIniNetPrint->pName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pName %ws\n", Buffer);
movestr(pIniNetPrint->pComment, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pComment %ws\n", Buffer);
return TRUE; }
BOOL DbgDumpIniMonitor(HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PINIMONITOR pIniMonitor) { WCHAR Buffer[MAX_PATH+1];
(*Print)("IniMonitor\n"); (*Print)("DWORD signature %d\n", pIniMonitor->signature); (*Print)("PINIMONITOR pNext %p\n", pIniMonitor->pNext); (*Print)("DWORD cRef %d\n", pIniMonitor->cRef);
movestr(pIniMonitor->pName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pName %ws\n", Buffer);
movestr(pIniMonitor->pMonitorDll, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pMonitorDll %ws\n", Buffer);
(*Print)("HANDLE hModule %p\n", pIniMonitor->hModule); (*Print)("PMONITORINIT pMonitorInit %p\n", pIniMonitor->pMonitorInit); (*Print)("HANDLE hMonitor %p\n", pIniMonitor->hMonitor); (*Print)("BOOL bUplevel %%.8x\n", pIniMonitor->bUplevel); (*Print)("PINISPOOLER pIniSpooler %p\n", pIniMonitor->pIniSpooler);
return TRUE; }
BOOL DbgDumpIniPort(HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PINIPORT pIniPort) { WCHAR Buffer[MAX_PATH+1];
(*Print)("IniPort\n"); (*Print)("DWORD signature %d\n", pIniPort->signature); (*Print)("struct _INIPORT *pNext %p\n", pIniPort->pNext); (*Print)("DWORD cRef 0x%.8x\n", pIniPort->cRef);
movestr(pIniPort->pName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pName %ws\n", Buffer); (*Print)("HANDLE hProc 0x%.8x\n", pIniPort->hProc); (*Print)("DWORD Status 0x%.8x\n", pIniPort->Status); ExtractpIniPortStatus( Print, pIniPort->Status); ExtractPortStatus( Print, pIniPort->PrinterStatus);
(*Print)("HANDLE Semaphore 0x%.8x\n", pIniPort->Semaphore); (*Print)("PINIJOB pIniJob %p\n", pIniPort->pIniJob); (*Print)("DWORD cJobs %d\n", pIniPort->cJobs); (*Print)("DWORD cPrinters %d\n", pIniPort->cPrinters); (*Print)("PINIPRINTER *ppIniPrinter %p\n", pIniPort->ppIniPrinter);
(*Print)("PINIMONITOR pIniMonitor %p\n", pIniPort->pIniMonitor); (*Print)("PINIMONITOR pIniLangMonitor %p\n", pIniPort->pIniLangMonitor); (*Print)("HANDLE hWaitToOpenOrClose 0x%.8x\n", pIniPort->hWaitToOpenOrClose); (*Print)("HANDLE hEvent 0x%.8x\n", pIniPort->hEvent); (*Print)("HANDLE hPort 0x%.8x\n", pIniPort->hPort); (*Print)("HANDLE Ready 0x%.8x\n", pIniPort->Ready); (*Print)("HANDLE hPortThread 0x%.8x\n", pIniPort->hPortThread); (*Print)("PINISPOOLER pIniSpooler %p\n", pIniPort->pIniSpooler); (*Print)("DWORD InCriticalSection %d\n", pIniPort->InCriticalSection);
return TRUE; }
BOOL DbgDumpWIniPort(HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PWINIPORT pWIniPort) { WCHAR Buffer[MAX_PATH+1];
(*Print)("WIniPort\n"); (*Print)("DWORD signature %d\n", pWIniPort->signature); (*Print)("DWORD cb %d\n", pWIniPort->cb); (*Print)("struct _WIniPort *pNext %p\n", pWIniPort->pNext);
movestr(pWIniPort->pName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pName %ws\n", Buffer);
return TRUE; }
BOOL DbgDumpIniForm(HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PINIFORM pIniForm) { WCHAR Buffer[MAX_PATH+1];
(*Print)("IniForm\n"); (*Print)("DWORD signature %d\n", pIniForm->signature); (*Print)("struct _INIFORM *pNext %p\n", pIniForm->pNext); (*Print)("DWORD cRef %d\n", pIniForm->cRef);
movestr(pIniForm->pName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pName %p %ws\n", pIniForm->pName, Buffer );
(*Print)("SIZEL Size cx %d cy %d\n", pIniForm->Size.cx, pIniForm->Size.cy); (*Print)("RECTL ImageableArea left %d right %d top %d bottom %d\n", pIniForm->ImageableArea.left, pIniForm->ImageableArea.right, pIniForm->ImageableArea.top, pIniForm->ImageableArea.bottom); (*Print)("DWORD Type 0x%.8x", pIniForm->Type);
if ( pIniForm->Type & FORM_BUILTIN ) (*Print)(" FORM_BUILTIN\n"); else (*Print)(" FORM_USERDEFINED\n");
(*Print)("DWORD cFormOrder %d\n", pIniForm->cFormOrder);
return TRUE; }
BOOL DbgDumpIniSpooler(HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PINISPOOLER pIniSpooler) { WCHAR Buffer[MAX_PATH+1];
(*Print)("IniSpooler\n" ); (*Print)("DWORD signature %d\n", pIniSpooler->signature); (*Print)("PINISPOOLER pIniNextSpooler %p\n", pIniSpooler->pIniNextSpooler); (*Print)("DWORD cRef %d\n", pIniSpooler->cRef); movestr(pIniSpooler->pMachineName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pMachineName %ws\n", Buffer); (*Print)("DWORD cOtherNames %d\n", pIniSpooler->cOtherNames); (*Print)("(LPWSTR *) ppszOtherNames %p\n", pIniSpooler->ppszOtherNames); movestr(pIniSpooler->pDir, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pDir %ws\n", Buffer); (*Print)("PINIPRINTER pIniPrinter %p\n", pIniSpooler->pIniPrinter); (*Print)("PINIENVIRONMENT pIniEnvironment %p\n", pIniSpooler->pIniEnvironment); (*Print)("PINIMONITOR pIniMonitor %p\n", pIniSpooler->pIniMonitor); (*Print)("PINIPORT pIniPort %p\n", pIniSpooler->pIniPort); (*Print)("PSHARED pShared %p\n", pIniSpooler->pShared); (*Print)("PININETPRINT pIniNetPrint %p\n", pIniSpooler->pIniNetPrint); (*Print)("PSPOOL pSpool %p\n", pIniSpooler->pSpool); movestr(pIniSpooler->pDefaultSpoolDir, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pDefaultSpoolDir %ws\n", Buffer); movestr(pIniSpooler->pszRegistryMonitors, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pszRegistryMonitors %ws\n", Buffer); movestr(pIniSpooler->pszRegistryEnvironments, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pszRegistryEnvironments %ws\n", Buffer); movestr(pIniSpooler->pszRegistryEventLog, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pszRegistryEventLog %ws\n", Buffer); movestr(pIniSpooler->pszRegistryProviders, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pszRegistryProviders %ws\n", Buffer); movestr(pIniSpooler->pszEventLogMsgFile, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pszEventLogMsgFile %ws\n", Buffer); (*Print)("PSHARE_INFO_2 pDriversShareInfo %p\n", pIniSpooler->pDriversShareInfo); movestr(pIniSpooler->pszDriversShare, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pszDriversShare %ws\n", Buffer); movestr(pIniSpooler->pszRegistryForms, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pszRegistryForms %ws\n", Buffer); (*Print)("DWORD SpoolerFlags %d\n", pIniSpooler->SpoolerFlags ); ExtractSpoolerFlags( Print, pIniSpooler->SpoolerFlags ); (*Print)("FARPROC pfnReadRegistryExtra 0x%.8x\n", pIniSpooler->pfnReadRegistryExtra ); (*Print)("FARPROC pfnWriteRegistryExtra 0x%.8x\n", pIniSpooler->pfnWriteRegistryExtra ); (*Print)("FARPROC pfnFreePrinterExtra 0x%.8x\n", pIniSpooler->pfnFreePrinterExtra ); (*Print)("DWORD cEnumerateNetworkPrinters %d\n", pIniSpooler->cEnumerateNetworkPrinters ); (*Print)("DWORD cAddNetPrinters %d\n", pIniSpooler->cAddNetPrinters ); (*Print)("DWORD cFormOrderMax %d\n", pIniSpooler->cFormOrderMax ); (*Print)("HKEY hckRoot %p\n", pIniSpooler->hckRoot ); (*Print)("HKEY hckPrinters %p\n", pIniSpooler->hckPrinters ); (*Print)("DWORD cFullPrintingJobs %d\n", pIniSpooler->cFullPrintingJobs ); (*Print)("DWORD hEventNoPrintingJobs %p\n", pIniSpooler->hEventNoPrintingJobs ); (*Print)("HKEY hJobIdMap %p\n", pIniSpooler->hJobIdMap ); (*Print)("DWORD dwEventLogging %d\n", pIniSpooler->dwEventLogging ); (*Print)("BOOL bEnableNetPopups %d\n", pIniSpooler->bEnableNetPopups ); (*Print)("DWORD dwJobCompletionTimeout %d\n", pIniSpooler->dwJobCompletionTimeout ); (*Print)("DWORD dwBeepEnabled %d\n", pIniSpooler->dwBeepEnabled ); (*Print)("HKEY bEnableNetPopupToComputer %d\n", pIniSpooler->bEnableNetPopupToComputer ); (*Print)("HKEY bEnableRetryPopups %d\n", pIniSpooler->bEnableRetryPopups ); movestr(pIniSpooler->pszClusterGUID, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pszClusterGUID %ws\n", Buffer); (*Print)("HKEY hClusterToken %p\n", pIniSpooler->hClusterToken ); (*Print)("DWORD dwRestartJobOnPoolTimeout %p\n", pIniSpooler->dwRestartJobOnPoolTimeout ); (*Print)("DWORD bRestartJobOnPoolEnabled %p\n", pIniSpooler->bRestartJobOnPoolEnabled ); (*Print)("DWORD bImmortal %p\n", pIniSpooler->bImmortal ); movestr(pIniSpooler->pszFullMachineName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pszFullMachineName %ws\n", Buffer); return TRUE; }
BOOL DbgDumpIniJob(HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PINIJOB pIniJob) { WCHAR Buffer[MAX_PATH+1];
(*Print)("IniJob\n"); (*Print)("DWORD signature %d\n", pIniJob->signature); (*Print)("PINIJOB pIniNextJob %p\n", pIniJob->pIniNextJob); (*Print)("PINIJOB pIniPrevJob %p\n", pIniJob->pIniPrevJob); (*Print)("DWORD cRef %d\n", pIniJob->cRef); (*Print)("DWORD Status 0x%.8x\n", pIniJob->Status); ExtractJobStatus( Print, pIniJob->Status );
(*Print)("DWORD JobId %d\n", pIniJob->JobId); (*Print)("DWORD Priority %d\n", pIniJob->Priority);
movestr(pIniJob->pNotify, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pNotify %ws\n", Buffer);
movestr(pIniJob->pUser, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pUser %ws\n", Buffer);
movestr(pIniJob->pMachineName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pMachineName %ws\n", Buffer);
movestr(pIniJob->pDocument, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pDocument %ws\n", Buffer);
movestr(pIniJob->pOutputFile, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pOutputFile %ws\n", Buffer);
(*Print)("PINIPRINTER pIniPrinter %p\n", pIniJob->pIniPrinter); (*Print)("PINIDRIVER pIniDriver %p\n", pIniJob->pIniDriver); (*Print)("LPDEVMODE pDevMode %p\n", pIniJob->pDevMode); (*Print)("PINIPRINTPROC pIniPrintProc %p\n", pIniJob->pIniPrintProc);
movestr(pIniJob->pDatatype, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pDatatype %ws\n", Buffer);
movestr(pIniJob->pParameters, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pParameters %ws\n", Buffer); (*Print)("SYSTEMTIME Submitted %d/%d/%d %d %d:%d:%d.%d\n",pIniJob->Submitted.wYear, pIniJob->Submitted.wMonth, pIniJob->Submitted.wDay, pIniJob->Submitted.wDayOfWeek, pIniJob->Submitted.wHour, pIniJob->Submitted.wMinute, pIniJob->Submitted.wSecond, pIniJob->Submitted.wMilliseconds); // (*Print)("DWORD StartPrintingTickCount %d\n", pIniJob->StartPrintingTickCount );
(*Print)("DWORD Time %d\n", pIniJob->Time); (*Print)("DWORD StartTime %d\n", pIniJob->StartTime); (*Print)("DWORD UntilTime %d\n", pIniJob->UntilTime); (*Print)("DWORD Size %d\n", pIniJob->Size); (*Print)("HANDLE hWriteFile 0x%.8x\n", pIniJob->hWriteFile);
movestr(pIniJob->pStatus, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pStatus %ws\n", Buffer);
(*Print)("PBOOL pBuffer %p\n", pIniJob->pBuffer); (*Print)("DWORD cbBuffer %d\n", pIniJob->cbBuffer); (*Print)("HANDLE WaitForRead 0x%.8x\n", pIniJob->WaitForRead); (*Print)("HANDLE WaitForWrite 0x%.8x\n", pIniJob->WaitForWrite); (*Print)("HANDLE StartDocComplete 0x%.8x\n", pIniJob->StartDocComplete); (*Print)("DWORD StartDocError 0x%.8x\n", pIniJob->StartDocError); (*Print)("PINIPORT pIniPort %p\n", pIniJob->pIniPort); (*Print)("HANDLE hToken 0x%.8x\n", pIniJob->hToken); (*Print)("PSECURITY_DESCRIPTOR pSecurityDescriptor %p\n", pIniJob->pSecurityDescriptor); (*Print)("DWORD cPagesPrinted %d\n", pIniJob->cPagesPrinted); (*Print)("DWORD cPages %d\n", pIniJob->cPages); (*Print)("DWORD dwJobNumberOfPagesPerSide %d\n", pIniJob->dwJobNumberOfPagesPerSide); (*Print)("DWORD dwDrvNumberOfPagesPerSide %d\n", pIniJob->dwDrvNumberOfPagesPerSide); (*Print)("DWORD cLogicalPagesPrinted %d\n", pIniJob->cLogicalPagesPrinted); (*Print)("DWORD cLogicalPages %d\n", pIniJob->cLogicalPages); (*Print)("BOOL GenerateOnClose 0x%.8x\n", pIniJob->GenerateOnClose); (*Print)("DWORD cbPrinted %d\n", pIniJob->cbPrinted); (*Print)("DWORD NextJobId %d\n", pIniJob->NextJobId); (*Print)("PINIJOB pCurrentIniJob %p\n", pIniJob->pCurrentIniJob); (*Print)("DWORD dwJobControlsPending %d\n", pIniJob->dwJobControlsPending); (*Print)("DWORD dwReboots %d\n", pIniJob->dwReboots); (*Print)("DWORD dwValidSize %d\n", pIniJob->dwValidSize); (*Print)("DWORD bWaitForEnd %d\n", pIniJob->bWaitForEnd); (*Print)("DWORD WaitForSeek %d\n", pIniJob->WaitForSeek); (*Print)("DWORD bWaitForSeek %d\n", pIniJob->bWaitForSeek); (*Print)("DWORD dwAlert %d\n", pIniJob->dwAlert);
movestr(pIniJob->pszSplFileName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pszSplFileName %ws\n", Buffer);
(*Print)("HANDLE hFileItem 0x%.8x\n", pIniJob->hFileItem); (*Print)("DWORD AddJobLevel %d\n", pIniJob->AddJobLevel);
return TRUE; }
BOOL DbgDumpProvidor(HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, LPPROVIDOR pProvidor) { WCHAR Buffer[MAX_PATH+1];
movestr(pProvidor->lpName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR ProvidorName %ws\n", Buffer); (*Print)("HANDLE hModule %p\n", pProvidor->hModule);
return TRUE; }
BOOL DbgDumpSpool(HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PSPOOL pSpool) { WCHAR Buffer[MAX_PATH+1];
(*Print)("Spool - LocalSpl Handle\n"); (*Print)("DWORD signature %d\n", pSpool->signature); (*Print)("struct _SPOOL *pNext %p\n", pSpool->pNext); (*Print)("DWORD cRef %d\n", pSpool->cRef);
movestr(pSpool->pName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pName %ws\n", Buffer);
movestr(pSpool->pFullMachineName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pFullMachineName %ws\n", Buffer);
movestr(pSpool->pDatatype, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pDatatype %ws\n", Buffer); (*Print)("PINIPRINTPROC pIniPrintProc %p\n", pSpool->pIniPrintProc); (*Print)("LPDEVMODE pDevMode %p\n", pSpool->pDevMode); (*Print)("PINIPRINTER pIniPrinter %p\n", pSpool->pIniPrinter); (*Print)("PINIPORT pIniPort %p\n", pSpool->pIniPort); (*Print)("PINIJOB pIniJob %p\n", pSpool->pIniJob); (*Print)("DWORD TypeofHandle %d\n", pSpool->TypeofHandle); ExtractpSpoolTypeOfHandle( Print, pSpool->TypeofHandle);
(*Print)("PINIPORT pIniNetPort %p\n", pSpool->pIniNetPort); (*Print)("HANDLE hPort %p\n", pSpool->hPort); (*Print)("DWORD Status %d\n", pSpool->Status); ExtractpSpoolStatus( Print, pSpool->Status);
(*Print)("ACCESS_MASK GrantedAccess %p\n", (DWORD)pSpool->GrantedAccess); (*Print)("DWORD ChangeFlags %p\n", pSpool->ChangeFlags); (*Print)("DWORD WaitFlags %x\n", pSpool->WaitFlags); (*Print)("PDWORD pChangeFlags %p\n", pSpool->pChangeFlags); (*Print)("HANDLE ChangeEvent %d\n", pSpool->ChangeEvent); (*Print)("DWORD OpenPortError %x\n", pSpool->OpenPortError); (*Print)("HANDLE hNotify %p\n", pSpool->hNotify); (*Print)("ESTATUS eStatus %d\n", pSpool->eStatus); (*Print)("pIniSpooler pIniSpooler %p\n", pSpool->pIniSpooler); (*Print)("PINIXCV pIniXcv %p\n", pSpool->pIniXcv); movestr(pSpool->SplClientInfo1.pUserName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pUserName %ws\n", Buffer); movestr(pSpool->SplClientInfo1.pMachineName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pMachineName %ws\n", Buffer);
return TRUE; }
BOOL DbgDumpWSpool(HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PWSPOOL pWSpool) { WCHAR Buffer[MAX_PATH+1];
(*Print)("WSpool - Win32Spl Handle\n"); (*Print)("DWORD signature %d\n", pWSpool->signature); (*Print)("struct _WSPOOL *pNext %p\n", pWSpool->pNext); (*Print)("struct _WSPOOL *pPrev %p\n", pWSpool->pPrev); (*Print)("DWORD cRef %d\n", pWSpool->cRef);
Buffer[0] = L'\0'; movestr(pWSpool->pName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pName %ws\n", Buffer); Buffer[0] = L'\0';
(*Print)("DWORD Type %d\n", pWSpool->Type);
if ( pWSpool->Type == SJ_WIN32HANDLE ) (*Print)(" SJ_WIN32HANDLE\n");
if ( pWSpool->Type == LM_HANDLE ) (*Print)(" LM_HANDLE\n");
(*Print)("HANDLE RpcHandle %p\n", pWSpool->RpcHandle);
movestr(pWSpool->pServer, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pServer %ws\n", Buffer); Buffer[0] = L'\0';
movestr(pWSpool->pShare, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pShare %ws\n", Buffer); Buffer[0] = L'\0';
(*Print)("HANDLE hFile %p\n", pWSpool->hFile); (*Print)("DWORD Status %d\n", pWSpool->Status); ExtractWSpoolStatus( Print, pWSpool->Status );
(*Print)("DWORD RpcError %d\n", pWSpool->RpcError); (*Print)("LMNOTIFY LMNotify %p %p %p\n", pWSpool->LMNotify.ChangeEvent, pWSpool->LMNotify.hNotify, pWSpool->LMNotify.fdwChangeFlags );
(*Print)("HANDLE hIniSpooler %p\n", pWSpool->hIniSpooler ); (*Print)("HANDLE hSplPrinter %p\n", pWSpool->hSplPrinter ); (*Print)("HANDLE hToken %p\n", pWSpool->hToken );
movestr(pWSpool->PrinterDefaults.pDatatype, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR PrinterDefaults.pDatatype %ws\n", Buffer); Buffer[0] = L'\0'; (*Print)("LPDEVMODE PrinterDefaults.pDevMode %p\n", pWSpool->PrinterDefaults.pDevMode); (*Print)("ACCESS_MASK PrinterDefaults.DesiredAccess %x\n", pWSpool->PrinterDefaults.DesiredAccess); ExtractPrinterAccess( Print, pWSpool->PrinterDefaults.DesiredAccess); (*Print)("HANDLE hWaitValidHandle %p\n", pWSpool->hWaitValidHandle ); (*Print)("BOOL bNt3xServer %d\n", pWSpool->bNt3xServer);
return TRUE; }
BOOL DbgDumpShadowFile(HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PSHADOWFILE pShadowFile) { WCHAR Buffer[MAX_PATH+1];
(*Print)("ShadowFile\n"); (*Print)("DWORD signature %d\n", pShadowFile->signature); (*Print)("DWORD Status 0x%.8x\n", pShadowFile->Status); (*Print)("DWORD JobId %d\n", pShadowFile->JobId); (*Print)("DWORD Priority %d\n", pShadowFile->Priority);
movestr(pShadowFile->pNotify, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pNotify %ws\n", Buffer);
movestr(pShadowFile->pUser, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pUser %ws\n", Buffer);
movestr(pShadowFile->pDocument, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pDocument %ws\n", Buffer);
movestr(pShadowFile->pPrinterName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pPrinterName %ws\n", Buffer);
movestr(pShadowFile->pDriverName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pDriverName %ws\n", Buffer);
(*Print)("LPDEVMODE pDevMode %p\n", pShadowFile->pDevMode);
movestr(pShadowFile->pPrintProcName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pPrintProcName %ws\n", Buffer);
movestr(pShadowFile->pDatatype, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pDatatype %ws\n", Buffer);
movestr(pShadowFile->pDatatype, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pParameters %ws\n", Buffer); //SYSTEMTIME Submitted;
(*Print)("DWORD StartTime %d\n", pShadowFile->StartTime); (*Print)("DWORD UntilTime %d\n", pShadowFile->UntilTime); (*Print)("DWORD Size %d\n", pShadowFile->Size); (*Print)("DWORD cPages %d\n", pShadowFile->cPages); (*Print)("DWORD cbSecurityDescriptor %d\n", pShadowFile->cbSecurityDescriptor); (*Print)("PSECURITY_DESCRIPTOR pSecurityDescriptor %p\n", pShadowFile->pSecurityDescriptor);
return TRUE; }
BOOL DbgDumpShadowFile2(HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PSHADOWFILE_2 pShadowFile) { WCHAR Buffer[MAX_PATH+1];
(*Print)("ShadowFile2\n"); (*Print)("DWORD signature %x\n", pShadowFile->signature); (*Print)("DWORD Status 0x%.8x\n", pShadowFile->Status); (*Print)("DWORD JobId %d\n", pShadowFile->JobId); (*Print)("DWORD Priority %d\n", pShadowFile->Priority);
movestr(pShadowFile->pNotify, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pNotify %ws\n", Buffer);
movestr(pShadowFile->pUser, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pUser %ws\n", Buffer);
movestr(pShadowFile->pDocument, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pDocument %ws\n", Buffer);
movestr(pShadowFile->pPrinterName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pPrinterName %ws\n", Buffer);
movestr(pShadowFile->pDriverName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pDriverName %ws\n", Buffer);
(*Print)("LPDEVMODE pDevMode %p\n", pShadowFile->pDevMode);
movestr(pShadowFile->pPrintProcName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pPrintProcName %ws\n", Buffer);
movestr(pShadowFile->pDatatype, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pDatatype %ws\n", Buffer);
movestr(pShadowFile->pDatatype, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pParameters %ws\n", Buffer); //SYSTEMTIME Submitted;
(*Print)("DWORD StartTime %d\n", pShadowFile->StartTime); (*Print)("DWORD UntilTime %d\n", pShadowFile->UntilTime); (*Print)("DWORD Size %d\n", pShadowFile->Size); (*Print)("DWORD cPages %d\n", pShadowFile->cPages); (*Print)("DWORD cbSecurityDescriptor %d\n", pShadowFile->cbSecurityDescriptor); (*Print)("PSECURITY_DESCRIPTOR pSecurityDescriptor %p\n", pShadowFile->pSecurityDescriptor); (*Print)("DWORD Version %d\n", pShadowFile->Version); (*Print)("DWORD dwReboots %d\n", pShadowFile->dwReboots);
return TRUE; }
BOOL DbgDumpPrintHandle(HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PPRINTHANDLE pPrintHandle) { NOTIFY Notify;
(*Print)("PrintHandle\n"); (*Print)("DWORD signature %d\n", pPrintHandle->signature); (*Print)("LPPROVIDOR pProvidor %p\n", pPrintHandle->pProvidor); (*Print)("HANDLE hPrinter 0x%.8x\n", pPrintHandle->hPrinter); (*Print)("PCHANGE pChange %p\n", pPrintHandle->pChange);
if (pPrintHandle->pChange) { DbgDumpChange(hCurrentProcess, Print, pPrintHandle->pChange); }
(*Print)("PNOTIFY pNotify %p\n", pPrintHandle->pNotify);
if (pPrintHandle->pNotify) { movestruct(pPrintHandle->pNotify, &Notify, NOTIFY); DbgDumpNotify(hCurrentProcess, Print, &Notify); }
(*Print)("PPRINTHANDLE pNext %p\n", pPrintHandle->pNext); (*Print)("DWORD fdwReplyTypes 0x%.8x\n", pPrintHandle->fdwReplyTypes);
return TRUE; }
BOOL DbgDumpChange(HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PCHANGE pChange) {
WCHAR Buffer[MAX_PATH+1]; CHANGE Change;
// if we've got no address, then quit now - nothing we can do
if (!pChange) { return(0); }
movestruct(pChange, &Change, CHANGE);
if (Change.signature != CHANGEHANDLE_SIGNATURE) { (*Print)("Warning: Unknown Signature\n"); return FALSE; }
(*Print)("Change %p\n", pChange); (*Print)(" Link %p\n", Change.Link.pNext); (*Print)(" signature %d\n", Change.signature); (*Print)(" eStatus 0x%x ", Change.eStatus); ExtractChangeStatus(Print, Change.eStatus);
(*Print)(" dwColor %d\n", Change.dwColor); (*Print)(" cRef %d\n", Change.cRef);
movestr(Change.pszLocalMachine, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)(" pszLocalMachine %ws\n", Buffer);
DbgDumpChangeInfo(hCurrentProcess, Print, &Change.ChangeInfo);
(*Print)(" dwCount 0x%.8x\n", Change.dwCount); (*Print)(" hEvent 0x%.8x\n", Change.hEvent); (*Print)(" fdwChangeFlags 0x%.8x\n", Change.fdwChangeFlags); (*Print)(" dwPrinterRemote 0x%.8x\n", Change.dwPrinterRemote); (*Print)(" hNotifyRemote 0x%.8x\n", Change.hNotifyRemote);
return TRUE; }
BOOL DbgDumpNotify(HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PNOTIFY pNotify) { (*Print)("Notify\n"); (*Print)(" signature %d\n", pNotify->signature); (*Print)(" pPrintHandle %p\n", pNotify->pPrintHandle);
return TRUE; }
BOOL DbgDumpChangeInfo(HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, PCHANGEINFO pChangeInfo) { (*Print)(" ChangeInfo %x\n", pChangeInfo); (*Print)(" Link %p\n", pChangeInfo->Link.pNext); (*Print)(" pPrintHandle %p\n", pChangeInfo->pPrintHandle); (*Print)(" fdwOptions 0x%.8x\n", pChangeInfo->fdwOptions); (*Print)(" fdwFilterFlags 0x%.8x\n", pChangeInfo->fdwFilterFlags); (*Print)(" dwStatus 0x%.8x\n", pChangeInfo->fdwStatus); (*Print)(" dwPollTime 0x%.8x\n", pChangeInfo->dwPollTime); (*Print)(" dwPollTimeLeft 0x%.8x\n", pChangeInfo->dwPollTimeLeft); (*Print)(" bResetPollTime 0x%.8x\n", pChangeInfo->bResetPollTime); (*Print)(" fdwFlags 0x%.8x\n", pChangeInfo->fdwFlags); (*Print)(" pPrinterNotifyInfo %p\n", pChangeInfo->pPrinterNotifyInfo);
return TRUE; }
BOOL DbgDumpLL( HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, UINT_PTR pAddress, BOOL bCountOn, DWORD dwCount, PUINT_PTR pNextAddress ) {
INIDRIVER IniDriver; INIENVIRONMENT IniEnvironment; INIPRINTER IniPrinter; INIPRINTPROC IniPrintProc; ININETPRINT IniNetPrint; INIMONITOR IniMonitor; INIPORT IniPort; WINIPORT WIniPort; INIFORM IniForm; INIJOB IniJob; INISPOOLER IniSpooler; SPOOL Spool; WSPOOL WSpool; SHADOWFILE ShadowFile; SHADOWFILE_2 ShadowFile2; DWORD Signature; UINT_PTR NextAddress; PRINTHANDLE PrintHandle; INIVERSION IniVersion; WCACHEINIPRINTEREXTRA WCacheIniPrinterExtra; BOOL bRetval = TRUE; DWORD i;
if (!pAddress) { *pNextAddress = 0; return FALSE ; }
if (bCountOn && (dwCount == 0)) { *pNextAddress = (UINT_PTR)pAddress; return FALSE ; }
for (i=0; pAddress && (!bCountOn || i < dwCount); i++) { movestruct(pAddress,&Signature, DWORD);
(*Print)("\n%p ",pAddress);
switch (Signature) {
case ISP_SIGNATURE: // dump INISPOOLER
movestruct(pAddress, &IniSpooler, INISPOOLER); DbgDumpIniSpooler(hCurrentProcess, Print, (PINISPOOLER)&IniSpooler); NextAddress = (UINT_PTR)IniSpooler.pIniNextSpooler; break;
case IPP_SIGNATURE: // dump INIPRINTPROC structure
movestruct(pAddress, &IniPrintProc, INIPRINTPROC); DbgDumpIniPrintProc(hCurrentProcess, Print, (PINIPRINTPROC)&IniPrintProc); NextAddress = (UINT_PTR)IniPrintProc.pNext; break;
case ID_SIGNATURE: // dump INIDRIVER structure
movestruct(pAddress, &IniDriver, INIDRIVER); DbgDumpIniDriver(hCurrentProcess, Print, (PINIDRIVER)&IniDriver); NextAddress = (UINT_PTR)IniDriver.pNext; break;
case IE_SIGNATURE: // dump INIENVIRONMENT structure
movestruct(pAddress, &IniEnvironment, INIENVIRONMENT); DbgDumpIniEnvironment(hCurrentProcess, Print, (PINIENVIRONMENT)&IniEnvironment); NextAddress = (UINT_PTR)IniEnvironment.pNext; break;
case IV_SIGNATURE: // dump INIVERSION structure
movestruct(pAddress, &IniVersion, INIVERSION); DbgDumpIniVersion(hCurrentProcess, Print, (PINIVERSION)&IniVersion); NextAddress = (UINT_PTR)IniVersion.pNext; break;
case IP_SIGNATURE: movestruct(pAddress, &IniPrinter, INIPRINTER); DbgDumpIniPrinter(hCurrentProcess, Print, (PINIPRINTER)&IniPrinter); NextAddress = (UINT_PTR)IniPrinter.pNext; break;
case WCIP_SIGNATURE: movestruct(pAddress, &WCacheIniPrinterExtra, WCACHEINIPRINTEREXTRA); DbgDumpWCacheIniPrinter(hCurrentProcess, Print, (PWCACHEINIPRINTEREXTRA)&WCacheIniPrinterExtra); NextAddress = 0; break;
case IN_SIGNATURE: movestruct(pAddress, &IniNetPrint, ININETPRINT); DbgDumpIniNetPrint(hCurrentProcess, Print, (PININETPRINT)&IniNetPrint); NextAddress = (UINT_PTR)IniNetPrint.pNext; break;
case IMO_SIGNATURE: movestruct(pAddress, &IniMonitor, INIMONITOR); DbgDumpIniMonitor(hCurrentProcess, Print, (PINIMONITOR)&IniMonitor); NextAddress = (UINT_PTR)IniMonitor.pNext; break;
case IPO_SIGNATURE: movestruct(pAddress, &IniPort, INIPORT); DbgDumpIniPort(hCurrentProcess, Print, (PINIPORT)&IniPort); NextAddress = (UINT_PTR)IniPort.pNext; break;
case WIPO_SIGNATURE: movestruct(pAddress, &WIniPort, WINIPORT); DbgDumpWIniPort(hCurrentProcess, Print, (PWINIPORT)&WIniPort); NextAddress = (UINT_PTR)WIniPort.pNext; break;
case IFO_SIGNATURE: movestruct(pAddress, &IniForm, INIFORM); DbgDumpIniForm(hCurrentProcess, Print, (PINIFORM)&IniForm); NextAddress = (UINT_PTR)IniForm.pNext; break;
case IJ_SIGNATURE: movestruct(pAddress, &IniJob, INIJOB); DbgDumpIniJob(hCurrentProcess, Print, (PINIJOB)&IniJob); NextAddress = (UINT_PTR)IniJob.pIniNextJob; break;
case SJ_SIGNATURE: movestruct(pAddress, &Spool, SPOOL); DbgDumpSpool(hCurrentProcess, Print, (PSPOOL)&Spool); NextAddress = (UINT_PTR)Spool.pNext; break;
case WSJ_SIGNATURE: movestruct(pAddress, &WSpool, WSPOOL); DbgDumpWSpool(hCurrentProcess, Print, (PWSPOOL)&WSpool); NextAddress = (UINT_PTR)WSpool.pNext; break;
case PRINTHANDLE_SIGNATURE: movestruct(pAddress, &PrintHandle, PRINTHANDLE); DbgDumpPrintHandle(hCurrentProcess, Print, (PPRINTHANDLE)&PrintHandle); NextAddress = 0x00000000; break;
case SF_SIGNATURE: movestruct(pAddress, &ShadowFile, SHADOWFILE); DbgDumpShadowFile(hCurrentProcess, Print, (PSHADOWFILE)&ShadowFile); NextAddress = 0x00000000; break;
case SF_SIGNATURE_2: movestruct(pAddress, &ShadowFile2, SHADOWFILE_2); DbgDumpShadowFile2(hCurrentProcess, Print, (PSHADOWFILE_2)&ShadowFile2); NextAddress = 0x00000000; break;
default: // Unknown signature -- no data to dump
(*Print)("Warning: Unknown Signature\n"); NextAddress = 0x00000000; bRetval = FALSE; break; }
pAddress = NextAddress; *pNextAddress = NextAddress; }
return bRetval ; }
BOOL DumpDevMode( HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, UINT_PTR lpAddress ) { DEVMODEW DevMode; DWORD i;
Print("DevMode\n");
if (!lpAddress) { Print("\n Null DEVMODE Structure lpDevMode = NULL\n"); return TRUE ; } movestruct(lpAddress, &DevMode, DEVMODEW);
Print("TCHAR dmDeviceName[32] %ws\n", DevMode.dmDeviceName); Print("WORD dmSpecVersion %d\n", DevMode.dmSpecVersion); Print("WORD dmDriverVersion %d\n", DevMode.dmDriverVersion); Print("WORD dmSize %d\n", DevMode.dmSize); Print("WORD dmDriverExtra %d\n", DevMode.dmDriverExtra); Print("DWORD dmFields %d\n", DevMode.dmFields);
for (i = 0; i < MAX_DEVMODE_FIELDS; i++ ) { if (DevMode.dmFields & DevModeFieldsTable[i].dmField) { Print("\t %s is ON\n", DevModeFieldsTable[i].String); } else { Print("\t %s is OFF\n", DevModeFieldsTable[i].String); } }
Print("short dmOrientation %d\n", DevMode.dmOrientation); Print("short dmPaperSize %d\n", DevMode.dmPaperSize);
if ((DevMode.dmPaperSize >= 1) && (DevMode.dmPaperSize <= MAX_DEVMODE_PAPERSIZES)) { Print("Paper size from dmPaperSize is %s\n", DevModePaperSizes[DevMode.dmPaperSize - 1]); } else { Print("Paper size from dmPaperSize is out of bounds!!\n"); }
Print("short dmPaperLength %d\n", DevMode.dmPaperLength); Print("short dmPaperWidth %d\n", DevMode.dmPaperWidth);
Print("short dmScale %d\n", DevMode.dmScale); Print("short dmCopies %d\n", DevMode.dmCopies); Print("short dmDefaultSource %d\n", DevMode.dmDefaultSource); Print("short dmPrintQuality %d\n", DevMode.dmPrintQuality); Print("short dmColor %d\n", DevMode.dmColor); Print("short dmDuplex %d\n", DevMode.dmDuplex); Print("short dmYResolution %d\n", DevMode.dmYResolution); Print("short dmTTOption %d\n", DevMode.dmTTOption); Print("short dmCollate %d\n", DevMode.dmCollate); Print("TCHAR dmFormName[32] %ws\n", DevMode.dmFormName); Print("DWORD dmLogPixels %d\n", DevMode.dmLogPixels); Print("USHORT dmBitsPerPel %d\n", DevMode.dmBitsPerPel); Print("DWORD dmPelsWidth %d\n", DevMode.dmPelsWidth); Print("DWORD dmPelsHeight %d\n", DevMode.dmPelsHeight); Print("DWORD dmDisplayFlags %d\n", DevMode.dmDisplayFlags); Print("DWORD dmDisplayFrequency %d\n", DevMode.dmDisplayFrequency);
return TRUE; }
BOOL DbgDumpPI2( HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, UINT_PTR lpAddress, DWORD dwCount ) { PRINTER_INFO_2 pi2; WCHAR Buffer[MAX_PATH+1]; PPRINTER_INFO_2 pPrinterInfo;
for ( pPrinterInfo = (PPRINTER_INFO_2)lpAddress; pPrinterInfo != NULL && dwCount != 0; pPrinterInfo++, dwCount-- ) {
movestruct( pPrinterInfo, &pi2, PRINTER_INFO_2);
(*Print)("\nAddress %x\n", pPrinterInfo );
movestr(pi2.pServerName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pServerName %ws\n", Buffer);
movestr(pi2.pPrinterName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pPrinterName %ws\n", Buffer);
movestr(pi2.pShareName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pShareName %ws\n", Buffer);
movestr(pi2.pPortName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pPortName %ws\n", Buffer);
movestr(pi2.pDriverName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pDriverName %ws\n", Buffer);
movestr(pi2.pComment, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pComment %ws\n", Buffer);
movestr(pi2.pLocation, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pLocation %ws\n", Buffer);
(*Print)("LPDEVMODE pDevMode %p\n", pi2.pDevMode);
movestr(pi2.pSepFile, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pSepFile %ws\n", Buffer);
movestr(pi2.pPrintProcessor, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pPrintProcessor %ws\n", Buffer);
movestr(pi2.pDatatype, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pDatatype %ws\n", Buffer);
movestr(pi2.pParameters, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pParameters %ws\n", Buffer);
(*Print)("PSECURITY_DESCRIPTOR pSecurityDescriptor %p\n", pi2.pSecurityDescriptor);
(*Print)("DWORD Attributes 0x%.8x\n",pi2.Attributes); ExtractPrinterAttributes( Print, pi2.Attributes);
(*Print)("DWORD Priority %d\n", pi2.Priority); (*Print)("DWORD DefaultPriority %d\n", pi2.DefaultPriority); (*Print)("DWORD StartTime %d\n", pi2.StartTime); (*Print)("DWORD UntilTime %d\n", pi2.UntilTime);
(*Print)("DWORD Status 0x%.8x\n", pi2.Status); ExtractExternalPrinterStatus( Print, pi2.Status );
(*Print)("DWORD cJobs %d\n", pi2.cJobs); (*Print)("DWORD AveragePPM %d\n", pi2.AveragePPM);
}
return TRUE; }
BOOL DbgDumpPI0( HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, UINT_PTR lpAddress, DWORD dwCount ) { PRINTER_INFO_STRESS pi0; WCHAR Buffer[MAX_PATH+1]; PPRINTER_INFO_STRESS pPrinterInfo;
for ( pPrinterInfo = (PPRINTER_INFO_STRESS)lpAddress; pPrinterInfo != NULL && dwCount != 0; pPrinterInfo++, dwCount-- ) {
movestruct( pPrinterInfo, &pi0, PRINTER_INFO_STRESS);
(*Print)("\nAddress %x\n", pPrinterInfo );
movestr(pi0.pPrinterName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pPrinterName %ws\n", Buffer);
movestr(pi0.pServerName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pServerName %ws\n", Buffer);
(*Print)("DWORD cJobs %d\n", pi0.cJobs);
(*Print)("DWORD cTotalJobs %d\n", pi0.cTotalJobs);
(*Print)("DWORD cTotalBytes (LOWER DWORD) %d\n", pi0.cTotalBytes);
(*Print)("SYSTEMTIME stUpTime %d/%d/%d %d %d:%d:%d.%d\n",pi0.stUpTime.wYear, pi0.stUpTime.wMonth, pi0.stUpTime.wDay, pi0.stUpTime.wDayOfWeek, pi0.stUpTime.wHour, pi0.stUpTime.wMinute, pi0.stUpTime.wSecond, pi0.stUpTime.wMilliseconds);
(*Print)("DWORD MaxcRef %d\n", pi0.MaxcRef);
(*Print)("DWORD cTotalPagesPrinted %d\n", pi0.cTotalPagesPrinted);
(*Print)("DWORD dwGetVersion %d\n", pi0.dwGetVersion);
(*Print)("DWORD fFreeBuild %d\n", pi0.fFreeBuild);
(*Print)("DWORD cSpooling %d\n", pi0.cSpooling);
(*Print)("DWORD cMaxSpooling %d\n", pi0.cMaxSpooling);
(*Print)("DWORD cRef %d\n", pi0.cRef);
(*Print)("DWORD cErrorOutOfPaper %d\n", pi0.cErrorOutOfPaper);
(*Print)("DWORD cErrorNotReady %d\n", pi0.cErrorNotReady);
(*Print)("DWORD cJobError %d\n", pi0.cJobError);
(*Print)("DWORD dwNumberOfProcessors %d\n", pi0.dwNumberOfProcessors);
(*Print)("DWORD dwProcessorType %d\n", pi0.dwProcessorType);
(*Print)("DWORD dwHighPartTotalBytes %d\n", pi0.dwHighPartTotalBytes);
(*Print)("DWORD cChangeID %d\n", pi0.cChangeID);
(*Print)("DWORD dwLastError %d\n", pi0.dwLastError);
(*Print)("DWORD Status 0x%.8x\n", pi0.Status); ExtractExternalPrinterStatus( Print, pi0.Status );
(*Print)("DWORD cEnumerateNetworkPrinters %d\n", pi0.cEnumerateNetworkPrinters);
(*Print)("DWORD cAddNetPrinters %d\n", pi0.cAddNetPrinters);
(*Print)("WORD wProcessorArchitecture %d\n", pi0.wProcessorArchitecture);
(*Print)("WORD wProcessorLevel %d\n", pi0.wProcessorLevel); }
return TRUE; }
BOOL DbgDumpFI1( HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, UINT_PTR lpAddress, DWORD dwCount ) { FORM_INFO_1 fi1; WCHAR Buffer[MAX_PATH+1]; PFORM_INFO_1 pFORMInfo;
for ( pFORMInfo = (PFORM_INFO_1)lpAddress; pFORMInfo != NULL && dwCount != 0; pFORMInfo++, dwCount-- ) {
movestruct( pFORMInfo, &fi1, FORM_INFO_1);
(*Print)("\nAddress %p\n", pFORMInfo );
(*Print)("DWORD Flags %x", fi1.Flags);
if ( fi1.Flags & FORM_BUILTIN ) (*Print)(" FORM_BUILTIN\n"); else (*Print)(" FORM_USERDEFINED\n");
movestr(fi1.pName, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR pName %ws\n", Buffer);
(*Print)("SIZEL Size cx %d cy %d\n", fi1.Size.cx, fi1.Size.cy); (*Print)("RECTL ImageableArea left %d right %d top %d bottom %d\n", fi1.ImageableArea.left, fi1.ImageableArea.right, fi1.ImageableArea.top, fi1.ImageableArea.bottom);
}
return TRUE; }
BOOL DbgDumpPDEF( HANDLE hCurrentProcess, PNTSD_OUTPUT_ROUTINE Print, UINT_PTR lpAddress, DWORD dwCount ) { PRINTER_DEFAULTS PDef; WCHAR Buffer[MAX_PATH+1]; PPRINTER_DEFAULTS pPDef;
pPDef = ( PPRINTER_DEFAULTS )lpAddress;
movestruct( pPDef, &PDef, PRINTER_DEFAULTS);
(*Print)("\nAddress %x\n", pPDef );
Buffer[0] = L'\0'; movestr(PDef.pDatatype, Buffer, sizeof(WCHAR)*MAX_PATH); (*Print)("LPWSTR PrinterDefaults.pDatatype %p %ws\n", PDef.pDatatype, Buffer); (*Print)("LPDEVMODE PrinterDefaults.pDevMode %p\n", PDef.pDevMode); (*Print)("ACCESS_MASK PrinterDefaults.DesiredAccess %p\n", PDef.DesiredAccess); ExtractPrinterAccess( Print, PDef.DesiredAccess );
return TRUE; }
|