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.
249 lines
6.9 KiB
249 lines
6.9 KiB
/*++
|
|
|
|
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
|
|
|