1/* 2 * tclWinInt.h -- 3 * 4 * Declarations of Windows-specific shared variables and procedures. 5 * 6 * Copyright (c) 1994-1996 Sun Microsystems, Inc. 7 * 8 * See the file "license.terms" for information on usage and redistribution 9 * of this file, and for a DISCLAIMER OF ALL WARRANTIES. 10 * 11 * RCS: @(#) $Id: tclWinInt.h,v 1.20.2.5 2006/03/10 10:35:25 vincentdarley Exp $ 12 */ 13 14#ifndef _TCLWININT 15#define _TCLWININT 16 17#ifndef _TCLINT 18#include "tclInt.h" 19#endif 20#ifndef _TCLPORT 21#include "tclPort.h" 22#endif 23 24/* 25 * The following specifies how much stack space TclpCheckStackSpace() 26 * ensures is available. TclpCheckStackSpace() is called by Tcl_EvalObj() 27 * to help avoid overflowing the stack in the case of infinite recursion. 28 */ 29 30#define TCL_WIN_STACK_THRESHOLD 0x8000 31 32#ifdef BUILD_tcl 33# undef TCL_STORAGE_CLASS 34# define TCL_STORAGE_CLASS DLLEXPORT 35#endif 36 37/* 38 * Some versions of Borland C have a define for the OSVERSIONINFO for 39 * Win32s and for NT, but not for Windows 95. 40 * Define VER_PLATFORM_WIN32_CE for those without newer headers. 41 */ 42 43#ifndef VER_PLATFORM_WIN32_WINDOWS 44#define VER_PLATFORM_WIN32_WINDOWS 1 45#endif 46#ifndef VER_PLATFORM_WIN32_CE 47#define VER_PLATFORM_WIN32_CE 3 48#endif 49 50/* 51 * The following structure keeps track of whether we are using the 52 * multi-byte or the wide-character interfaces to the operating system. 53 * System calls should be made through the following function table. 54 */ 55 56typedef union { 57 WIN32_FIND_DATAA a; 58 WIN32_FIND_DATAW w; 59} WIN32_FIND_DATAT; 60 61typedef struct TclWinProcs { 62 int useWide; 63 64 BOOL (WINAPI *buildCommDCBProc)(CONST TCHAR *, LPDCB); 65 TCHAR *(WINAPI *charLowerProc)(TCHAR *); 66 BOOL (WINAPI *copyFileProc)(CONST TCHAR *, CONST TCHAR *, BOOL); 67 BOOL (WINAPI *createDirectoryProc)(CONST TCHAR *, LPSECURITY_ATTRIBUTES); 68 HANDLE (WINAPI *createFileProc)(CONST TCHAR *, DWORD, DWORD, 69 LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE); 70 BOOL (WINAPI *createProcessProc)(CONST TCHAR *, TCHAR *, 71 LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, BOOL, DWORD, 72 LPVOID, CONST TCHAR *, LPSTARTUPINFOA, LPPROCESS_INFORMATION); 73 BOOL (WINAPI *deleteFileProc)(CONST TCHAR *); 74 HANDLE (WINAPI *findFirstFileProc)(CONST TCHAR *, WIN32_FIND_DATAT *); 75 BOOL (WINAPI *findNextFileProc)(HANDLE, WIN32_FIND_DATAT *); 76 BOOL (WINAPI *getComputerNameProc)(WCHAR *, LPDWORD); 77 DWORD (WINAPI *getCurrentDirectoryProc)(DWORD, WCHAR *); 78 DWORD (WINAPI *getFileAttributesProc)(CONST TCHAR *); 79 DWORD (WINAPI *getFullPathNameProc)(CONST TCHAR *, DWORD nBufferLength, 80 WCHAR *, TCHAR **); 81 DWORD (WINAPI *getModuleFileNameProc)(HMODULE, WCHAR *, int); 82 DWORD (WINAPI *getShortPathNameProc)(CONST TCHAR *, WCHAR *, DWORD); 83 UINT (WINAPI *getTempFileNameProc)(CONST TCHAR *, CONST TCHAR *, UINT, 84 WCHAR *); 85 DWORD (WINAPI *getTempPathProc)(DWORD, WCHAR *); 86 BOOL (WINAPI *getVolumeInformationProc)(CONST TCHAR *, WCHAR *, DWORD, 87 LPDWORD, LPDWORD, LPDWORD, WCHAR *, DWORD); 88 HINSTANCE (WINAPI *loadLibraryProc)(CONST TCHAR *); 89 TCHAR (WINAPI *lstrcpyProc)(WCHAR *, CONST TCHAR *); 90 BOOL (WINAPI *moveFileProc)(CONST TCHAR *, CONST TCHAR *); 91 BOOL (WINAPI *removeDirectoryProc)(CONST TCHAR *); 92 DWORD (WINAPI *searchPathProc)(CONST TCHAR *, CONST TCHAR *, 93 CONST TCHAR *, DWORD, WCHAR *, TCHAR **); 94 BOOL (WINAPI *setCurrentDirectoryProc)(CONST TCHAR *); 95 BOOL (WINAPI *setFileAttributesProc)(CONST TCHAR *, DWORD); 96 /* 97 * These two function pointers will only be set when 98 * Tcl_FindExecutable is called. If you don't ever call that 99 * function, the application will crash whenever WinTcl tries to call 100 * functions through these null pointers. That is not a bug in Tcl 101 * -- Tcl_FindExecutable is obligatory in recent Tcl releases. 102 */ 103 BOOL (WINAPI *getFileAttributesExProc)(CONST TCHAR *, 104 GET_FILEEX_INFO_LEVELS, LPVOID); 105 BOOL (WINAPI *createHardLinkProc)(CONST TCHAR*, CONST TCHAR*, 106 LPSECURITY_ATTRIBUTES); 107 108 INT (__cdecl *utimeProc)(CONST TCHAR*, struct _utimbuf *); 109 /* These two are also NULL at start; see comment above */ 110 HANDLE (WINAPI *findFirstFileExProc)(CONST TCHAR*, UINT, 111 LPVOID, UINT, 112 LPVOID, DWORD); 113 BOOL (WINAPI *getVolumeNameForVMPProc)(CONST TCHAR*, TCHAR*, DWORD); 114 115 DWORD (WINAPI *getLongPathNameProc)(CONST TCHAR*, TCHAR*, DWORD); 116 /* 117 * These six are for the security sdk to get correct file 118 * permissions on NT, 2000, XP, etc. On 95,98,ME they are 119 * always null. 120 */ 121 BOOL (WINAPI *getFileSecurityProc)(LPCTSTR lpFileName, 122 SECURITY_INFORMATION RequestedInformation, 123 PSECURITY_DESCRIPTOR pSecurityDescriptor, 124 DWORD nLength, 125 LPDWORD lpnLengthNeeded); 126 BOOL (WINAPI *impersonateSelfProc) (SECURITY_IMPERSONATION_LEVEL 127 ImpersonationLevel); 128 BOOL (WINAPI *openThreadTokenProc) (HANDLE ThreadHandle, 129 DWORD DesiredAccess, BOOL OpenAsSelf, 130 PHANDLE TokenHandle); 131 BOOL (WINAPI *revertToSelfProc) (void); 132 VOID (WINAPI *mapGenericMaskProc) (PDWORD AccessMask, 133 PGENERIC_MAPPING GenericMapping); 134 BOOL (WINAPI *accessCheckProc)(PSECURITY_DESCRIPTOR pSecurityDescriptor, 135 HANDLE ClientToken, DWORD DesiredAccess, 136 PGENERIC_MAPPING GenericMapping, 137 PPRIVILEGE_SET PrivilegeSet, 138 LPDWORD PrivilegeSetLength, 139 LPDWORD GrantedAccess, 140 LPBOOL AccessStatus); 141 /* 142 * Unicode console support. WriteConsole and ReadConsole 143 */ 144 BOOL (WINAPI *readConsoleProc)(HANDLE hConsoleInput, 145 LPVOID lpBuffer, 146 DWORD nNumberOfCharsToRead, 147 LPDWORD lpNumberOfCharsRead, 148 LPVOID lpReserved); 149 BOOL (WINAPI *writeConsoleProc)(HANDLE hConsoleOutput, 150 const VOID* lpBuffer, 151 DWORD nNumberOfCharsToWrite, 152 LPDWORD lpNumberOfCharsWritten, 153 LPVOID lpReserved); 154} TclWinProcs; 155 156EXTERN TclWinProcs *tclWinProcs; 157 158/* 159 * Declarations of functions that are not accessible by way of the 160 * stubs table. 161 */ 162 163EXTERN void TclWinEncodingsCleanup(); 164EXTERN void TclWinResetInterfaceEncodings(); 165EXTERN void TclWinInit(HINSTANCE hInst); 166EXTERN int TclWinSymLinkCopyDirectory(CONST TCHAR* LinkOriginal, 167 CONST TCHAR* LinkCopy); 168EXTERN int TclWinSymLinkDelete(CONST TCHAR* LinkOriginal, 169 int linkOnly); 170EXTERN char TclWinDriveLetterForVolMountPoint(CONST WCHAR *mountPoint); 171#if defined(TCL_THREADS) && defined(USE_THREAD_ALLOC) 172EXTERN void TclWinFreeAllocCache(void); 173EXTERN void TclFreeAllocCache(void *); 174EXTERN Tcl_Mutex *TclpNewAllocMutex(void); 175EXTERN void *TclpGetAllocCache(void); 176EXTERN void TclpSetAllocCache(void *); 177#endif /* TCL_THREADS */ 178 179/* Needed by tclWinFile.c and tclWinFCmd.c */ 180#ifndef FILE_ATTRIBUTE_REPARSE_POINT 181#define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 182#endif 183 184#include "tclIntPlatDecls.h" 185 186# undef TCL_STORAGE_CLASS 187# define TCL_STORAGE_CLASS DLLIMPORT 188 189#endif /* _TCLWININT */ 190