|
@@ -0,0 +1,361 @@
|
|
|
+/*
|
|
|
+ * wrappers.c
|
|
|
+ *
|
|
|
+ * Copyright (C) 2017 Aleksandar Andrejevic <theflash@sdf.lonestar.org>
|
|
|
+ *
|
|
|
+ * This program is free software: you can redistribute it and/or modify
|
|
|
+ * it under the terms of the GNU Affero General Public License as
|
|
|
+ * published by the Free Software Foundation, either version 3 of the
|
|
|
+ * License, or (at your option) any later version.
|
|
|
+ *
|
|
|
+ * This program is distributed in the hope that it will be useful,
|
|
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
+ * GNU Affero General Public License for more details.
|
|
|
+ *
|
|
|
+ * You should have received a copy of the GNU Affero General Public License
|
|
|
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
+ */
|
|
|
+
|
|
|
+#include <sdk/monolithium.h>
|
|
|
+
|
|
|
+sysret_t syscall_alloc_memory(handle_t process, void **address, size_t size, dword_t block_flags)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_ALLOC_MEMORY, process, address, size, block_flags);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_clock_get_time(clock_time_t *time)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_CLOCK_GET_TIME, time);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_clock_set_time(clock_time_t *time)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_CLOCK_SET_TIME, time);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_close_object(handle_t handle)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_CLOSE_OBJECT, handle);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_commit_memory(handle_t process, void *address, dword_t size)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_COMMIT_MEMORY, process, address, size);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_create_memory_section(const char *name, handle_t file, size_t size, dword_t flags, handle_t *handle)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_CREATE_MEMORY_SECTION, name, file, size, flags, handle);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_create_pipe(const char *name, handle_t *handle)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_CREATE_PIPE, name, handle);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_create_process(const char *path, dword_t flags, process_params_t *parameters, handle_t *process_handle, handle_t *thread_handle)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_CREATE_PROCESS, path, flags, parameters, process_handle, thread_handle);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_create_semaphore(const char *name, dword_t init_count, dword_t max_count, handle_t *handle)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_CREATE_SEMAPHORE, name, init_count, max_count, handle);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_create_thread(handle_t process, thread_state_t *initial_state, dword_t flags, priority_t priority, handle_t *new_thread)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_CREATE_THREAD, process, initial_state, flags, priority, new_thread);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_create_user(dword_t uid, const char *name, dword_t *password_hash, qword_t privileges)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_CREATE_USER, uid, name, password_hash, privileges);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_delete_file(const char *path)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_DELETE_FILE, path);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_delete_user(dword_t uid)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_DELETE_USER, uid);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_device_ioctl(handle_t device, dword_t control_code, const void *in_buffer, size_t in_length, void *out_buffer, size_t out_length)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_DEVICE_IOCTL, device, control_code, in_buffer, in_length, out_buffer, out_length);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_duplicate_handle(handle_t source_process, handle_t handle, handle_t dest_process, handle_t *duplicate)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_DUPLICATE_HANDLE, source_process, handle, dest_process, duplicate);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_enum_processes(dword_t *pid_array, dword_t *count)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_ENUM_PROCESSES, pid_array, count);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_flush_memory_section(handle_t process, void *address)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_FLUSH_MEMORY_SECTION, process, address);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_free_memory(handle_t process, void *address)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_FREE_MEMORY, process, address);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_freeze_thread(handle_t handle)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_FREEZE_THREAD, handle);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_get_exception_info(exception_info_t *info)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_GET_EXCEPTION_INFO, info);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_get_milliseconds(void)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_GET_MILLISECONDS);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_get_nanoseconds(void)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_GET_NANOSECONDS);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_get_process_id(void)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_GET_PROCESS_ID);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_get_thread_id(void)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_GET_THREAD_ID);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_get_user_id(void)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_GET_USER_ID);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_list_directory(handle_t handle, char *filename, bool_t continue_scan)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_LIST_DIRECTORY, handle, filename, continue_scan);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_logon_user(dword_t uid, const char *password)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_LOGON_USER, uid, password);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_map_memory_section(handle_t process, handle_t section, void **address, qword_t offset, size_t size, dword_t flags)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_MAP_MEMORY_SECTION, process, section, address, offset, size, flags);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_mount(const char *device, const char *mountpoint, const char *filesystem, dword_t flags)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_MOUNT, device, mountpoint, filesystem, flags);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_open_file(const char *path, handle_t *handle, dword_t mode, dword_t attributes)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_OPEN_FILE, path, handle, mode, attributes);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_open_memory_section(const char *name, handle_t *handle)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_OPEN_MEMORY_SECTION, name, handle);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_open_pipe(const char *name, handle_t *handle)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_OPEN_PIPE, name, handle);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_open_process(dword_t pid, handle_t *handle)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_OPEN_PROCESS, pid, handle);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_open_semaphore(const char *name, handle_t *handle)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_OPEN_SEMAPHORE, name, handle);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_open_thread(dword_t tid, handle_t *handle)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_OPEN_THREAD, tid, handle);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_power_control(power_command_t command)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_POWER_CONTROL, command);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_query_file(handle_t handle, file_info_type_t info_type, void *buffer, size_t size)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_QUERY_FILE, handle, info_type, buffer, size);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_query_handle(handle_t handle, handle_info_type_t type, void *buffer, size_t size)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_QUERY_HANDLE, handle, type, buffer, size);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_query_memory(handle_t process, void *address, memory_block_info_t *info)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_QUERY_MEMORY, process, address, info);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_query_process(handle_t handle, process_info_t info_type, void *buffer, dword_t size)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_QUERY_PROCESS, handle, info_type, buffer, size);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_query_thread(handle_t handle, thread_info_t info_type, void *buffer, size_t size)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_QUERY_THREAD, handle, info_type, buffer, size);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_query_user(dword_t uid, user_info_t info_type, void *buffer, dword_t size)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_QUERY_USER, uid, info_type, buffer, size);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_raise_exception(exception_info_t *info)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_RAISE_EXCEPTION, info);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_read_file(handle_t handle, void *buffer, qword_t offset, size_t size, size_t *bytes_read)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_READ_FILE, handle, buffer, offset, size, bytes_read);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_read_memory(handle_t process, void *address, void *buffer, dword_t size)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_READ_MEMORY, process, address, buffer, size);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_read_pipe(handle_t handle, void *buffer, dword_t size, dword_t timeout)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_READ_PIPE, handle, buffer, size, timeout);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_release_semaphore(handle_t semaphore, dword_t count)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_RELEASE_SEMAPHORE, semaphore, count);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_restore_exception_handler(exception_handler_t *old_handler)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_RESTORE_EXCEPTION_HANDLER, old_handler);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_revert_user(void)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_REVERT_USER);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_save_exception_handler(exception_handler_t *old_handler)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_SAVE_EXCEPTION_HANDLER, old_handler);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_set_file(handle_t handle, file_info_type_t set_type, void *buffer, size_t size)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_SET_FILE, handle, set_type, buffer, size);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_set_memory_flags(handle_t process, void *address, dword_t flags)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_SET_MEMORY_FLAGS, process, address, flags);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_set_thread(handle_t handle, thread_info_t info_type, const void *buffer, size_t size)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_SET_THREAD, handle, info_type, buffer, size);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_set_user_id(dword_t uid)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_SET_USER_ID, uid);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_sleep(qword_t milliseconds)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_SLEEP, milliseconds);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_terminate(handle_t handle, dword_t exit_code)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_TERMINATE, handle, exit_code);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_terminate_thread(handle_t thread, dword_t return_value)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_TERMINATE_THREAD, thread, return_value);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_thaw_thread(handle_t handle)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_THAW_THREAD, handle);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_uncommit_memory(handle_t process, void *address, dword_t size)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_UNCOMMIT_MEMORY, process, address, size);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_unmount(const char *device)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_UNMOUNT, device);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_wait_directory_event(handle_t handle, dword_t event_mask, file_event_t *buffer, size_t size, dword_t timeout)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_WAIT_DIRECTORY_EVENT, handle, event_mask, buffer, size, timeout);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_wait_process(handle_t handle, dword_t timeout)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_WAIT_PROCESS, handle, timeout);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_wait_semaphore(handle_t semaphore, dword_t count, dword_t timeout)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_WAIT_SEMAPHORE, semaphore, count, timeout);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_wait_thread(handle_t handle, dword_t timeout)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_WAIT_THREAD, handle, timeout);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_write_file(handle_t handle, const void *buffer, qword_t offset, size_t size, size_t *bytes_written)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_WRITE_FILE, handle, buffer, offset, size, bytes_written);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_write_memory(handle_t process, void *address, void *buffer, dword_t size)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_WRITE_MEMORY, process, address, buffer, size);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_write_pipe(handle_t handle, void *buffer, dword_t size)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_WRITE_PIPE, handle, buffer, size);
|
|
|
+}
|
|
|
+
|
|
|
+sysret_t syscall_yield_quantum(void)
|
|
|
+{
|
|
|
+ return syscall(SYSCALL_YIELD_QUANTUM);
|
|
|
+}
|
|
|
+
|