13#include <detail/preprocessor.hpp>
14#include <detail/windows.inl>
28namespace msvc90_windows {
29class MicrosoftDiskFileDevice;
36class DLFileEnumeratorSPI;
38namespace DLFileConstants {
39enum file_openmode :
int {
42 READWRITE = READ | WRITE,
48enum file_result :
int {
57 OPERATION_UNSUPPORTED = -2,
66 LIBER_CLASS(DLFileDevice);
68 virtual ~DLFileDevice() =
default;
71 DLTX::DLString* path_dlstr,
const wchar_t* path_lpcwstr,
73 bool liber_unknown) = 0;
78 virtual int drive_type(
const wchar_t* path) {
84 virtual bool liber_unknown() {
89 mutable DLKR::DLPlainLightMutex mutex;
92class DLFileEnumeratorSPI {};
94class DLFileDeviceImageSPI {
96 virtual ~DLFileDeviceImageSPI() =
default;
101 LIBER_CLASS(DLFileOperator);
103 using filesys_time = std::pair<FILETIME, FD4::FD4PackedSystemTime>;
104 using read_size_type = uint32_t;
105 using file_size_type = uint64_t;
106 using file_difference_type = int64_t;
108 virtual ~DLFileOperator() =
default;
109 virtual bool copy_base(DLFileOperator* other) = 0;
110 virtual bool set_path(DLTX::DLString* new_path,
bool iostate_0x2) = 0;
114 virtual bool liber_unknown(DLTX::DLString* new_path,
bool iostate_0x2) = 0;
115 virtual bool liber_unknown(DLTX::DLString* new_path,
bool iostate_0x2) = 0;
116 virtual bool liber_unknown(DLTX::DLString* new_path,
bool iostate_0x2) = 0;
119 virtual bool close_file() = 0;
121 virtual DLFileDeviceImageSPI* bind_device_image(DLFileDeviceImageSPI*) = 0;
122 virtual bool populate_dir_info() = 0;
123 virtual bool populate_file_info() = 0;
124 virtual filesys_time get_last_access_time() = 0;
125 virtual filesys_time get_last_write_time() = 0;
126 virtual file_size_type get_file_size() = 0;
127 virtual file_difference_type get_remaining_size() = 0;
128 virtual int max_non_streamed_size() = 0;
129 virtual void truncate_file() = 0;
130 virtual bool has_file_control_0x4() = 0;
131 virtual bool is_directory() = 0;
132 virtual bool is_open() = 0;
133 virtual bool open_file(
int dlfile_openmode) = 0;
134 virtual bool try_close_file() = 0;
135 virtual bool set_control_unk(
bool unk) = 0;
136 virtual bool seek(
bool is_stream, file_difference_type pos,
137 int move_method) = 0;
138 virtual file_size_type get_cursor_pos() = 0;
139 virtual read_size_type read_file(
void* out, read_size_type cb) = 0;
140 virtual read_size_type write_file(
void* in, read_size_type cb) = 0;
141 virtual read_size_type get_sector_size() = 0;
142 virtual read_size_type get_virtual_sector_size() = 0;
143 virtual read_size_type stream_read_file(
void* out, read_size_type cb) = 0;
144 virtual read_size_type stream_write_file(
void* in, read_size_type cb) = 0;
145 virtual bool stream_complete_operation(HANDLE* event_handle_out,
146 read_size_type* cb_out) = 0;
147 virtual int get_file_creation_flags() = 0;
148 virtual bool delete_file() = 0;
149 virtual bool liber_unknown() = 0;
150 virtual bool populate_file_info_again() = 0;
151 virtual bool liber_unknown() = 0;
152 virtual bool move_file_w(
const wchar_t* new_path) = 0;
153 virtual bool move_file(
const char* new_path) = 0;
154 virtual bool create_directory() = 0;
158 DLFileConstants::file_result result;
166class DLBinder4FileDeviceImageSPI :
public DLFileDeviceImageSPI {
168 virtual ~DLBinder4FileDeviceImageSPI() =
default;
172 DLFileOperator* file_operator;
175class DLFileDeviceManager {
177 FD4_SINGLETON_CLASS(DLFileDeviceManager);
179 LIBERAPI
bool is_virtual_path(
const std::filesystem::path& path);
182 struct bnd_file_entry {
184 DLFileDevice* device;
190 DLIOD::msvc90_windows::MicrosoftDiskFileDevice* msvc_file_device;
194 DLFileDeviceImageSPI* bnd3_service_provider;
195 DLBinder4FileDeviceImageSPI* bnd4_service_provider;
196 mutable DLKR::DLPlainLightMutex mutex;
199LIBER_ASSERTS_BEGIN(DLFileDevice);
200LIBER_ASSERT_SIZE(0x40);
203LIBER_ASSERTS_BEGIN(DLFileOperator);
204LIBER_ASSERT_SIZE(0x60);
207LIBER_ASSERTS_BEGIN(DLFileDeviceManager);
208LIBER_ASSERT_SIZE(0xE8);
209LIBER_ASSERT_OFFS(0xB8, mutex);
215namespace msvc90_windows {
217class MicrosoftDiskFileDevice :
public DLIO::DLFileDevice {};
219class MicrosoftDiskFileOperator :
public DLIO::DLFileOperator {
221 LIBER_CLASS(MicrosoftDiskFileOperator);
223 virtual ~MicrosoftDiskFileOperator() =
default;
230 BY_HANDLE_FILE_INFORMATION file_info;
231 file_size_type cursor_pos;
232 OVERLAPPED overlapped;
237LIBER_ASSERTS_BEGIN(MicrosoftDiskFileOperator);
238LIBER_ASSERT_SIZE(0xD8);
239LIBER_ASSERT_OFFS(0x6C, file_info);
240LIBER_ASSERT_OFFS(0xA0, cursor_pos);
The main libER stand-in for ER allocator proxies.
Definition from_allocator.hpp:310
from::unique_ptr based on std::unique_ptr
std::unique_ptr< T, from::delay_delete< T, AllocatorTag > > unique_ptr
std::unique_ptr with from::allocator and from::delay_delete.
Definition from_unique_ptr.hpp:22
from::vector based on std::vector
std::vector< T, from::allocator< T, AllocatorTag > > vector
std::vector with from::allocator.
Definition from_vector.hpp:23
Dantelion2 kernel object management and synchronization.
FD4_SINGLETON_CLASS implementation.