sl@0: /* sl@0: * tclWinInt.h -- sl@0: * sl@0: * Declarations of Windows-specific shared variables and procedures. sl@0: * sl@0: * Copyright (c) 1994-1996 Sun Microsystems, Inc. sl@0: * sl@0: * See the file "license.terms" for information on usage and redistribution sl@0: * of this file, and for a DISCLAIMER OF ALL WARRANTIES. sl@0: * sl@0: * RCS: @(#) $Id: tclWinInt.h,v 1.20.2.5 2006/03/10 10:35:25 vincentdarley Exp $ sl@0: */ sl@0: sl@0: #ifndef _TCLWININT sl@0: #define _TCLWININT sl@0: sl@0: #ifndef _TCLINT sl@0: #include "tclInt.h" sl@0: #endif sl@0: #ifndef _TCLPORT sl@0: #include "tclPort.h" sl@0: #endif sl@0: sl@0: /* sl@0: * The following specifies how much stack space TclpCheckStackSpace() sl@0: * ensures is available. TclpCheckStackSpace() is called by Tcl_EvalObj() sl@0: * to help avoid overflowing the stack in the case of infinite recursion. sl@0: */ sl@0: sl@0: #define TCL_WIN_STACK_THRESHOLD 0x8000 sl@0: sl@0: #ifdef BUILD_tcl sl@0: # undef TCL_STORAGE_CLASS sl@0: # define TCL_STORAGE_CLASS DLLEXPORT sl@0: #endif sl@0: sl@0: /* sl@0: * Some versions of Borland C have a define for the OSVERSIONINFO for sl@0: * Win32s and for NT, but not for Windows 95. sl@0: * Define VER_PLATFORM_WIN32_CE for those without newer headers. sl@0: */ sl@0: sl@0: #ifndef VER_PLATFORM_WIN32_WINDOWS sl@0: #define VER_PLATFORM_WIN32_WINDOWS 1 sl@0: #endif sl@0: #ifndef VER_PLATFORM_WIN32_CE sl@0: #define VER_PLATFORM_WIN32_CE 3 sl@0: #endif sl@0: sl@0: /* sl@0: * The following structure keeps track of whether we are using the sl@0: * multi-byte or the wide-character interfaces to the operating system. sl@0: * System calls should be made through the following function table. sl@0: */ sl@0: sl@0: typedef union { sl@0: WIN32_FIND_DATAA a; sl@0: WIN32_FIND_DATAW w; sl@0: } WIN32_FIND_DATAT; sl@0: sl@0: typedef struct TclWinProcs { sl@0: int useWide; sl@0: sl@0: BOOL (WINAPI *buildCommDCBProc)(CONST TCHAR *, LPDCB); sl@0: TCHAR *(WINAPI *charLowerProc)(TCHAR *); sl@0: BOOL (WINAPI *copyFileProc)(CONST TCHAR *, CONST TCHAR *, BOOL); sl@0: BOOL (WINAPI *createDirectoryProc)(CONST TCHAR *, LPSECURITY_ATTRIBUTES); sl@0: HANDLE (WINAPI *createFileProc)(CONST TCHAR *, DWORD, DWORD, sl@0: LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE); sl@0: BOOL (WINAPI *createProcessProc)(CONST TCHAR *, TCHAR *, sl@0: LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, BOOL, DWORD, sl@0: LPVOID, CONST TCHAR *, LPSTARTUPINFOA, LPPROCESS_INFORMATION); sl@0: BOOL (WINAPI *deleteFileProc)(CONST TCHAR *); sl@0: HANDLE (WINAPI *findFirstFileProc)(CONST TCHAR *, WIN32_FIND_DATAT *); sl@0: BOOL (WINAPI *findNextFileProc)(HANDLE, WIN32_FIND_DATAT *); sl@0: BOOL (WINAPI *getComputerNameProc)(WCHAR *, LPDWORD); sl@0: DWORD (WINAPI *getCurrentDirectoryProc)(DWORD, WCHAR *); sl@0: DWORD (WINAPI *getFileAttributesProc)(CONST TCHAR *); sl@0: DWORD (WINAPI *getFullPathNameProc)(CONST TCHAR *, DWORD nBufferLength, sl@0: WCHAR *, TCHAR **); sl@0: DWORD (WINAPI *getModuleFileNameProc)(HMODULE, WCHAR *, int); sl@0: DWORD (WINAPI *getShortPathNameProc)(CONST TCHAR *, WCHAR *, DWORD); sl@0: UINT (WINAPI *getTempFileNameProc)(CONST TCHAR *, CONST TCHAR *, UINT, sl@0: WCHAR *); sl@0: DWORD (WINAPI *getTempPathProc)(DWORD, WCHAR *); sl@0: BOOL (WINAPI *getVolumeInformationProc)(CONST TCHAR *, WCHAR *, DWORD, sl@0: LPDWORD, LPDWORD, LPDWORD, WCHAR *, DWORD); sl@0: HINSTANCE (WINAPI *loadLibraryProc)(CONST TCHAR *); sl@0: TCHAR (WINAPI *lstrcpyProc)(WCHAR *, CONST TCHAR *); sl@0: BOOL (WINAPI *moveFileProc)(CONST TCHAR *, CONST TCHAR *); sl@0: BOOL (WINAPI *removeDirectoryProc)(CONST TCHAR *); sl@0: DWORD (WINAPI *searchPathProc)(CONST TCHAR *, CONST TCHAR *, sl@0: CONST TCHAR *, DWORD, WCHAR *, TCHAR **); sl@0: BOOL (WINAPI *setCurrentDirectoryProc)(CONST TCHAR *); sl@0: BOOL (WINAPI *setFileAttributesProc)(CONST TCHAR *, DWORD); sl@0: /* sl@0: * These two function pointers will only be set when sl@0: * Tcl_FindExecutable is called. If you don't ever call that sl@0: * function, the application will crash whenever WinTcl tries to call sl@0: * functions through these null pointers. That is not a bug in Tcl sl@0: * -- Tcl_FindExecutable is obligatory in recent Tcl releases. sl@0: */ sl@0: BOOL (WINAPI *getFileAttributesExProc)(CONST TCHAR *, sl@0: GET_FILEEX_INFO_LEVELS, LPVOID); sl@0: BOOL (WINAPI *createHardLinkProc)(CONST TCHAR*, CONST TCHAR*, sl@0: LPSECURITY_ATTRIBUTES); sl@0: sl@0: INT (__cdecl *utimeProc)(CONST TCHAR*, struct _utimbuf *); sl@0: /* These two are also NULL at start; see comment above */ sl@0: HANDLE (WINAPI *findFirstFileExProc)(CONST TCHAR*, UINT, sl@0: LPVOID, UINT, sl@0: LPVOID, DWORD); sl@0: BOOL (WINAPI *getVolumeNameForVMPProc)(CONST TCHAR*, TCHAR*, DWORD); sl@0: sl@0: DWORD (WINAPI *getLongPathNameProc)(CONST TCHAR*, TCHAR*, DWORD); sl@0: /* sl@0: * These six are for the security sdk to get correct file sl@0: * permissions on NT, 2000, XP, etc. On 95,98,ME they are sl@0: * always null. sl@0: */ sl@0: BOOL (WINAPI *getFileSecurityProc)(LPCTSTR lpFileName, sl@0: SECURITY_INFORMATION RequestedInformation, sl@0: PSECURITY_DESCRIPTOR pSecurityDescriptor, sl@0: DWORD nLength, sl@0: LPDWORD lpnLengthNeeded); sl@0: BOOL (WINAPI *impersonateSelfProc) (SECURITY_IMPERSONATION_LEVEL sl@0: ImpersonationLevel); sl@0: BOOL (WINAPI *openThreadTokenProc) (HANDLE ThreadHandle, sl@0: DWORD DesiredAccess, BOOL OpenAsSelf, sl@0: PHANDLE TokenHandle); sl@0: BOOL (WINAPI *revertToSelfProc) (void); sl@0: VOID (WINAPI *mapGenericMaskProc) (PDWORD AccessMask, sl@0: PGENERIC_MAPPING GenericMapping); sl@0: BOOL (WINAPI *accessCheckProc)(PSECURITY_DESCRIPTOR pSecurityDescriptor, sl@0: HANDLE ClientToken, DWORD DesiredAccess, sl@0: PGENERIC_MAPPING GenericMapping, sl@0: PPRIVILEGE_SET PrivilegeSet, sl@0: LPDWORD PrivilegeSetLength, sl@0: LPDWORD GrantedAccess, sl@0: LPBOOL AccessStatus); sl@0: /* sl@0: * Unicode console support. WriteConsole and ReadConsole sl@0: */ sl@0: BOOL (WINAPI *readConsoleProc)(HANDLE hConsoleInput, sl@0: LPVOID lpBuffer, sl@0: DWORD nNumberOfCharsToRead, sl@0: LPDWORD lpNumberOfCharsRead, sl@0: LPVOID lpReserved); sl@0: BOOL (WINAPI *writeConsoleProc)(HANDLE hConsoleOutput, sl@0: const VOID* lpBuffer, sl@0: DWORD nNumberOfCharsToWrite, sl@0: LPDWORD lpNumberOfCharsWritten, sl@0: LPVOID lpReserved); sl@0: } TclWinProcs; sl@0: sl@0: EXTERN TclWinProcs *tclWinProcs; sl@0: sl@0: /* sl@0: * Declarations of functions that are not accessible by way of the sl@0: * stubs table. sl@0: */ sl@0: sl@0: EXTERN void TclWinEncodingsCleanup(); sl@0: EXTERN void TclWinResetInterfaceEncodings(); sl@0: EXTERN void TclWinInit(HINSTANCE hInst); sl@0: EXTERN int TclWinSymLinkCopyDirectory(CONST TCHAR* LinkOriginal, sl@0: CONST TCHAR* LinkCopy); sl@0: EXTERN int TclWinSymLinkDelete(CONST TCHAR* LinkOriginal, sl@0: int linkOnly); sl@0: EXTERN char TclWinDriveLetterForVolMountPoint(CONST WCHAR *mountPoint); sl@0: #if defined(TCL_THREADS) && defined(USE_THREAD_ALLOC) sl@0: EXTERN void TclWinFreeAllocCache(void); sl@0: EXTERN void TclFreeAllocCache(void *); sl@0: EXTERN Tcl_Mutex *TclpNewAllocMutex(void); sl@0: EXTERN void *TclpGetAllocCache(void); sl@0: EXTERN void TclpSetAllocCache(void *); sl@0: #endif /* TCL_THREADS */ sl@0: sl@0: /* Needed by tclWinFile.c and tclWinFCmd.c */ sl@0: #ifndef FILE_ATTRIBUTE_REPARSE_POINT sl@0: #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 sl@0: #endif sl@0: sl@0: #include "tclIntPlatDecls.h" sl@0: sl@0: # undef TCL_STORAGE_CLASS sl@0: # define TCL_STORAGE_CLASS DLLIMPORT sl@0: sl@0: #endif /* _TCLWININT */