Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

193 lines
3.7 KiB

/*++
Copyright (c) 1991-1992 Microsoft Corporation
Module Name:
Debug.c
Abstract:
This file contains routines to insulate more networking code from
the actual NT debug routines.
Author:
John Rogers (JohnRo) 16-Apr-1991
Environment:
Interface is portable to any flat, 32-bit environment. (Uses Win32
typedefs.) Requires ANSI C extensions: slash-slash comments, long
external names. Code itself only runs under NT.
Revision History:
16-Apr-1991 JohnRo
Created. (Borrowed some code from LarryO's NetapipPrintf.)
19-May-1991 JohnRo
Make LINT-suggested changes.
20-Aug-1991 JohnRo
Another change suggested by PC-LINT.
17-Sep-1991 JohnRo
Correct UNICODE use.
10-May-1992 JohnRo
Correct a NetpDbgPrint bug when printing percent signs.
--*/
// These must be included first:
#include <nt.h> // IN, LPVOID, etc.
// These may be included in any order:
#include <netdebug.h> // My prototypes.
#include <ntrtl.h> // RtlAssert().
#include <stdarg.h> // va_list, etc.
#include <stdio.h> // vsprintf().
//
// These routines are exported from netapi32.dll. We want them to still
// be there in the free build, so checked binaries will run on a free
// build. The following undef's are to get rid of the macros that cause
// these to not be called in free builds.
//
#if !DBG
#undef NetpAssertFailed
#undef NetpHexDump
#endif
VOID
NetpAssertFailed(
IN LPDEBUG_STRING FailedAssertion,
IN LPDEBUG_STRING FileName,
IN DWORD LineNumber,
IN LPDEBUG_STRING Message OPTIONAL
)
{
#if DBG
RtlAssert(
FailedAssertion,
FileName,
(ULONG) LineNumber,
(PCHAR) Message);
#endif
/* NOTREACHED */
} // NetpAssertFailed
#define MAX_PRINTF_LEN 1024 // Arbitrary.
VOID
NetpDbgPrint(
IN LPDEBUG_STRING Format,
...
)
{
va_list arglist;
char OutputBuffer[MAX_PRINTF_LEN];
ULONG length;
va_start(arglist, Format);
length = (ULONG) vsprintf(OutputBuffer, Format, arglist);
va_end(arglist);
// Output buffer may contain percent signs (like "%SystemRoot%"), so
// print it without parsing it.
(void) DbgPrint( "%s", (PCH) OutputBuffer);
NetpAssert(length <= MAX_PRINTF_LEN);
} // NetpDbgPrint
VOID
NetpHexDump(
LPBYTE Buffer,
DWORD BufferSize
)
/*++
Routine Description:
This function dumps the contents of the buffer to the debug screen.
Arguments:
Buffer - Supplies a pointer to the buffer that contains data to be dumped.
BufferSize - Supplies the size of the buffer in number of bytes.
Return Value:
None.
--*/
{
#define NUM_CHARS 16
DWORD i, limit;
TCHAR TextBuffer[NUM_CHARS + 1];
//
// Hex dump of the bytes
//
limit = ((BufferSize - 1) / NUM_CHARS + 1) * NUM_CHARS;
for (i = 0; i < limit; i++) {
if (i < BufferSize) {
(VOID) DbgPrint("%02x ", Buffer[i]);
if (Buffer[i] == TEXT('\r') ||
Buffer[i] == TEXT('\n')) {
TextBuffer[i % NUM_CHARS] = '.';
}
else if (Buffer[i] == '\0') {
TextBuffer[i % NUM_CHARS] = ' ';
}
else {
TextBuffer[i % NUM_CHARS] = (TCHAR) Buffer[i];
}
}
else {
(VOID) DbgPrint(" ");
TextBuffer[i % NUM_CHARS] = ' ';
}
if ((i + 1) % NUM_CHARS == 0) {
TextBuffer[NUM_CHARS] = 0;
(VOID) DbgPrint(" %s \n", TextBuffer);
}
}
(VOID) DbgPrint("\n");
}
#if DBG
VOID
NetpBreakPoint(
VOID
)
{
DbgBreakPoint();
} // NetpBreakPoint
#endif