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.
 
 
 
 
 
 

245 lines
6.3 KiB

/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
common.h
Abstract:
Private header file for sputils
Author:
Jamie Hunter (JamieHun) Jun-27-2000
Revision History:
--*/
//
// internally we may use some definitions from these files
//
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <windows.h>
#include <windowsx.h>
#include <stddef.h>
#include <regstr.h>
#include <tchar.h>
#include <malloc.h> // for _resetstkoflw
#include <setupapi.h>
#include <spapip.h>
#include "strtab.h"
#include "locking.h"
//
// if a function is private to this library, we don't want to collide with functions
// in other libraries etc
// since C doesn't have namespaces, either make "static" or prefix _pSpUtils
//
#ifndef ASSERTS_ON
#if DBG
#define ASSERTS_ON 1
#else
#define ASSERTS_ON 0
#endif
#endif
#if DBG
#ifndef MEM_DBG
#define MEM_DBG 1
#endif
#else
#ifndef MEM_DBG
#define MEM_DBG 0
#endif
#endif
VOID
_pSpUtilsAssertFail(
IN PCSTR FileName,
IN UINT LineNumber,
IN PCSTR Condition
);
#if ASSERTS_ON
#define MYASSERT(x) if(!(x)) { _pSpUtilsAssertFail(__FILE__,__LINE__,#x); }
#define MYVERIFY(x) ((x)? TRUE : _pSpUtilsAssertFail(__FILE__,__LINE__,#x), FALSE)
#else
#define MYASSERT(x)
#define MYVERIFY(x) ((x)? TRUE : FALSE)
#endif
#define ARRAYSIZE(x) (sizeof((x))/sizeof((x)[0]))
#define SIZECHARS(x) ARRAYSIZE(x)
#define CSTRLEN(x) (SIZECHARS(x)-1)
DWORD
__inline
_pSpUtilsGetLastError(
#if ASSERTS_ON
IN PCSTR Filename,
IN DWORD Line
#else
VOID
#endif
)
/*++
Routine Description:
This inline routine retrieves a Win32 error, and guarantees that the error
isn't NO_ERROR. This routine should not be called unless the preceding
call failed, and GetLastError() is supposed to contain the problem's cause.
Arguments:
If asserts are turned on, this function takes the (ANSI) Filename of the
source file that called the failing function, and also the DWORD Line
number where the call was made. This makes it much easier to debug
scenarios where the failing function didn't set last error when it was
supposed to.
Return Value:
Win32 error code retrieved via GetLastError(), or ERROR_UNIDENTIFIED_ERROR
if GetLastError() returned NO_ERROR.
--*/
{
DWORD Err = GetLastError();
#if ASSERTS_ON
if(Err == NO_ERROR) {
_pSpUtilsAssertFail(Filename,
Line,
"GetLastError() != NO_ERROR"
);
}
#endif
return ((Err == NO_ERROR) ? ERROR_UNIDENTIFIED_ERROR : Err);
}
//
// Macro to simplify calling of a function that reports error status via
// GetLastError(). This macro allows the caller to specify what Win32 error
// code should be returned if the function reports success. (If the default of
// NO_ERROR is desired, use the GLE_FN_CALL macro instead.)
//
// The "prototype" of this macro is as follows:
//
// DWORD
// GLE_FN_CALL_WITH_SUCCESS(
// SuccessfulStatus, // Win32 error code to return if function succeeded
// FailureIndicator, // value returned by function to indicate failure (e.g., FALSE, NULL, INVALID_HANDLE_VALUE)
// FunctionCall // actual call to the function
// );
//
#if ASSERTS_ON
#define GLE_FN_CALL_WITH_SUCCESS(SuccessfulStatus, \
FailureIndicator, \
FunctionCall) \
\
(SetLastError(NO_ERROR), \
(((FunctionCall) != (FailureIndicator)) \
? (SuccessfulStatus) \
: _pSpUtilsGetLastError(__FILE__, __LINE__)))
#else
#define GLE_FN_CALL_WITH_SUCCESS(SuccessfulStatus, \
FailureIndicator, \
FunctionCall) \
\
(SetLastError(NO_ERROR), \
(((FunctionCall) != (FailureIndicator)) \
? (SuccessfulStatus) \
: _pSpUtilsGetLastError()))
#endif
//
// Macro to simplify calling of a function that reports error status via
// GetLastError(). If the function call is successful, NO_ERROR is returned.
// (To specify an alternate value returned upon success, use the
// GLE_FN_CALL_WITH_SUCCESS macro instead.)
//
// The "prototype" of this macro is as follows:
//
// DWORD
// GLE_FN_CALL(
// FailureIndicator, // value returned by function to indicate failure (e.g., FALSE, NULL, INVALID_HANDLE_VALUE)
// FunctionCall // actual call to the function
// );
//
#define GLE_FN_CALL(FailureIndicator, FunctionCall) \
GLE_FN_CALL_WITH_SUCCESS(NO_ERROR, FailureIndicator, FunctionCall)
VOID
_pSpUtilsExceptionHandler(
IN DWORD ExceptionCode,
IN DWORD AccessViolationError,
OUT PDWORD Win32ErrorCode OPTIONAL
);
LONG
_pSpUtilsExceptionFilter(
DWORD ExceptionCode
);
BOOL
_pSpUtilsMemoryInitialize(
VOID
);
BOOL
_pSpUtilsMemoryUninitialize(
VOID
);
VOID
_pSpUtilsDebugPrintEx(
DWORD Level,
PCTSTR format,
... OPTIONAL
);
//
// internally turn on the extra memory debug code if requested
//
#if MEM_DBG
#undef pSetupCheckedMalloc
#undef pSetupCheckInternalHeap
#undef pSetupMallocWithTag
#define pSetupCheckedMalloc(Size) pSetupDebugMalloc(Size,__FILE__,__LINE__)
#define pSetupCheckInternalHeap() pSetupHeapCheck()
#define pSetupMallocWithTag(Size,Tag) pSetupDebugMallocWithTag(Size,__FILE__,__LINE__,Tag)
#endif
//
// internal tags
//
#ifdef UNICODE
#define MEMTAG_STATICSTRINGTABLE (0x5353484a) // JHSS
#define MEMTAG_STRINGTABLE (0x5453484a) // JHST
#define MEMTAG_STRINGDATA (0x4453484a) // JHSD
#else
#define MEMTAG_STATICSTRINGTABLE (0x7373686a) // jhss
#define MEMTAG_STRINGTABLE (0x7473686a) // jhst
#define MEMTAG_STRINGDATA (0x6473686a) // jhsd
#endif