|
|
/*++
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 dirk@mink.intel.com 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 );
|