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