Leaked source code of windows server 2003
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.
 
 
 
 
 
 

165 lines
3.2 KiB

/*++
Copyright (C) Microsoft Corporation, 1992 - 1999
Module Name:
util.c
Abstract:
Utility library used for the various debugger extensions in this library.
Author:
Peter Wieland (peterwie) 16-Oct-1995
Environment:
User Mode.
Revision History:
--*/
#include "pch.h"
PUCHAR devicePowerStateNames[] = {
"PowerDeviceUnspecified",
"PowerDeviceD0",
"PowerDeviceD1",
"PowerDeviceD2",
"PowerDeviceD3",
"PowerDeviceMaximum",
"Invalid"
};
FLAG_NAME SrbFlagsMap[] = {
FLAG_NAME(SRB_FLAGS_QUEUE_ACTION_ENABLE),
FLAG_NAME(SRB_FLAGS_DISABLE_DISCONNECT),
FLAG_NAME(SRB_FLAGS_DISABLE_SYNCH_TRANSFER),
FLAG_NAME(SRB_FLAGS_BYPASS_FROZEN_QUEUE),
FLAG_NAME(SRB_FLAGS_DISABLE_AUTOSENSE),
FLAG_NAME(SRB_FLAGS_DATA_IN),
FLAG_NAME(SRB_FLAGS_DATA_OUT),
FLAG_NAME(SRB_FLAGS_NO_QUEUE_FREEZE),
FLAG_NAME(SRB_FLAGS_ADAPTER_CACHE_ENABLE),
FLAG_NAME(SRB_FLAGS_IS_ACTIVE),
FLAG_NAME(SRB_FLAGS_ALLOCATED_FROM_ZONE),
FLAG_NAME(SRB_FLAGS_SGLIST_FROM_POOL),
FLAG_NAME(SRB_FLAGS_BYPASS_LOCKED_QUEUE),
FLAG_NAME(SRB_FLAGS_NO_KEEP_AWAKE),
FLAG_NAME(SRB_FLAGS_PORT_DRIVER_ALLOCSENSE),
FLAG_NAME(SRB_FLAGS_PORT_DRIVER_SENSEHASPORT),
FLAG_NAME(SRB_FLAGS_DONT_START_NEXT_PACKET),
FLAG_NAME(SRB_FLAGS_PORT_DRIVER_RESERVED),
FLAG_NAME(SRB_FLAGS_CLASS_DRIVER_RESERVED),
{0,0}
};
PUCHAR
DevicePowerStateToString(
IN DEVICE_POWER_STATE State
)
{
if(State > PowerDeviceMaximum) {
return "Invalid";
} else {
return devicePowerStateNames[(UCHAR) State];
}
}
VOID
xdprintf(
ULONG Depth,
PCCHAR S,
...
)
{
va_list ap;
ULONG i;
CCHAR DebugBuffer[256] = {0};
for (i=0; i<Depth; i++) {
dprintf (" ");
}
va_start(ap, S);
_vsnprintf(DebugBuffer, sizeof(DebugBuffer)-1, S, ap);
dprintf (DebugBuffer);
va_end(ap);
}
VOID
DumpFlags(
ULONG Depth,
PUCHAR Name,
ULONG Flags,
PFLAG_NAME FlagTable
)
{
ULONG i;
ULONG mask = 0;
ULONG count = 0;
UCHAR prolog[64] = {0};
_snprintf(prolog, sizeof(prolog)-1, "%s (0x%08x): ", Name, Flags);
xdprintfEx(Depth, ("%s", prolog));
if(Flags == 0) {
dprintf("\n");
return;
}
memset(prolog, ' ', strlen(prolog));
for(i = 0; FlagTable[i].Name != 0; i++) {
PFLAG_NAME flag = &(FlagTable[i]);
mask |= flag->Flag;
if((Flags & flag->Flag) == flag->Flag) {
//
// print trailing comma
//
if(count != 0) {
dprintf(", ");
//
// Only print two flags per line.
//
if((count % 2) == 0) {
dprintf("\n");
xdprintfEx(Depth, ("%s", prolog));
}
}
dprintf("%s", flag->Name);
count++;
}
}
dprintf("\n");
if((Flags & (~mask)) != 0) {
xdprintfEx(Depth, ("%sUnknown flags %#010lx\n", prolog, (Flags & (~mask))));
}
return;
}