|
|
/*++
Copyright (c) 1990 Microsoft Corporation
Module Name:
basertl.h
Abstract:
This is the main include file for the runtime routines that are shared by the client and server sides of the Windows Base API implementation.
Author:
Steve Wood (stevewo) 25-Oct-1990
Revision History:
--*/
#if DBG
#undef RTLHEAP_TRACE_CALLS
#else
#undef RTLHEAP_TRACE_CALLS
#endif
NTSTATUS BaseRtlCreateAtomTable( IN ULONG NumberOfBuckets, IN ULONG MaxAtomTableSize, OUT PVOID *AtomTableHandle );
NTSTATUS BaseRtlDestroyAtomTable( IN PVOID AtomTableHandle );
NTSTATUS BaseRtlAddAtomToAtomTable( IN PVOID AtomTableHandle, IN PUNICODE_STRING AtomName, IN PULONG AtomValue OPTIONAL, OUT PULONG Atom OPTIONAL );
NTSTATUS BaseRtlLookupAtomInAtomTable( IN PVOID AtomTableHandle, IN PUNICODE_STRING AtomName, OUT PULONG AtomValue OPTIONAL, OUT PULONG Atom OPTIONAL );
NTSTATUS BaseRtlSetAtomValueInAtomTable( IN PVOID AtomTableHandle, IN PUNICODE_STRING AtomName, IN ULONG AtomValue );
NTSTATUS BaseRtlDeleteAtomFromAtomTable( IN PVOID AtomTableHandle, IN ULONG Atom );
NTSTATUS BaseRtlQueryAtomInAtomTable( IN PVOID AtomTableHandle, IN ULONG Atom, IN OUT PUNICODE_STRING AtomName OPTIONAL, OUT PULONG AtomValue OPTIONAL, OUT PULONG AtomUsage OPTIONAL );
typedef struct _BASE_HANDLE_TABLE_ENTRY { USHORT LockCount; USHORT Flags; union { struct _BASE_HANDLE_TABLE_ENTRY *Next; // Free handle
PVOID Object; // Allocated handle
ULONG Size; // Handle to discarded obj.
} u; } BASE_HANDLE_TABLE_ENTRY, *PBASE_HANDLE_TABLE_ENTRY;
#define BASE_HANDLE_FREE (USHORT)0x0001
#define BASE_HANDLE_MOVEABLE (USHORT)0x0002
#define BASE_HANDLE_DISCARDABLE (USHORT)0x0004
#define BASE_HANDLE_DISCARDED (USHORT)0x0008
#define BASE_HANDLE_SHARED (USHORT)0x8000
//
// Handles are 32-bit pointers to the u.Object field of a
// BASE_HANDLE_TABLE_ENTRY. Since this field is 4 bytes into the
// structure and the structures are always on 8 byte boundaries, we can
// test the 0x4 bit to see if it is a handle.
//
#define BASE_HANDLE_MARK_BIT (ULONG)0x00000004
#define BASE_HEAP_FLAG_MOVEABLE HEAP_SETTABLE_USER_FLAG1
#define BASE_HEAP_FLAG_DDESHARE HEAP_SETTABLE_USER_FLAG2
typedef struct _BASE_HANDLE_TABLE { ULONG MaximumNumberOfHandles; PBASE_HANDLE_TABLE_ENTRY FreeHandles; PBASE_HANDLE_TABLE_ENTRY CommittedHandles; PBASE_HANDLE_TABLE_ENTRY UnusedCommittedHandles; PBASE_HANDLE_TABLE_ENTRY UnCommittedHandles; PBASE_HANDLE_TABLE_ENTRY MaxReservedHandles; } BASE_HANDLE_TABLE, *PBASE_HANDLE_TABLE;
NTSTATUS BaseRtlInitializeHandleTable( IN ULONG MaximumNumberOfHandles, OUT PBASE_HANDLE_TABLE HandleTable );
NTSTATUS BaseRtlDestroyHandleTable( IN OUT PBASE_HANDLE_TABLE HandleTable );
PBASE_HANDLE_TABLE_ENTRY BaseRtlAllocateHandle( IN PBASE_HANDLE_TABLE HandleTable );
BOOLEAN BaseRtlFreeHandle( IN PBASE_HANDLE_TABLE HandleTable, IN PBASE_HANDLE_TABLE_ENTRY Handle );
//
// These structures are kept in the global shared memory section created
// in the server and mapped readonly into each client address space when
// they connect to the server.
//
typedef struct _INIFILE_MAPPING_TARGET { struct _INIFILE_MAPPING_TARGET *Next; UNICODE_STRING RegistryPath; } INIFILE_MAPPING_TARGET, *PINIFILE_MAPPING_TARGET;
typedef struct _INIFILE_MAPPING_VARNAME { struct _INIFILE_MAPPING_VARNAME *Next; UNICODE_STRING Name; ULONG MappingFlags; PINIFILE_MAPPING_TARGET MappingTarget; } INIFILE_MAPPING_VARNAME, *PINIFILE_MAPPING_VARNAME;
#define INIFILE_MAPPING_WRITE_TO_INIFILE_TOO 0x00000001
#define INIFILE_MAPPING_INIT_FROM_INIFILE 0x00000002
#define INIFILE_MAPPING_READ_FROM_REGISTRY_ONLY 0x00000004
#define INIFILE_MAPPING_APPEND_BASE_NAME 0x10000000
#define INIFILE_MAPPING_APPEND_APPLICATION_NAME 0x20000000
#define INIFILE_MAPPING_SOFTWARE_RELATIVE 0x40000000
#define INIFILE_MAPPING_USER_RELATIVE 0x80000000
typedef struct _INIFILE_MAPPING_APPNAME { struct _INIFILE_MAPPING_APPNAME *Next; UNICODE_STRING Name; PINIFILE_MAPPING_VARNAME VariableNames; PINIFILE_MAPPING_VARNAME DefaultVarNameMapping; } INIFILE_MAPPING_APPNAME, *PINIFILE_MAPPING_APPNAME;
typedef struct _INIFILE_MAPPING_FILENAME { struct _INIFILE_MAPPING_FILENAME *Next; UNICODE_STRING Name; PINIFILE_MAPPING_APPNAME ApplicationNames; PINIFILE_MAPPING_APPNAME DefaultAppNameMapping; } INIFILE_MAPPING_FILENAME, *PINIFILE_MAPPING_FILENAME;
typedef struct _INIFILE_MAPPING { PINIFILE_MAPPING_FILENAME FileNames; PINIFILE_MAPPING_FILENAME DefaultFileNameMapping; PINIFILE_MAPPING_FILENAME WinIniFileMapping; ULONG Reserved; } INIFILE_MAPPING, *PINIFILE_MAPPING;
//
// NLS Information.
//
#define NLS_INVALID_INFO_CHAR 0xffff /* marks cache string as invalid */
#define MAX_REG_VAL_SIZE 80 /* max size of registry value */
typedef struct _NLS_USER_INFO { WCHAR sAbbrevLangName[MAX_REG_VAL_SIZE]; WCHAR iCountry[MAX_REG_VAL_SIZE]; WCHAR sCountry[MAX_REG_VAL_SIZE]; WCHAR sList[MAX_REG_VAL_SIZE]; WCHAR iMeasure[MAX_REG_VAL_SIZE]; WCHAR sDecimal[MAX_REG_VAL_SIZE]; WCHAR sThousand[MAX_REG_VAL_SIZE]; WCHAR sGrouping[MAX_REG_VAL_SIZE]; WCHAR iDigits[MAX_REG_VAL_SIZE]; WCHAR iLZero[MAX_REG_VAL_SIZE]; WCHAR iNegNumber[MAX_REG_VAL_SIZE]; WCHAR sCurrency[MAX_REG_VAL_SIZE]; WCHAR sMonDecSep[MAX_REG_VAL_SIZE]; WCHAR sMonThouSep[MAX_REG_VAL_SIZE]; WCHAR sMonGrouping[MAX_REG_VAL_SIZE]; WCHAR iCurrDigits[MAX_REG_VAL_SIZE]; WCHAR iCurrency[MAX_REG_VAL_SIZE]; WCHAR iNegCurr[MAX_REG_VAL_SIZE]; WCHAR sPosSign[MAX_REG_VAL_SIZE]; WCHAR sNegSign[MAX_REG_VAL_SIZE]; WCHAR sTimeFormat[MAX_REG_VAL_SIZE]; WCHAR sTime[MAX_REG_VAL_SIZE]; WCHAR iTime[MAX_REG_VAL_SIZE]; WCHAR iTLZero[MAX_REG_VAL_SIZE]; WCHAR iTimeMarkPosn[MAX_REG_VAL_SIZE]; WCHAR s1159[MAX_REG_VAL_SIZE]; WCHAR s2359[MAX_REG_VAL_SIZE]; WCHAR sShortDate[MAX_REG_VAL_SIZE]; WCHAR sDate[MAX_REG_VAL_SIZE]; WCHAR iDate[MAX_REG_VAL_SIZE]; WCHAR sLongDate[MAX_REG_VAL_SIZE]; WCHAR iCalType[MAX_REG_VAL_SIZE]; WCHAR iFirstDay[MAX_REG_VAL_SIZE]; WCHAR iFirstWeek[MAX_REG_VAL_SIZE]; WCHAR sLocale[MAX_REG_VAL_SIZE]; LCID UserLocaleId; BOOL fCacheValid; } NLS_USER_INFO, *PNLS_USER_INFO;
BOOLEAN BaseRtlInitialize( PVOID DllHandle, PVOID Heap, ULONG TagBase );
ULONG BaseRtlTag; PVOID BaseRtlHeap;
#define MAKE_RTL_TAG( t ) (RTL_HEAP_MAKE_TAG( BaseRtlTag, t ))
#define ATOM_TAG 0
|