// discaccess.h #ifndef _PROGRAMCOMMON_WZDISCACCESS_H_ #define _PROGRAMCOMMON_WZDISCACCESS_H_ #include "wzcriticalsection.h" #include "wzhandlemanager.h" //------------------------------------------------------------------------------ // Disc Àбâ/¾²±â ó¸® °ü·Ã // ÆÄÀÏ ÇÚµé typedef void* DA_FILE; #define INVALID_DA_FILE ( (void*)0xFFFFFFFF ) // Access ¹æ½Ä #define DA_READ ( 0x00000001 ) #define DA_WRITE ( 0x00000002 ) // Share ¸ðµå #define SM_READ ( 0x00000001 ) #define SM_WRITE ( 0x00000002 ) // ÆÄÀÏ ¼Ó¼º #define FA_READONLY ( 0x00000001 ) #define FA_DIRECTORY ( 0x00000002 ) // Open ¼ºÇâ enum ENUM_OPEN_DISPOSITION { OD_CREATE_ALWAYS = 0, // »õ ÆÄÀÏ·Î ¹«Á¶°Ç »ý¼º, ±âÁ¸ ÆÄÀÏ Á¸Àç½Ã »õ·Î »ý¼º OD_CREATE_NEW, // »õ ÆÄÀÏ »ý¼º, ±âÁ¸ ÆÄÀÏ Á¸Àç½Ã ½ÇÆÐ OD_OPEN_ALWAYS, // ¹«Á¶°Ç ¿¬´Ù, ÆÄÀÏ Á¸Àç ¾ÈÇÏ¸é »õ·Î »ý¼º OD_OPEN_EXISTING, // ÆÄÀÏ Á¸Àç½Ã ¿¬´Ù, ÆÄÀÏ Á¸Àç ¾ÈÇÏ¸é ½ÇÆÐ OD_TRUNCATE_EXISTING, // ±âÁ¸ ÆÄÀÏÀ» ºñ¿ì°í ¿¬´Ù, ÆÄÀÏ Á¸Àç ¾ÈÇÏ¸é ½ÇÆÐ }; // Seek File ±âÁØÁ¡ enum ENUM_SEEK_ORIGIN { SO_BEGIN = 0, // ÆÄÀÏ ½ÃÀÛ À§Ä¡ SO_CURRENT, // ÇöÀç À§Ä¡ SO_END, // ÆÄÀÏ ³¡ À§Ä¡ }; // ÆÄÀÏ Æ¯¼º struct St_FileInformation { DWORD m_dwFileAttributes; // ¼Ó¼º FILETIME m_ftLastWriteTime; // ¼öÁ¤ ³¯Â¥ DWORD m_dwFileSizeLow; // Size Low DWORD m_dwFileSizeHigh; // Size High }; // ±âŸ struct St_DAFileInfo { DWORD m_dwDisc; HANDLE m_handle; }; //------------------------------------------------------------------------------ // Hard disc & Packer ¿­±â °ü·Ã // Disc Index - OpenFile ¿¡¼­ dwDisc ·Î ³Ö¾îÁÙ °ª #define EDI_ACTIVE ( 0 ) // ÇöÀç Active ·Î ÁöÁ¤µÈ Disc ¸¦ »ç¿ë #define EDI_HDD_CURRENT_PATH ( 1 ) // HDD »óÀÇ ÇöÀç °æ·Î¸¦ Àеµ·Ï ±âº»ÀûÀ¸·Î »ý¼ºµÈ Disc #define EDI_USER ( 2 ) // ¿©±â¼­ ºÎÅÍ User °¡ ¼¼ÆÃÇÑ Disc #define MAX_EDI ( 31 ) // 31 ±îÁö °¡´É // OpenPacker ŸÀÔ enum ENUM_OPEN_PACKER_TYPE { OPT_READ = 0, // Àбâ OPT_WRITE, // ¾²±â OPT_READ_AND_WRITE // Àб⠾²±â ¸ðµÎ }; // Disc Á¾·ù enum ENUM_DISC_TYPE { DT_NONE = 0, DT_HARDDISK, DT_WZFILEPACKER, }; // Disc Á¤º¸ struct St_DADiscInfo { ENUM_DISC_TYPE m_eDiscType; // Disc Á¾·ù void* m_pPackerPtr; // Packer °´Ã¼ ENUM_OPEN_PACKER_TYPE m_eOpenPackerType; char m_lpszPath[MAX_PATH]; }; //------------------------------------------------------------------------------ /** @class CDiscAccess */ class CDiscAccess { public: // »ý¼ºÀÚ/¼Ò¸êÀÚ CDiscAccess( void ); ~CDiscAccess( void ); // »ý¼º/Á¦°Å BOOL Create( void ); void Destroy( void ); // Hard Disc ¿­±â BOOL OpenDisc_Hard( DWORD dwDisc, const char* lpszPath = NULL ); // Packer ¿­±â BOOL OpenDisc_Packer( DWORD dwDisc, const char* lpszPackName, const char* lpszPassword, ENUM_OPEN_PACKER_TYPE eOpt = OPT_READ ); // Disc ´Ý±â void CloseDisc( DWORD dwDisc ); // Ȱ¼º Disc ¼³Á¤ BOOL SetActiveDisc( DWORD dwDisc ); // Ȱ¼º Disc ¾ò±â DWORD GetActiveDisc( void ); // ÆÄÀÏ ¿­±â DA_FILE OpenFile( DWORD dwDisc, const char* lpszFileName, DWORD dwDesiredAccess, DWORD dwShareMode, ENUM_OPEN_DISPOSITION eOpenDisposition ); // ÆÄÀÏ ´Ý±â BOOL CloseFile( DA_FILE dfFile ); // ÆÄÀÏ Æ÷ÀÎÅÍ À̵¿ DWORD SeekFile( DA_FILE dfFile, LONG lOffset, ENUM_SEEK_ORIGIN eSeekOrigin ); // ÆÄÀÏ Àбâ DWORD ReadFile( DA_FILE dfFile, LPVOID lpBuffer, DWORD dwNumberOfBytesToRead ); // ÆÄÀÏ¿¡ ¾²±â DWORD WriteFile( DA_FILE dfFile, LPCVOID lpBuffer, DWORD dwNumberOfBytesToWrite ); // ÆÄÀÏÀÌ Á¸ÀçÇϴ°¡? BOOL FileExists( DWORD dwDisc, const char* lpFileName ); // ÆÄÀÏ Å©±â ¾ò±â DWORD GetFileSize( DA_FILE dfFile ); // ÆÄÀÏ Á¤º¸ ¾ò±â BOOL GetFileInformationByHandle( DA_FILE dfFile, St_FileInformation* lpFileInformation ); // ÆÄÀÏ º¹»ç BOOL CopyFile( DWORD dwDisc, const char* lpTargetPath, const char* lpSourcePathInHDD ); // ÆÄÀÏ Áö¿ì±â BOOL DeleteFile( DWORD dwDisc, const char* lpFileName ); // µð·ºÅ丮 »ý¼º BOOL CreateDirectory( DWORD dwDisc, const char* lpPathName ); // µð·ºÅ丮 Á¦°Å BOOL RemoveDirectory( DWORD dwDisc, const char* lpPathName ); private: // ÆÄÀÏ¸í ±³Á¤ void FixFileName( char* lpszResult, const char* lpszSource ); private: St_DADiscInfo m_DADiscInfo[MAX_EDI + 1]; DWORD m_dwActiveDisc; CWzHandleManager m_hmFileInfo; WzDeclare_Sync( DiscAccess ); }; #endif // _PROGRAMCOMMON_WZDISCACCESS_H_