| 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 */ | 
|---|