WarFsysDll.h
上传用户:surprise9
上传日期:2007-01-04
资源大小:426k
文件大小:5k
源码类别:

Ftp客户端

开发平台:

Visual C++

  1. // any countries. This includes the government, departments, police, 
  2. // military etc.
  3. // ---
  4. // This file is intended for use with Tab space = 2
  5. // Created and maintained in MSVC Developer Studio
  6. // ---
  7. // NAME : WarFsysDll.h
  8. // PURPOSE : Header file for the simple File system dll (WarFsys.dll)
  9. // PROGRAM : 
  10. // DATE : March 11 1997
  11. // AUTHOR : Jarle Aase
  12. // ---
  13. //
  14. // Overview:
  15. // This dll provides the higher levels in the server with file system calls.
  16. // The file system support UNIX/VFsys file attributes, VFsys and Win95/NT 4 
  17. // soft-links and true multithread/multiprocess access.
  18. //
  19. // Exports are done in the .def file.
  20. // 
  21. // REVISION HISTORY
  22. // 
  23. // This file is for the dll itself only. It does not contain any
  24. // manifests or classes for export.
  25. // Shared memory header for all threads/processes using the dll.
  26. struct WAR_FSYS_HDR
  27. {
  28. BOOL IsInitialized;
  29. DWORD NumOpenHandles;
  30. DWORD NumOpenFiles;
  31. char PrivateIndexPath[MAX_PATH]; // Private .index.txt files
  32. char PrivateIniPath[MAX_PATH]; // .ini file for fsys
  33. };
  34. class CWarFsysFileHandle : public CObject
  35. {
  36. private:
  37. CWarFsysFileHandle();
  38. ~CWarFsysFileHandle();
  39. public:
  40. HANDLE m_DOShandle; // DOS handle to the file
  41. CWarFsysHandle *m_pFsysHandle; // Pointer to owner
  42. };
  43. class CWarFsysFileInfo : public CFileInfo
  44. {
  45. SMEM m_strComment;
  46. SMEM m_Son; // CWarFsysFileInfo Link to subdirectory node
  47. SMEM m_CopyPath; // LPCSTR name of path where copy reside
  48. unsigned m_OpenCnt : 16; // Number of open handles
  49. unsigned m_NumLinks: 8; // Number of links
  50. unsigned m_Deleted : 1; // Deleted
  51. unsigned m_Locked : 1; // Exclusive lock
  52. unsigned m_UseCopy: 1; // Use the copy for normal file access
  53. unsigned m_UseHome: 1; // Use original for nornal file access
  54. unsigned m_CopyToHome : 1; // Uploaded file needs to be copyed to home
  55. };
  56. // Directory node.
  57. // Uses shared memory.
  58. class CWarFsysDirNode : public CObject
  59. {
  60. DWORD m_Flags;
  61. SMEM m_Father; // CWarFsysDirNode Pointer to the (real) father
  62. SMEM m_Generic; // Pointer to the 'real' directory entry
  63.                 // Pointer to the DOS directory name
  64. CWarTimer m_Timer; // Timeout for rescan
  65. DWORD m_NumEntries; // Number of files/dirs
  66. DWORD m_NumReferences; // Number of open references
  67. CWarFsysFileInfo[1]; // Array of files
  68. SMEM m_EventChain;
  69. enum
  70. {
  71. DIRTY = 0x0001, // Node must be flushed
  72. USERNODE = 0x0002, // This node is for one user only
  73. CPYFILES = 0x0004, // Copy files prior to open for read
  74.   // This flag is recursive until 
  75. RESCANNING = 0x0008, // Directory is being scanned
  76. COPYING = 0x00100, // One or more files is being copyed
  77. };
  78. }
  79. class CWarFsysFindHandle : public CObject
  80. {
  81. public:
  82. CWarFsysFindHandle();
  83. ~CWarFsysFindHandle();
  84. HANDLE FindFirstFile(LPCTSTR lpFileName, CFileInfo& FileInfo);
  85. BOOL FindNextFile(CFileInfo& FileInfo);
  86. void FindClose();
  87. HANDLE m_DOShandle; // DOS handle to the file
  88. CWarFsysHandle *m_pFsysHandle; // Pointer to owner
  89. HANDLE m_SecurityHandle; // Handle to security descriptior for dir
  90. CCmdArgs *m_PathsQueued; // VfSys links and drive letters
  91. CString m_Pattern;
  92. CString m_DOSpath;
  93. int m_Argc;
  94. };
  95. class CWarFsysHandle : public CObject
  96. {
  97. public:
  98. CWarFsysHandle()
  99. ~CWarFsysHandle();
  100. // Entry points
  101. HANDLE OpenFsys(
  102. LPCSTR RootPath, 
  103. LPCSTR Maps, 
  104. LPCSTR HomeDir, 
  105. USER User, 
  106. USER Class, 
  107. BOOL IsAdmin, 
  108. HANDLE hNTsec);
  109. void CloseFsys();
  110. BOOL ChDir(LPCSTR Path);
  111. BOOL CanAccess(LPCSTR Path, int AccessMode);
  112. BOOL CreateDirectory(LPCSTR Path);
  113. BOOL DeleteFile(LPCSTR Path);
  114. FLEN GetDiskFreeSpace(LPCSTR Path);
  115. BOOL MoveFile(LPCTSTR ExistingFileName, LPCTSTR NewFileName);
  116. void CloseHandle();
  117. HANDLE FindFirstFile(LPCTSTR lpFileName, CFileInfo& FileInfo);
  118. BOOL FindNextFile(CFileInfo& FileInfo);
  119. void FindClose();
  120. GetCWD(HANDLE hFsys)
  121. // Support functions
  122. // Member variables
  123. WAR_FSYS_HDR *m_pFsysHdr;
  124. CString m_RootPath; // Primary root dir
  125. CString m_Maps; // Extra root dirs, mapped to the users physical root
  126. CString m_HomeDir;
  127. int m_NumRootDirs; // Number of root dirs, including maps.
  128. USER m_User;
  129. USER m_Class;
  130. BOOL m_IsAdmin; // Is administrator - override security
  131. HANDLE m_hNTsec; // Use NT security if present
  132. CString m_CWD; // Logical dir for cwd, including links
  133. CString m_PhysicalCWD; // Physical dir for cwd.
  134. CLinkedList m_OpenFiles; // CWarFsysFileHandle
  135. CLinkedList m_OpenFinds; // CWarFsysFindHandle
  136. static CSharedBlksMem *m_pSM;
  137. static int m_NumObjects;
  138. };
  139. void FsysLogMsg(int flag, LPCSTR Format, ...);
  140. #ifdef _DEBUG
  141. #define DEBUG_TAG "-debug"
  142. #else
  143. #define DEBUG_TAG
  144. #endif
  145. #define WAR_FSYS_SHARED_LOCK "WarFsysSharedLock"DEBUG_TAG