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:308
from::unique_ptr based on std::unique_ptr
std::unique_ptr< T, from::delay_delete< T > > unique_ptr
std::unique_ptr with from::allocator and from::delay_delete.
Definition from_unique_ptr.hpp:21
from::vector based on std::vector
std::vector< T, from::allocator< T > > vector
std::vector with from::allocator.
Definition from_vector.hpp:23
Dantelion2 kernel object management and synchronization.
FD4_SINGLETON_CLASS implementation.