tclWinInt.h
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:7k
源码类别:

通讯编程

开发平台:

Visual C++

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