diff options
author | midipix <writeonce@midipix.org> | 2016-12-12 00:04:51 -0500 |
---|---|---|
committer | midipix <writeonce@midipix.org> | 2016-12-12 00:08:00 -0500 |
commit | cd5d5c3277aa300cac91d09ba02212c06e6b1218 (patch) | |
tree | aa27d6ad3f0b5879aa10b9ad976b6b52cc5efbdd /include | |
parent | 28d040d8c243d28e1f851bb80f1d5ba30d22fd3c (diff) | |
download | ntapi-cd5d5c3277aa300cac91d09ba02212c06e6b1218.tar.bz2 ntapi-cd5d5c3277aa300cac91d09ba02212c06e6b1218.tar.xz |
vmount module: removed current impl. of the virtual mount system client.
the current design of the virtual mount system turned out to be less
than ideal in terms of both simplicity and robustness. since its
importance seems to be rather marginal at the moment, it is better to
first remove it in its entirety, and then, given sufficient interest,
re-implement and integrate it into the system.
Diffstat (limited to 'include')
-rw-r--r-- | include/ntapi/nt_vmount.h | 329 | ||||
-rw-r--r-- | include/ntapi/ntapi.h | 14 |
2 files changed, 0 insertions, 343 deletions
diff --git a/include/ntapi/nt_vmount.h b/include/ntapi/nt_vmount.h deleted file mode 100644 index 5fcaab1..0000000 --- a/include/ntapi/nt_vmount.h +++ /dev/null @@ -1,329 +0,0 @@ -#ifndef _NT_VMOUNT_H_ -#define _NT_VMOUNT_H_ - -#include "nt_abi.h" -#include "nt_compiler.h" -#include "nt_port.h" -#include "nt_file.h" -#include "nt_statfs.h" -#include "nt_tty.h" - -/** - * vmount api: - * ----------- - * this header provides an api that can be used to - * implement a virtual mount system. note, however, - * that this library does not (and should not) - * provide the server-side implementation of the - * system, but only the client-side functionality. - * in the larger-scale midipix project, for - * instance, a session-wide virtual mount system - * is provided by the subsystem ntctty; if you - * are writing a free-standing midipix application, - * then you may either use the interfaces provided - * by ntctty, or roll your own. -**/ - - -/** virtual mount system: concepts - * ------------------------------ - * elements of the virtual mount system are exposed to the - * client in terms of offsets from the virtual mount system - * base address, rather than absolute pointers. when using - * a shared memory section, this allows each client to map - * the virtual mount system at an address that is independent - * of all other clients. most importantly, clients are only - * granted read-only access to the section, and it is hence - * impossible for a malformed client to trash the contents - * of the virtual mount system. - * - * to locate information regarding a particular mount point, - * the client traverses the virtual mount system using several - * numeric keys. - * - * the server_key member of the virtual mount system structure, - * in combination with the node-specific server keys, allow clients - * to efficiently use a single ref_counter server call at the end of - * the path resolution process. - * - * in the larger-scale midipix project, the above call fails only when - * a referenced mount point has in the meantime become invalid; in other - * words, the call shall succeed even if the queried mount point is - * no longer found at the top of the target directory stack. -**/ - - -typedef intptr_t nt_vms_offset; -typedef struct nt_vms_cache_interface * nt_vms_cache; - - -typedef struct _nt_vms_flags { - uint16_t rel_depth; - uint16_t attr; -} nt_vms_flags; - -typedef struct __attr_ptr_size_aligned__ _nt_vms_point { - intptr_t target; - intptr_t source; - nt_vms_offset parent; - nt_vms_offset prev; - nt_vms_offset next; - int32_t fstype; - nt_vms_flags flags; - nt_luid luid; - intptr_t ref_count; - intptr_t server_key; - int32_t stack_index; - int32_t status; - nt_fii fii; - uint32_t dev_name_hash; - uint16_t dev_name_strlen; - uint16_t dev_name_maxlen; - nt_vms_offset dev_name; - uint32_t end_component_hash; - uint16_t end_component_strlen; - uint16_t end_component_maxlen; - nt_vms_offset end_component; - uint32_t src_fstype_hash; - uint32_t src_attr; - uint32_t src_control_flags; - wchar16_t src_drive_letter; - wchar16_t src_padding; - nt_guid src_volume_guid; - nt_fii src_fii; - uint32_t src_dev_name_hash; - uint32_t reserved; -} nt_vms_point; - - -typedef struct _nt_vms_node { - nt_vms_offset prev; - nt_vms_offset next; - uint32_t end_component_hash; - uint32_t dev_name_hash; - nt_large_integer index_number; - nt_vms_offset stack; -} nt_vms_node; - - -typedef struct __attr_ptr_size_aligned__ _nt_vms_system { - intptr_t client_key; - intptr_t server_key; - void * hroot; - intptr_t vms_points_cap; - nt_vms_offset dev_name_head_node; /* dev_name_hash, fii.index_number */ - nt_vms_offset end_component_head_node; /* end_component_hash, dev_name_hash, fii.index_number */ -} nt_vms_system; - - -typedef enum _nt_vms_opcodes { - NT_VMS_CLIENT_OPCODE_BASE = 0x80000, - /* virtual mount system daemon opcodes */ - NT_VMS_CLIENT_CONNECT = NT_VMS_CLIENT_OPCODE_BASE, - NT_VMS_CLIENT_DISCONNECT, - NT_VMS_CLIENT_UNSHARE, - NT_VMS_CLIENT_CONFIG, - NT_VMS_POINT_ATTACH, - NT_VMS_POINT_DETACH, - NT_VMS_POINT_GET_HANDLES, - NT_VMS_POINT_GET_VOLINFO, - NT_VMS_REF_COUNT_INC, - NT_VMS_REF_COUNT_DEC, - NT_VMS_TABLE_QUERY, - NT_VMS_TABLE_CLONE, - /* client opcodes: exclusive upper limit */ - NT_VMS_CLIENT_OPCODE_CAP -} nt_vms_opcodes; - -typedef struct __attr_ptr_size_aligned__ _nt_vms_msg_info { - uintptr_t msg_id; - uint32_t opcode; - int32_t status; - uintptr_t msg_key; -} nt_vms_msg_info; - - -typedef struct __attr_ptr_size_aligned__ _nt_vms_daemon_info { - nt_guid daemon_guid; - uint32_t srv_pid; - uint32_t srv_tid; - uint32_t session; - uint32_t instance; - uint32_t ver_maj; - uint32_t ver_min; - uint32_t section_size; - uint32_t advisory_size; - uint32_t points_mounted; - uint32_t points_available; - void * section_handle; -} nt_vms_daemon_info; - - -/* attach/detach */ -typedef struct __attr_ptr_size_aligned__ _nt_vms_point_info { - nt_vms_point point; - nt_fii src_fii; - uint32_t src_dev_name_hash; - uint32_t src_flags; -} nt_vms_point_info; - - -/* inc/dec */ -typedef struct __attr_ptr_size_aligned__ _nt_vms_ref_count_info { - nt_vms_offset ref_point; - nt_luid luid; - intptr_t server_key; - intptr_t ref_count; - nt_fii fii; - uint32_t dev_name_hash; - int32_t stack_index; - void * hsource; - void * htarget; -} nt_vms_ref_count_info; - - -/* query/clone */ -typedef struct __attr_ptr_size_aligned__ _nt_vms_table_info { - intptr_t client_key; - intptr_t client_section_addr; - intptr_t client_section_size; - intptr_t reserved; -} nt_vms_table_info; - - -typedef struct __attr_ptr_size_aligned__ _nt_vms_daemon_msg { - nt_port_message header; - struct { - nt_vms_msg_info msginfo; - - union { - nt_vms_daemon_info vmsinfo; - nt_vms_point_info pointinfo; - nt_vms_ref_count_info refcntinfo; - }; - } data; -} nt_vms_daemon_msg; - - -typedef struct __attr_ptr_size_aligned__ _nt_vms_port_msg { - nt_port_message header; - nt_vms_msg_info msginfo; - - union { - nt_vms_daemon_info vmsinfo; - nt_vms_point_info pointinfo; - nt_vms_ref_count_info refcntinfo; - }; -} nt_vms_port_msg; - - -/* vms helper functions */ -typedef nt_vms_node * __stdcall ntapi_vms_get_end_component_first_node( - __in nt_vms_system * pvms_sys, - __in uint32_t end_component_hash); - - -typedef nt_vms_node * __stdcall ntapi_vms_get_node_by_dev_name( - __in nt_vms_system * pvms_sys, - __in uint32_t dev_name_hash, - __in nt_large_integer index_number); - - -typedef nt_vms_node * __stdcall ntapi_vms_get_node_by_end_component( - __in nt_vms_system * pvms_sys, - __in uint32_t end_component_hash, - __in uint32_t dev_name_hash, - __in nt_large_integer index_number); - - -typedef nt_vms_point * __stdcall ntapi_vms_get_top_of_stack_mount_point( - __in nt_vms_system * pvms_sys, - __in nt_vms_node * node); - - -/* vms optional cache functions */ -typedef nt_vms_cache __stdcall ntapi_vms_cache_alloc( - __in nt_vms_system * vms_sys, - __in uint32_t flags __reserved, - __in void * options __reserved, - __out int32_t * status __optional); - - -typedef int32_t __stdcall ntapi_vms_cache_free( - __in nt_vms_cache cache); - - -typedef int32_t __stdcall ntapi_vms_cache_record_append( - __in nt_vms_cache cache, - __in void * hfile, - __in uint32_t dev_name_hash, - __in nt_large_integer index_number, - __in intptr_t client_key, - __in intptr_t server_key); - - -typedef int32_t __stdcall ntapi_vms_cache_record_remove( - __in nt_vms_cache cache, - __in void * hfile); - - -/* vms server calls */ -typedef int32_t __stdcall ntapi_vms_client_connect( - __out void ** hvms, - __in nt_tty_vms_info * vmsinfo); - - -typedef int32_t __stdcall ntapi_vms_client_disconnect( - __in void * hvms); - - -typedef int32_t __stdcall ntapi_vms_client_unshare( - __in void * hvms, - __out nt_tty_vms_info * vmsinfo); - - -typedef int32_t __stdcall ntapi_vms_client_config( - __in void * hvms); - - -typedef int32_t __stdcall ntapi_vms_point_attach( - __in void * hvms, - __in nt_vms_point_info * point_info); - - -typedef int32_t __stdcall ntapi_vms_point_detach( - __in void * hvms, - __in nt_vms_ref_count_info * ref_cnt_info); - - -typedef int32_t __stdcall ntapi_vms_point_get_handles( - __in void * hvms, - __in nt_vms_ref_count_info * ref_cnt_info); - - -typedef int32_t __stdcall ntapi_vms_point_get_volinfo( - __in void * hvms, - __in nt_vms_point_info * point_info); - - -typedef int32_t __stdcall ntapi_vms_ref_count_inc( - __in void * hvms, - __in nt_vms_ref_count_info * ref_cnt_info); - - -typedef int32_t __stdcall ntapi_vms_ref_count_dec( - __in void * hvms, - __in nt_vms_ref_count_info * ref_cnt_info); - - -typedef int32_t __stdcall ntapi_vms_table_query( - __in void * hvms, - __in nt_vms_daemon_info * vms_info); - - -typedef int32_t __stdcall ntapi_vms_table_clone( - __in void * hvms, - __in nt_vms_daemon_info * vms_info); - - -#endif diff --git a/include/ntapi/ntapi.h b/include/ntapi/ntapi.h index d122db5..ea4f4b9 100644 --- a/include/ntapi/ntapi.h +++ b/include/ntapi/ntapi.h @@ -42,7 +42,6 @@ #include "nt_daemon.h" #include "nt_vfd.h" #include "nt_tty.h" -#include "nt_vmount.h" #include "nt_hash.h" #include "nt_debug.h" @@ -571,19 +570,6 @@ typedef struct _ntapi_vtbl { /* nt_statfs.h */ ntapi_tt_statfs * tt_statfs; - /* nt_vmount.h */ - ntapi_vms_get_node_by_dev_name * vms_get_node_by_dev_name; - ntapi_vms_get_node_by_end_component * vms_get_node_by_end_component; - ntapi_vms_cache_alloc * vms_cache_alloc; - ntapi_vms_cache_free * vms_cache_free; - ntapi_vms_client_connect * vms_client_connect; - ntapi_vms_client_disconnect * vms_client_disconnect; - ntapi_vms_point_attach * vms_point_attach; - ntapi_vms_point_get_handles * vms_point_get_handles; - ntapi_vms_ref_count_inc * vms_ref_count_inc; - ntapi_vms_ref_count_dec * vms_ref_count_dec; - ntapi_vms_table_query * vms_table_query; - /* nt_debug.h */ ntapi_dbg_write * dbg_write; ntapi_dbg_fn_call * dbg_fn_call; |