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