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.
 
 
 
 
 
 

409 lines
7.4 KiB

/*++
Copyright (c) 1994 Microsoft Corporation
Module Name:
util.h
Abstract:
Header for util.cxx
Author:
Richard L Firth (rfirth) 31-Oct-1994
Revision History:
31-Oct-1994 rfirth
Created
--*/
#if !defined(__UTIL_H__)
#define __UTIL_H__
#if defined(__cplusplus)
extern "C" {
#endif
//
// manifests
//
#define PLATFORM_TYPE_UNKNOWN ((DWORD)(-1))
#define PLATFORM_TYPE_WIN95 ((DWORD)(0))
#define PLATFORM_TYPE_WINNT ((DWORD)(1))
#define PLATFORM_TYPE_UNIX ((DWORD)(2))
#define PLATFORM_SUPPORTS_UNICODE 0x00000001
// max header allowed by wininet in the cache
#define MAX_HEADER_SUPPORTED 2048
#define MAX_USERNAME 128
#define DEFAULT_MAX_EXTENSION_LENGTH 8
//
// types
//
//
// TRI_STATE - for places where we need to differentiate between TRUE/FALSE and
// uninitialized
//
typedef enum {
TRI_STATE_UNKNOWN = -1,
TRI_STATE_FALSE = 0,
TRI_STATE_TRUE = 1
} TRI_STATE;
//
// DLL_ENTRY_POINT - maps a name to an entry point in a DLL
//
typedef struct {
LPSTR lpszProcedureName;
FARPROC * lplpfnProcedure;
} DLL_ENTRY_POINT, * LPDLL_ENTRY_POINT;
//
// DLL_INFO - used to dynamically load/unload libraries
//
typedef struct {
LPSTR lpszDllName;
HINSTANCE hModule;
LONG LoadCount;
DWORD dwNumberOfEntryPoints;
LPDLL_ENTRY_POINT lpEntryPoints;
} DLL_INFO, * LPDLL_INFO;
//
// macros
//
#define IsPlatformWin95() \
(BOOL)((GlobalPlatformType == PLATFORM_TYPE_WIN95) ? TRUE : FALSE)
#define IsPlatformWinNT() \
(BOOL)((GlobalPlatformType == PLATFORM_TYPE_WINNT) ? TRUE : FALSE)
//#define IsUnicodeSupported() \
// (BOOL)((PlatformSupport() & PLATFORM_SUPPORTS_UNICODE) ? TRUE : FALSE)
#define DLL_ENTRY_POINT_ELEMENT(name) \
# name, (FARPROC *)&_I_ ## name
#define DLL_INFO_INIT(name, entryPoints) { \
name, \
NULL, \
0, \
ARRAY_ELEMENTS(entryPoints), \
(LPDLL_ENTRY_POINT)&entryPoints \
}
#define CompareFileTime(ft1, ft2) ( ((*(LONGLONG *)&ft1) > (*(LONGLONG *)&ft2)) ? 1 : \
( ((*(LONGLONG *)&ft1) == (*(LONGLONG *)&ft2)) ? 0 : -1 ) )
#define WRAP_REVERT_USER(fn, args, retVal) \
{ \
HANDLE hThreadToken = NULL; \
if (OpenThreadToken(GetCurrentThread(), (TOKEN_IMPERSONATE | TOKEN_READ), \
FALSE, \
&hThreadToken)) \
{ \
INET_ASSERT(hThreadToken != 0); \
RevertToSelf(); \
} \
retVal = fn args; \
if (hThreadToken) \
{ \
SetThreadToken(NULL, hThreadToken); \
CloseHandle(hThreadToken); \
} \
}
#define SAFE_WRAP_REVERT_USER(fn, args, retVal) \
{ \
HANDLE hThreadToken = NULL; \
if (OpenThreadToken(GetCurrentThread(), (TOKEN_IMPERSONATE | TOKEN_READ), \
FALSE, \
&hThreadToken)) \
{ \
INET_ASSERT(hThreadToken != 0); \
RevertToSelf(); \
} \
__try \
{ \
retVal = fn args; \
} \
__except(EXCEPTION_EXECUTE_HANDLER) \
{ \
} \
ENDEXCEPT \
if (hThreadToken) \
{ \
SetThreadToken(NULL, hThreadToken); \
CloseHandle(hThreadToken); \
} \
}
#define WRAP_REVERT_USER_VOID(fn, args) \
{ \
HANDLE hThreadToken = NULL; \
if (OpenThreadToken(GetCurrentThread(), (TOKEN_IMPERSONATE | TOKEN_READ), \
FALSE, \
&hThreadToken)) \
{ \
INET_ASSERT(hThreadToken != 0); \
RevertToSelf(); \
} \
fn args; \
if (hThreadToken) \
{ \
SetThreadToken(NULL, hThreadToken); \
CloseHandle(hThreadToken); \
} \
}
#define SAFE_WRAP_REVERT_USER_VOID(fn, args) \
{ \
HANDLE hThreadToken = NULL; \
if (OpenThreadToken(GetCurrentThread(), (TOKEN_IMPERSONATE | TOKEN_READ), \
FALSE, \
&hThreadToken)) \
{ \
INET_ASSERT(hThreadToken != 0); \
RevertToSelf(); \
} \
__try \
{ \
fn args; \
} \
__except(EXCEPTION_EXECUTE_HANDLER) \
{ \
} \
ENDEXCEPT \
if (hThreadToken) \
{ \
SetThreadToken(NULL, hThreadToken); \
CloseHandle(hThreadToken); \
} \
}
//
// prototypes
//
LPSTR
NewString(
IN LPCSTR String,
IN DWORD dwLen = 0
);
LPWSTR
NewStringW(
IN LPCWSTR String,
IN DWORD dwLen = 0
);
LPSTR
CatString (
IN LPCSTR lpszLeft,
IN LPCSTR lpszRight
);
HLOCAL
ResizeBuffer(
IN HLOCAL BufferHandle,
IN DWORD Size,
IN BOOL Moveable
);
LPSTR
_memrchr(
IN LPSTR lpString,
IN CHAR cTarget,
IN INT iLength
);
LPSTR
strnistr(
IN LPSTR str1,
IN LPSTR str2,
IN DWORD Length
);
LPSTR
FASTCALL
PrivateStrChr(
IN LPCSTR lpStart,
IN WORD wMatch
);
DWORD
PlatformType(
IN OUT LPDWORD lpdwVersion5os = NULL
);
DWORD
PlatformSupport(
VOID
);
DWORD
GetTimeoutValue(
IN DWORD TimeoutOption
);
DWORD
ProbeWriteBuffer(
IN LPVOID lpBuffer,
IN DWORD dwBufferLength
);
DWORD
ProbeReadBuffer(
IN LPVOID lpBuffer,
IN DWORD dwBufferLength
);
DWORD
ProbeAndSetDword(
IN LPDWORD lpDword,
IN DWORD dwValue
);
DWORD
ProbeString(
IN LPSTR lpString,
OUT LPDWORD lpdwStringLength
);
DWORD
ProbeStringW(
IN LPWSTR lpString,
OUT LPDWORD lpdwStringLength
);
DWORD
LoadDllEntryPoints(
IN OUT LPDLL_INFO lpDllInfo,
IN DWORD dwFlags
);
//
// flags for LoadDllEntryPoints()
//
#define LDEP_PARTIAL_LOAD_OK 0x00000001 // ok if not all entry points can be loaded
DWORD
UnloadDllEntryPoints(
IN OUT LPDLL_INFO lpDllInfo,
IN BOOL bForce
);
DWORD
MapInternetError(
IN DWORD ErrorCode,
IN LPDWORD lpdwStatus = NULL
);
DWORD
CalculateHashValue(
IN LPSTR lpszString
);
VOID GetCurrentGmtTime(
LPFILETIME lpFt
);
LPTSTR
FTtoString(
IN FILETIME *pftTime
);
BOOL
PrintFileTimeInInternetFormat(
FILETIME *lpft,
LPSTR lpszBuff,
DWORD dwSize
);
DWORD
ConvertSecurityInfoIntoCertInfoStruct(
IN LPINTERNET_SECURITY_INFO pSecInfo,
OUT INTERNET_CERTIFICATE_INFO *pCertificate,
IN OUT DWORD *pcbCertificate
);
BOOL
CertHashToStr(
IN LPSTR lpMD5Hash,
IN DWORD dwMD5HashSize,
IN OUT LPSTR *lplpszHashStr
);
//DWORD
//UnicodeToUtf8(
// IN LPCWSTR pwszIn,
// IN DWORD dwInLen,
// OUT LPBYTE pszOut,
// IN OUT LPDWORD pdwOutLen
// );
DWORD
CountUnicodeToUtf8(
IN LPCWSTR pwszIn,
IN DWORD dwInLen,
IN BOOL bEncode
);
DWORD
ConvertUnicodeToUtf8(
IN LPCWSTR pwszIn,
IN DWORD dwInLen,
OUT LPBYTE pszOut,
IN DWORD dwOutLen,
IN BOOL bEncode
);
BOOL
StringContainsHighAnsi(
IN LPSTR pszIn,
IN DWORD dwInLen
);
DWORD
GetTickCountWrap();
#ifdef DONT_USE_IERT
char *
StrTokEx(
IN OUT char ** pstring,
IN const char * control);
double
StrToDbl(
IN const char *str,
IN OUT char **strStop);
#endif //DONT_USE_IERT
#if defined(__cplusplus)
}
#endif
DWORD
WideCharToAscii(PCWSTR pszW, char ** ppszA);
DWORD
AsciiToWideChar_UsingGlobalAlloc(const char * pszA, LPWSTR * ppszW);
#endif // defined(__UTIL_H__)