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.
 
 
 
 
 
 

239 lines
4.4 KiB

/*++
Intel Corporation Proprietary Information
Copyright (c) 1995 Intel Corporation
This listing is supplied under the terms of a license agreement with
Intel Corporation and may not be used, copied, nor disclosed except in
accordance with the terms of that agreeement.
Module Name:
util.h
Abstract:
This module contains utility MACRO'S and definitions used for
WINSOCK2 DLL
Author:
Dirk Brandewie [email protected] 11-JUL-1995
Revision History:
--*/
#include <windows.h>
#include "classfwd.h"
//
// The highest WinSock versions supported by this DLL.
//
#define WINSOCK_HIGH_API_VERSION MAKEWORD(2,2)
#define WINSOCK_HIGH_SPI_VERSION MAKEWORD(2,2)
//
// The maximum allowed length for a catalog name such as "Protocol_Catalog9"
// or "NameSpace_Catalog5". This makes ValidateCurrentCatalogName() a bit
// simpler.
//
#define MAX_CATALOG_NAME_LENGTH 32
//
// Special value that keeps serial number of the registry catalog
// and helps synchronize access to registry without "public"
// mutex object
//
#define SERIAL_NUMBER_NAME "Serial_Access_Num"
//
// API prolog. Note that Prolog_v1 is always used for WinSock 1.1 apps,
// and Prolog_v2 is always used for WinSock 2.x apps.
//
// Code within this DLL should call the prolog through the PROLOG macro.
// This will make life a bit simpler if we decide to change it yet again
// in the future.
//
INT
WINAPI
Prolog_v1(
OUT PDPROCESS FAR * Process,
OUT PDTHREAD FAR * Thread
);
INT
WINAPI
Prolog_v2(
OUT PDPROCESS FAR * Process,
OUT PDTHREAD FAR * Thread
);
INT
WINAPI
Prolog_Detached(
OUT PDPROCESS FAR * Process,
OUT PDTHREAD FAR * Thread
);
typedef
INT
(WINAPI * LPFN_PROLOG)(
OUT PDPROCESS FAR * Process,
OUT PDTHREAD FAR * Thread
);
extern LPFN_PROLOG PrologPointer;
extern HANDLE gHeap;
extern HINSTANCE gDllHandle;
#define PROLOG(p,t) (PrologPointer)( (p), (t) )
//
// Optimized inline version for V2 apps to be used
// on sensitive performance paths.
//
INT
WINAPI
SlowPrologOvlp (
OUT PDTHREAD FAR * Thread
);
INT
WINAPI
SlowProlog (
VOID
);
#define TURBO_PROLOG() \
(((PrologPointer==Prolog_v2) && \
(DPROCESS::GetCurrentDProcess()!=NULL)) \
? ERROR_SUCCESS \
: SlowProlog())
#define TURBO_PROLOG_OVLP(t) \
(((PrologPointer==Prolog_v2) && \
(DPROCESS::GetCurrentDProcess()!=NULL) && \
((*(t)=DTHREAD::GetCurrentDThread())!=NULL)) \
? ERROR_SUCCESS \
: SlowPrologOvlp(t))
//
// NT WOW Support.
//
typedef
BOOL
(WINAPI * LPFN_POSTMESSAGE)(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
//
// Registry manipulation.
//
BOOL
WriteRegistryEntry(
IN HKEY EntryKey,
IN LPCTSTR EntryName,
IN PVOID Data,
IN DWORD TypeFlag
);
BOOL
ReadRegistryEntry(
IN HKEY EntryKey,
IN LPTSTR EntryName,
OUT PVOID Data,
IN DWORD MaxBytes,
IN DWORD TypeFlag
);
LONG
RegDeleteKeyRecursive(
IN HKEY hkey,
IN LPCTSTR lpszSubKey
);
LONG
RegDeleteSubkeys(
IN HKEY hkey
);
HKEY
OpenWinSockRegistryRoot();
VOID
CloseWinSockRegistryRoot(
HKEY RootKey
);
VOID
ValidateCurrentCatalogName(
HKEY RootKey,
LPSTR ValueName,
LPSTR ExpectedName
);
INT
AcquireExclusiveCatalogAccess (
IN HKEY CatalogKey,
IN DWORD ExpextedSerialNum,
OUT PHKEY AccessKey
);
VOID
ReleaseExclusiveCatalogAccess (
IN HKEY CatalogKey,
IN DWORD CurrentSerialNum,
IN HKEY access_key
);
INT
SynchronizeSharedCatalogAccess (
IN HKEY CatalogKey,
IN HANDLE ChangeEvent,
OUT LPDWORD CurrentSerialNum
);
BOOL
HasCatalogChanged (
IN HANDLE ChangeEvent
);
//
// Ansi/Unicode conversions.
//
INT
MapUnicodeProtocolInfoToAnsi(
IN LPWSAPROTOCOL_INFOW UnicodeProtocolInfo,
OUT LPWSAPROTOCOL_INFOA AnsiProtocolInfo
);
INT
MapAnsiProtocolInfoToUnicode(
IN LPWSAPROTOCOL_INFOA AnsiProtocolInfo,
OUT LPWSAPROTOCOL_INFOW UnicodeProtocolInfo
);
BOOL
CompareMemory(
LPBYTE p1,
LPBYTE p2,
DWORD dwSize
);