#ifndef _NT_MOUNT_H_ #define _NT_MOUNT_H_ #include "nt_abi.h" #include "nt_ioctl.h" #include "nt_statfs.h" /* hash mark */ /* {'\\','D','e','v','i','c','e','\\'} */ #define __DEVICE_PATH_PREFIX_LEN (8 * sizeof(wchar16_t)) #define __DEVICE_PATH_PREFIX_HASH (0xDA6FA40B) /* {'\\','D','e','v','i','c','e','\\','M','u','p','\\'} */ #define __DEVICE_MUP_PREFIX_LEN (12 * sizeof(wchar16_t)) #define __DEVICE_MUP_PREFIX_HASH (0x0CEBB5F6) /* {'\\','?','?','\\','V','o','l','u','m','e','{'} */ #define __VOLUME_PATH_PREFIX_LEN (11 * sizeof(wchar16_t)) #define __VOLUME_PATH_PREFIX_HASH (0xFEBA8529) /* {'\\','D','o','s','D','e','v','i','c','e','s'} */ #define __DOS_DEVICES_PREFIX_LEN (11 * sizeof(wchar16_t)) #define __DOS_DEVICES_PREFIX_HASH (0x565D0514) typedef enum _nt_mount_moint_type { NT_MOUNT_POINT_NONE, NT_MOUNT_POINT_DEVICE, NT_MOUNT_POINT_VOLUME, NT_MOUNT_POINT_DIRECTORY } nt_mount_moint_type; /* reparse tag values */ #define NT_IO_REPARSE_TAG_RESERVED_ZERO (0x00000000) #define NT_IO_REPARSE_TAG_RESERVED_ONE (0x00000001) #define NT_IO_REPARSE_TAG_MOUNT_POINT (0xA0000003) #define NT_IO_REPARSE_TAG_HSM (0xC0000004) #define NT_IO_REPARSE_TAG_HSM2 (0x80000006) #define NT_IO_REPARSE_TAG_DRIVER_EXTENDER (0x80000005) #define NT_IO_REPARSE_TAG_SIS (0x80000007) #define NT_IO_REPARSE_TAG_DFS (0x8000000A) #define NT_IO_REPARSE_TAG_DFSR (0x80000012) #define NT_IO_REPARSE_TAG_FILTER_MANAGER (0x8000000B) #define NT_IO_REPARSE_TAG_SYMLINK (0xA000000C) typedef struct _nt_mount_dev_name { uint16_t name_length; wchar16_t name[]; } nt_mount_dev_name; typedef struct _nt_mount_mgr_mount_point { uint32_t symlink_name_offset; uint16_t symlink_name_length; uint32_t unique_id_offset; uint16_t unique_id_length; uint32_t device_name_offset; uint16_t device_name_length; } nt_mount_mgr_mount_point, nt_mount_point; typedef struct _nt_mount_mgr_mount_point_param { uint32_t symlink_name_offset; uint16_t symlink_name_length; uint32_t unique_id_offset; uint16_t unique_id_length; uint32_t device_name_offset; uint16_t device_name_length; uint16_t mount_points_offset; wchar16_t device_name[]; } nt_mount_mgr_mount_point_param, nt_mount_point_param; typedef struct _nt_mount_mgr_mount_points { uint32_t size; uint32_t number; nt_mount_mgr_mount_point mount_points[]; } nt_mount_mgr_mount_points, nt_mount_points; typedef struct _nt_mount_point_reparse_buffer { uint32_t reparse_tag; uint16_t reparse_data_length; uint16_t reserved; uint16_t substitute_name_offset; uint16_t substitute_name_length; uint16_t print_name_offset; uint16_t print_name_length; uintptr_t path_buffer[]; } nt_mount_point_reparse_buffer, nt_mprb; typedef struct _nt_dos_devices_name { wchar16_t dos_devices_prefix[11]; wchar16_t slash; wchar16_t letter; wchar16_t colon; } nt_dos_devices_name; typedef int32_t __stdcall ntapi_tt_get_dos_drive_device_handle( __out void ** hdevice, __in wchar16_t drive_letter); typedef int32_t __stdcall ntapi_tt_get_dos_drive_root_handle( __out void ** hroot, __in wchar16_t drive_letter); typedef int32_t __stdcall ntapi_tt_get_dos_drive_device_name( __in void * hdevice __optional, __in wchar16_t drive_letter __optional, __out nt_mount_dev_name * buffer, __in uint32_t buffer_size); typedef int32_t __stdcall ntapi_tt_get_dos_drive_mount_points( __in void * hdevice __optional, __in wchar16_t drive_letter __optional, __in nt_mount_dev_name * dev_name __optional, __out void * buffer, __in uint32_t buffer_size); typedef int32_t __stdcall ntapi_tt_dev_mount_points_to_statfs( __in nt_mount_points * mount_points, __in_out nt_statfs * statfs); typedef int32_t __stdcall ntapi_tt_get_dos_drive_letter_from_device( __in void * hdevice __optional, __out wchar16_t * drive_letter, __in nt_mount_dev_name * dev_name __optional, __out void * buffer, __in uint32_t buffer_size); #endif