/*++ Copyright (c) 1991-2001 Microsoft Corporation Module Name: system.hxx Abstract: This module contains the definition for the SYSTEM class. The SYSTEM class is an abstract class which offers an interface for communicating with the underlying operating system. Author: David J. Gilman (davegi) 13-Jan-1991 Environment: ULIB, User Mode Notes: --*/ #if ! defined( _SYSTEM_ ) #define _SYSTEM_ DECLARE_CLASS( FSN_DIRECTORY ); DECLARE_CLASS( FSN_FILE ); DECLARE_CLASS( FSNODE ); DECLARE_CLASS( WSTRING ); DECLARE_CLASS( STREAM ); DECLARE_CLASS( TIMEINFO ); #include "message.hxx" #include "path.hxx" #include "basesys.hxx" #include "ifsentry.hxx" extern "C" { #include } // // Exit codes // #define EXIT_NORMAL 0 #define EXIT_NO_FILES 1 #define EXIT_TERMINATED 2 #define EXIT_MISC_ERROR 4 #define EXIT_READWRITE_ERROR 5 // // Error Codes from a copy // typedef enum _COPY_ERROR { COPY_ERROR_SUCCESS = ERROR_SUCCESS, COPY_ERROR_ACCESS_DENIED = ERROR_ACCESS_DENIED, COPY_ERROR_SHARE_VIOLATION = ERROR_SHARING_VIOLATION, COPY_ERROR_NO_MEMORY = ERROR_NOT_ENOUGH_MEMORY, COPY_ERROR_DISK_FULL = ERROR_DISK_FULL, COPY_ERROR_INVALID_NAME = ERROR_INVALID_NAME, COPY_ERROR_REQUEST_ABORTED = ERROR_REQUEST_ABORTED } COPY_ERROR, *PCOPY_ERROR; // // Flags that can be specified to FSN_FILE::Copy() // #define FSN_FILE_COPY_OVERWRITE_READ_ONLY (0x0001) #define FSN_FILE_COPY_RESET_READ_ONLY (0x0002) #define FSN_FILE_COPY_RESTARTABLE (0x0004) #define FSN_FILE_COPY_COPY_OWNER (0x0008) #define FSN_FILE_COPY_COPY_ACL (0x0010) #define FSN_FILE_COPY_ALLOW_DECRYPTED_DESTINATION (0x0020) enum FILE_TYPE { UnknownFile, DiskFile, CharFile, PipeFile }; struct _VOL_SERIAL_NUMBER { ULONG HighOrder32Bits; ULONG LowOrder32Bits; }; DEFINE_TYPE( struct _VOL_SERIAL_NUMBER, VOL_SERIAL_NUMBER ); class SYSTEM : public BASE_SYSTEM { friend BOOLEAN InitializeUlib( IN HANDLE DllHandle, IN ULONG Reason, IN PVOID Reserved ); public: STATIC ULIB_EXPORT PFSN_DIRECTORY MakeDirectory ( IN PCPATH Path, IN PCPATH TemplatePath, OUT PCOPY_ERROR CopyError, IN LPPROGRESS_ROUTINE Callback, IN PVOID Data, IN PBOOL Cancel, IN ULONG CopyFlags ); STATIC ULIB_EXPORT PFSN_FILE MakeFile ( IN PCPATH Path ); STATIC ULIB_EXPORT PFSN_FILE MakeTemporaryFile ( IN PCWSTRING PrefixString, IN PCPATH Path DEFAULT NULL ); STATIC ULIB_EXPORT BOOLEAN RemoveNode ( IN PFSNODE *PointerToNode, IN BOOLEAN Force DEFAULT FALSE ); STATIC ULIB_EXPORT BOOLEAN IsCorrectVersion ( ); STATIC PPATH QueryCurrentPath ( ); STATIC ULIB_EXPORT PFSN_DIRECTORY QueryDirectory ( IN PCPATH Path, IN BOOLEAN GetWhatYouCan DEFAULT FALSE ); STATIC ULIB_EXPORT PWSTRING QueryEnvironmentVariable ( IN PCWSTRING Variable ); STATIC ULIB_EXPORT PPATH QuerySystemDirectory ( ); STATIC ULIB_EXPORT PPATH SearchPath( PWSTRING pFileName, PWSTRING pSearchPath DEFAULT NULL ); STATIC ULIB_EXPORT PFSN_FILE QueryFile ( IN PCPATH Path, IN BOOLEAN SkipOffline DEFAULT FALSE, OUT PBOOLEAN pOfflineSkipped DEFAULT NULL ); STATIC ULIB_EXPORT BOOLEAN QueryCurrentDosDriveName( OUT PWSTRING DosDriveName ); STATIC ULIB_EXPORT DRIVE_TYPE QueryDriveType( IN PCWSTRING DosDriveName ); STATIC ULIB_EXPORT FILE_TYPE QueryFileType( IN PCWSTRING DosFileName ); STATIC ULIB_EXPORT PWSTRING QueryVolumeLabel( IN PPATH Path, OUT PVOL_SERIAL_NUMBER SerialNumber ); STATIC ULIB_EXPORT FARPROC QueryLibraryEntryPoint( IN PCWSTRING LibraryName, IN PCWSTRING EntryPointName, OUT PHANDLE LibraryHandle ); STATIC ULIB_EXPORT VOID FreeLibraryHandle( IN HANDLE LibraryHandle ); STATIC BOOLEAN PutStandardStream( IN DWORD StdHandle, IN PSTREAM pStream ); STATIC ULIB_EXPORT BOOLEAN QueryLocalTimeFromUTime( IN PCTIMEINFO UTimeInfo, OUT PTIMEINFO LocalTimeInfo ); STATIC BOOLEAN QueryUTimeFromLocalTime( IN PCTIMEINFO LocalTimeInfo, OUT PTIMEINFO UTimeInfo ); STATIC ULIB_EXPORT BOOLEAN QueryWindowsErrorMessage( IN ULONG WindowsErrorCode, OUT PWSTRING ErrorMessage ); STATIC ULIB_EXPORT BOOLEAN GetFileSecurityBackup( IN PCPATH Path, IN SECURITY_INFORMATION SecurityInfo, OUT PSECURITY_ATTRIBUTES SecurityAttrib, OUT PULONG FileAttributes ); STATIC ULIB_EXPORT VOID DisplaySystemError( IN DWORD ErrorCode, IN BOOL Exit ); }; INLINE PPATH SYSTEM::QueryCurrentPath ( ) { DebugAssert( FALSE ); return( NEW PATH ); } #endif // SYSTEM_DEFN