1baa3858d3f5d128a5c8466b700098109edcad5f2repo sync// Windows/FileIO.h 2baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 3baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#ifndef __WINDOWS_FILEIO_H 4baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define __WINDOWS_FILEIO_H 5baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 6baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "../Common/Types.h" 7baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 8baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "Defs.h" 9baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 10baa3858d3f5d128a5c8466b700098109edcad5f2repo syncnamespace NWindows { 11baa3858d3f5d128a5c8466b700098109edcad5f2repo syncnamespace NFile { 12baa3858d3f5d128a5c8466b700098109edcad5f2repo syncnamespace NIO { 13baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 14baa3858d3f5d128a5c8466b700098109edcad5f2repo syncstruct CByHandleFileInfo 15baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 16baa3858d3f5d128a5c8466b700098109edcad5f2repo sync DWORD Attrib; 17baa3858d3f5d128a5c8466b700098109edcad5f2repo sync FILETIME CTime; 18baa3858d3f5d128a5c8466b700098109edcad5f2repo sync FILETIME ATime; 19baa3858d3f5d128a5c8466b700098109edcad5f2repo sync FILETIME MTime; 20baa3858d3f5d128a5c8466b700098109edcad5f2repo sync DWORD VolumeSerialNumber; 21baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UInt64 Size; 22baa3858d3f5d128a5c8466b700098109edcad5f2repo sync DWORD NumberOfLinks; 23baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UInt64 FileIndex; 24baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}; 25baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 26baa3858d3f5d128a5c8466b700098109edcad5f2repo syncclass CFileBase 27baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 28baa3858d3f5d128a5c8466b700098109edcad5f2repo syncprotected: 29baa3858d3f5d128a5c8466b700098109edcad5f2repo sync HANDLE _handle; 30baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 31baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool Create(LPCTSTR fileName, DWORD desiredAccess, 32baa3858d3f5d128a5c8466b700098109edcad5f2repo sync DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes); 33baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #ifndef _UNICODE 34baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool Create(LPCWSTR fileName, DWORD desiredAccess, 35baa3858d3f5d128a5c8466b700098109edcad5f2repo sync DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes); 36baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #endif 37baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 38baa3858d3f5d128a5c8466b700098109edcad5f2repo syncpublic: 39baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #ifdef SUPPORT_DEVICE_FILE 40baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool IsDeviceFile; 41baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool LengthDefined; 42baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UInt64 Length; 43baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #endif 44baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 45baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CFileBase(): _handle(INVALID_HANDLE_VALUE) {}; 46baa3858d3f5d128a5c8466b700098109edcad5f2repo sync ~CFileBase(); 47baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 48baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool Close(); 49baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 50baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool GetPosition(UInt64 &position) const; 51baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool GetLength(UInt64 &length) const; 52baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 53baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool Seek(Int64 distanceToMove, DWORD moveMethod, UInt64 &newPosition) const; 54baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool Seek(UInt64 position, UInt64 &newPosition); 55baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool SeekToBegin(); 56baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool SeekToEnd(UInt64 &newPosition); 57baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 58baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool GetFileInformation(CByHandleFileInfo &fileInfo) const; 59baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}; 60baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 61baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define IOCTL_CDROM_BASE FILE_DEVICE_CD_ROM 62baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define IOCTL_CDROM_GET_DRIVE_GEOMETRY CTL_CODE(IOCTL_CDROM_BASE, 0x0013, METHOD_BUFFERED, FILE_READ_ACCESS) 63baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define IOCTL_CDROM_MEDIA_REMOVAL CTL_CODE(IOCTL_CDROM_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS) 64baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 65baa3858d3f5d128a5c8466b700098109edcad5f2repo syncclass CInFile: public CFileBase 66baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 67baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #ifdef SUPPORT_DEVICE_FILE 68baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool DeviceIoControl(DWORD controlCode, LPVOID inBuffer, DWORD inSize, 69baa3858d3f5d128a5c8466b700098109edcad5f2repo sync LPVOID outBuffer, DWORD outSize, LPDWORD bytesReturned, LPOVERLAPPED overlapped) const 70baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 71baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return BOOLToBool(::DeviceIoControl(_handle, controlCode, inBuffer, inSize, 72baa3858d3f5d128a5c8466b700098109edcad5f2repo sync outBuffer, outSize, bytesReturned, overlapped)); 73baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 74baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 75baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool DeviceIoControl(DWORD controlCode, LPVOID inBuffer, 76baa3858d3f5d128a5c8466b700098109edcad5f2repo sync DWORD inSize, LPVOID outBuffer, DWORD outSize) const 77baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 78baa3858d3f5d128a5c8466b700098109edcad5f2repo sync DWORD ret; 79baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return DeviceIoControl(controlCode, inBuffer, inSize, outBuffer, outSize, &ret, 0); 80baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 81baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 82baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool DeviceIoControlOut(DWORD controlCode, LPVOID outBuffer, DWORD outSize) const 83baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { return DeviceIoControl(controlCode, NULL, 0, outBuffer, outSize); } 84baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 85baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #ifndef UNDER_CE 86baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool GetGeometry(DISK_GEOMETRY *res) const 87baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { return DeviceIoControlOut(IOCTL_DISK_GET_DRIVE_GEOMETRY, res, sizeof(*res)); } 88baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 89baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool GetCdRomGeometry(DISK_GEOMETRY *res) const 90baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { return DeviceIoControlOut(IOCTL_CDROM_GET_DRIVE_GEOMETRY, res, sizeof(*res)); } 91baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 92baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool GetPartitionInfo(PARTITION_INFORMATION *res) 93baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { return DeviceIoControlOut(IOCTL_DISK_GET_PARTITION_INFO, LPVOID(res), sizeof(*res)); } 94baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #endif 95baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 96baa3858d3f5d128a5c8466b700098109edcad5f2repo sync void GetDeviceLength(); 97baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #endif 98baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 99baa3858d3f5d128a5c8466b700098109edcad5f2repo syncpublic: 100baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool Open(LPCTSTR fileName, DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes); 101baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool OpenShared(LPCTSTR fileName, bool shareForWrite); 102baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool Open(LPCTSTR fileName); 103baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #ifndef _UNICODE 104baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool Open(LPCWSTR fileName, DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes); 105baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool OpenShared(LPCWSTR fileName, bool shareForWrite); 106baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool Open(LPCWSTR fileName); 107baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #endif 108baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool Read1(void *data, UInt32 size, UInt32 &processedSize); 109baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool ReadPart(void *data, UInt32 size, UInt32 &processedSize); 110baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool Read(void *data, UInt32 size, UInt32 &processedSize); 111baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}; 112baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 113baa3858d3f5d128a5c8466b700098109edcad5f2repo syncclass COutFile: public CFileBase 114baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 115baa3858d3f5d128a5c8466b700098109edcad5f2repo syncpublic: 116baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool Open(LPCTSTR fileName, DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes); 117baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool Open(LPCTSTR fileName, DWORD creationDisposition); 118baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool Create(LPCTSTR fileName, bool createAlways); 119baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 120baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #ifndef _UNICODE 121baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool Open(LPCWSTR fileName, DWORD shareMode, DWORD creationDisposition, DWORD flagsAndAttributes); 122baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool Open(LPCWSTR fileName, DWORD creationDisposition); 123baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool Create(LPCWSTR fileName, bool createAlways); 124baa3858d3f5d128a5c8466b700098109edcad5f2repo sync #endif 125baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 126baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool SetTime(const FILETIME *cTime, const FILETIME *aTime, const FILETIME *mTime); 127baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool SetMTime(const FILETIME *mTime); 128baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool WritePart(const void *data, UInt32 size, UInt32 &processedSize); 129baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool Write(const void *data, UInt32 size, UInt32 &processedSize); 130baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool SetEndOfFile(); 131baa3858d3f5d128a5c8466b700098109edcad5f2repo sync bool SetLength(UInt64 length); 132baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}; 133baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 134baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}}} 135baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 136baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#endif 137