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.
 
 
 
 
 
 

341 lines
10 KiB

/*==========================================================================
*
* Copyright (C) 1999-2002 Microsoft Corporation. All Rights Reserved.
*
* File: OSInd.h
* Content: OS indirection functions to abstract OS specific items.
*
* History:
* Date By Reason
* ==== == ======
* 07/12/1999 jtk Created
* 10/16/2001 vanceo Added AssertNoCriticalSectionsTakenByThisThread capability
*
***************************************************************************/
#ifndef __OSIND_H__
#define __OSIND_H__
#include "CallStack.h"
#include "ClassBilink.h"
#include "HandleTracking.h"
#include "CritsecTracking.h"
#include "MemoryTracking.h"
//**********************************************************************
// Constant definitions
//**********************************************************************
#define GUID_STRING_LEN 39
//**********************************************************************
// Macro definitions
//**********************************************************************
#ifndef OFFSETOF
#define OFFSETOF(s,m) ( ( INT_PTR ) ( ( PVOID ) &( ( (s*) 0 )->m ) ) )
#endif // OFFSETOF
#ifndef LENGTHOF
#define LENGTHOF( arg ) ( sizeof( arg ) / sizeof( arg[ 0 ] ) )
#endif // OFFSETOF
#ifndef _MIN
#define _MIN(a, b) ((a) < (b) ? (a) : (b))
#endif // _MIN
#ifndef _MAX
#define _MAX(a, b) ((a) > (b) ? (a) : (b))
#endif // _MAX
//**********************************************************************
// Structure definitions
//**********************************************************************
//**********************************************************************
// Variable definitions
//**********************************************************************
//**********************************************************************
// Function prototypes
//**********************************************************************
//
// initialization functions
//
BOOL DNOSIndirectionInit( DWORD_PTR dwpMaxMemUsage );
void DNOSIndirectionDeinit( void );
#ifndef DPNBUILD_NOPARAMVAL
extern BOOL IsValidStringA( const CHAR * const swzString );
#define DNVALID_STRING_A(a) IsValidStringA(a)
extern BOOL IsValidStringW( const WCHAR * const szString );
#define DNVALID_STRING_W(a) IsValidStringW(a)
#define DNVALID_WRITEPTR(a,b) (!IsBadWritePtr(a,b))
#define DNVALID_READPTR(a,b) (!IsBadReadPtr(a,b))
#endif // ! DPNBUILD_NOPARAMVAL
//
// Function to get OS version. Supported returns:
// VER_PLATFORM_WIN32_WINDOWS - Win9x
// VER_PLATFORM_WIN32_NT - WinNT
// VER_PLATFORM_WIN32s - Win32s on Win3.1
// VER_PLATFORM_WIN32_CE - WinCE
//
#if ((! defined(WINCE)) && (! defined(_XBOX)))
UINT_PTR DNGetOSType( void );
#endif // ! WINCE and ! _XBOX
struct in_addr;
typedef struct in_addr IN_ADDR;
void DNinet_ntow( IN_ADDR sin, WCHAR* pwsz );
#ifdef WINNT
BOOL DNOSIsXPOrGreater( void );
#endif // WINNT
#ifndef DPNBUILD_NOSERIALSP
// Used only by serial provider
HINSTANCE DNGetApplicationInstance( void );
#endif // ! DPNBUILD_NOSERIALSP
#ifdef WINNT
PSECURITY_ATTRIBUTES DNGetNullDacl();
#else
#define DNGetNullDacl() 0
#endif // WINNT
#ifndef VER_PLATFORM_WIN32_CE
#define VER_PLATFORM_WIN32_CE 3
#endif // VER_PLATFORM_WIN32_CE
#if ((defined(WINCE)) || (defined(_XBOX)))
#define IsUnicodePlatform TRUE
#else // ! WINCE and ! _XBOX
#define IsUnicodePlatform (DNGetOSType() == VER_PLATFORM_WIN32_NT || DNGetOSType() == VER_PLATFORM_WIN32_CE)
#endif // ! WINCE and ! _XBOX
#ifdef WINCE
#define GETTIMESTAMP() GetTickCount()
#else
#define GETTIMESTAMP() timeGetTime()
#endif // WINCE
DWORD DNGetRandomNumber();
//
// Interlocked functions (not actually interlocked when DPNBUILD_ONLYONETHREAD)
//
#ifdef DPNBUILD_ONLYONETHREAD
inline LONG DNInterlockedIncrement( IN OUT LONG volatile *Addend )
{
return ++(*Addend);
}
inline LONG DNInterlockedDecrement( IN OUT LONG volatile *Addend )
{
return --(*Addend);
}
inline LONG DNInterlockedExchange( IN OUT LONG volatile *Target, IN LONG Value )
{
LONG Previous;
Previous = *Target;
*Target = Value;
return Previous;
}
inline LONG DNInterlockedExchangeAdd( IN OUT LONG volatile *Addend, IN LONG Value )
{
LONG Previous;
Previous = *Addend;
*Addend = Previous + Value;
return Previous;
}
inline LONG DNInterlockedCompareExchange( IN OUT LONG volatile *Destination, IN LONG Exchange, IN LONG Comperand )
{
LONG Previous;
Previous = *Destination;
if (Previous == Comperand)
{
*Destination = Exchange;
}
return Previous;
}
inline PVOID DNInterlockedCompareExchangePointer( IN OUT PVOID volatile *Destination, IN PVOID Exchange, IN PVOID Comperand )
{
PVOID Previous;
Previous = *Destination;
if (Previous == Comperand)
{
*Destination = Exchange;
}
return Previous;
}
inline PVOID DNInterlockedExchangePointer( IN OUT PVOID volatile *Target, IN PVOID Value )
{
PVOID Previous;
Previous = *Target;
*Target = Value;
return Previous;
}
#else // ! DPNBUILD_ONLYONETHREAD
/*
#ifdef WINCE
#if defined(_ARM_)
#define InterlockedExchangeAdd \
((long (*)(long *target, long increment))(PUserKData+0x3C0))
#elif defined(_X86_)
LONG WINAPI InterlockedExchangeAdd( LPLONG Addend, LONG Increment );
#else
#error("Unknown platform")
#endif // Platform
#endif // WINCE
*/
#define DNInterlockedIncrement( Addend ) InterlockedIncrement( Addend )
#define DNInterlockedDecrement( Addend ) InterlockedDecrement( Addend )
#define DNInterlockedExchange( Target, Value ) InterlockedExchange( Target, Value )
#define DNInterlockedExchangeAdd( Target, Value ) InterlockedExchangeAdd( Target, Value )
#ifdef WINCE
// NOTE: Params 2 and 3 reversed intentionally, CE is that way
#define DNInterlockedCompareExchange( Destination, Exchange, Comperand ) InterlockedTestExchange( Destination, Comperand, Exchange )
#else // !WINCE
#define DNInterlockedCompareExchange( Destination, Exchange, Comperand ) InterlockedCompareExchange( Destination, Exchange, Comperand )
#endif // WINCE
#define DNInterlockedCompareExchangePointer( Destination, Exchange, Comperand ) InterlockedCompareExchangePointer( Destination, Exchange, Comperand )
#define DNInterlockedExchangePointer( Target, Value ) InterlockedExchangePointer( Target, Value )
#endif // ! DPNBUILD_ONLYONETHREAD
// Special initialize to set spin count, avoid out-of-memory exceptions at Enter/Leave
BOOL DNOSInitializeCriticalSection( CRITICAL_SECTION* pCriticalSection );
#ifdef WINNT
#define GLOBALIZE_STR _T("Global\\")
#else
#define GLOBALIZE_STR _T("")
#endif // WINNT
#if defined(WINCE) && !defined(WINCE_ON_DESKTOP)
#define _TWINCE(x) __T(x)
#else
#define _TWINCE(x) x
#endif // WINCE
//
// Memory functions
//
#ifdef DPNBUILD_LIBINTERFACE
#define new __wont_compile_dont_use_new_operator__
#define delete __wont_compile_dont_use_delete_operator__
#else // ! DPNBUILD_LIBINTERFACE
//**********************************************************************
// ------------------------------
// operator new - allocate memory for a C++ class
//
// Entry: Size of memory to allocate
//
// Exit: Pointer to memory
// NULL = no memory available
//
// Notes: This function is for classes only and will ASSERT on zero sized
// allocations! This function also doesn't do the whole proper class
// thing of checking for replacement 'new handlers' and will not throw
// an exception if allocation fails.
// ------------------------------
inline void* __cdecl operator new( size_t size )
{
return DNMalloc( size );
}
//**********************************************************************
//**********************************************************************
// ------------------------------
// operator delete - deallocate memory for a C++ class
//
// Entry: Pointer to memory
//
// Exit: Nothing
//
// Notes: This function is for classes only and will ASSERT on NULL frees!
// ------------------------------
inline void __cdecl operator delete( void *pData )
{
//
// Voice and lobby currently try allocating 0 byte buffers, can't disable this check yet.
//
if( pData == NULL )
return;
DNFree( pData );
}
//**********************************************************************
#endif // ! DPNBUILD_LIBINTERFACE
#ifdef WINCE
#ifdef DBG
UINT DNGetProfileInt(LPCTSTR lpszSection, LPCTSTR lpszEntry, int nDefault);
#endif // DBG
#ifndef WINCE_ON_DESKTOP
HANDLE WINAPI OpenEvent(IN DWORD dwDesiredAccess, IN BOOL bInheritHandle, IN LPCWSTR lpName);
HANDLE WINAPI OpenFileMapping(IN DWORD dwDesiredAccess, IN BOOL bInheritHandle, IN LPCWSTR lpName);
HANDLE WINAPI OpenMutex(IN DWORD dwDesiredAccess, IN BOOL bInheritHandle, IN LPCWSTR lpName);
#endif // !WINCE_ON_DESKTOP
#define WaitForSingleObjectEx(handle, time, fAlertable) WaitForSingleObject(handle, time)
#define WaitForMultipleObjectsEx(count, handles, waitall, time, fAlertable) WaitForMultipleObjects(count, handles, waitall, time)
#ifndef WINCE_ON_DESKTOP
#define GetWindowLongPtr(a, b) GetWindowLong(a, b)
#define GWLP_USERDATA GWL_USERDATA
#define SetWindowLongPtr(a, b, c) SetWindowLong(a, b, c)
#endif // WINCE_ON_DESKTOP
#define SleepEx(a, b) Sleep(a)
#ifndef MUTEX_ALL_ACCESS
#define MUTEX_ALL_ACCESS 0
#endif // MUTEX_ALL_ACCESS
#ifndef NORMAL_PRIORITY_CLASS
#define NORMAL_PRIORITY_CLASS 0
#endif // NORMAL_PRIORITY_CLASS
#else // ! WINCE
#ifdef DBG
#if ((defined(_XBOX)) && (! defined(XBOX_ON_DESKTOP)))
UINT DNGetProfileInt(LPCTSTR lpszSection, LPCTSTR lpszEntry, int nDefault);
#else // ! _XBOX or XBOX_ON_DESKTOP
#define DNGetProfileInt(lpszSection, lpszEntry, nDefault) GetProfileInt(lpszSection, lpszEntry, nDefault)
#endif// ! _XBOX or XBOX_ON_DESKTOP
#endif // DBG
#endif // ! WINCE
#if ((defined(WINCE)) || (defined(DPNBUILD_LIBINTERFACE)))
HRESULT DNCoCreateGuid(GUID* pguid);
#else // ! WINCE and ! DPNBUILD_LIBINTERFACE
#define DNCoCreateGuid CoCreateGuid
#endif // ! WINCE and ! DPNBUILD_LIBINTERFACE
#ifdef _XBOX
#define swprintf wsprintfW
#endif // _XBOX
#endif // __OSIND_H__