summaryrefslogtreecommitdiffhomepage
path: root/include/ntapi/nt_sync.h
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2015-07-27 04:01:18 -0400
committermidipix <writeonce@midipix.org>2015-07-27 04:01:18 -0400
commitdd89bb8ad4fe184a34b5dbdda237e640fc82121b (patch)
tree5e80d2da35f5892f92be29f57982b2708e6bd99b /include/ntapi/nt_sync.h
parentdcdadc2702712fa750ed255ed1dfa354522797a0 (diff)
downloadntapi-dd89bb8ad4fe184a34b5dbdda237e640fc82121b.tar.bz2
ntapi-dd89bb8ad4fe184a34b5dbdda237e640fc82121b.tar.xz
entered advanced internal development stage.
Diffstat (limited to 'include/ntapi/nt_sync.h')
-rw-r--r--include/ntapi/nt_sync.h428
1 files changed, 428 insertions, 0 deletions
diff --git a/include/ntapi/nt_sync.h b/include/ntapi/nt_sync.h
new file mode 100644
index 0000000..ecf5f0c
--- /dev/null
+++ b/include/ntapi/nt_sync.h
@@ -0,0 +1,428 @@
+#ifndef _NT_SYNC_H_
+#define _NT_SYNC_H_
+
+#include <psxtypes/psxtypes.h>
+#include "nt_object.h"
+
+typedef enum _nt_wait_type {
+ NT_WAIT_ALL,
+ NT_WAIT_ANY
+} nt_wait_type;
+
+
+typedef enum _nt_timer_type {
+ NT_NOTIFICATION_TIMER,
+ NT_SYNCHRONIZATION_TIMER
+} nt_timer_type;
+
+
+typedef enum _nt_timer_info_class {
+ NT_TIMER_BASIC_INFORMATION
+} nt_timer_info_class;
+
+
+typedef enum _nt_event_type {
+ NT_NOTIFICATION_EVENT,
+ NT_SYNCHRONIZATION_EVENT
+} nt_event_type;
+
+
+typedef enum _nt_event_states {
+ NT_EVENT_NOT_SIGNALED,
+ NT_EVENT_SIGNALED
+} nt_event_states;
+
+
+typedef enum _nt_event_info_class {
+ NT_EVENT_BASIC_INFORMATION
+} nt_event_info_class;
+
+
+typedef enum _nt_semaphore_info_class {
+ NT_SEMAPHORE_BASIC_INFORMATION
+} nt_semaphore_info_class;
+
+
+typedef enum _nt_mutant_info_class {
+ NT_MUTANT_BASIC_INFORMATION
+} nt_mutant_info_class;
+
+
+typedef enum _nt_io_completion_info_class {
+ NT_IO_COMPLETION_BASIC_INFORMATION
+} nt_io_completion_info_class;
+
+
+/* cache block size */
+#define NT_SYNC_BLOCK_SIZE 64
+
+/* timer access bits */
+#define NT_TIMER_QUERY_STATE 0x00000001U
+#define NT_TIMER_MODIFY_STATE 0x00000002U
+#define NT_TIMER_ALL_ACCESS 0x001F0003U
+
+
+/* event access bits */
+#define NT_EVENT_QUERY_STATE 0x00000001U
+#define NT_EVENT_MODIFY_STATE 0x00000002U
+#define NT_EVENT_ALL_ACCESS 0x001F0003U
+
+
+/* semaphore access bits */
+#define NT_SEMAPHORE_QUERY_STATE 0x00000001U
+#define NT_SEMAPHORE_MODIFY_STATE 0x00000002U
+#define NT_SEMAPHORE_ALL_ACCESS 0x001F0003U
+
+
+/* mutant access bits */
+#define NT_MUTANT_QUERY_STATE 0x00000001U
+#define NT_MUTANT_ALL_ACCESS 0x001F0001U
+
+
+/* io completion access bits */
+#define NT_IO_COMPLETION_QUERY_STATE 0x00000001U
+#define NT_IO_COMPLETION_MODIFY_STATE 0x00000002U
+#define NT_IO_COMPLETION_ALL_ACCESS 0x001F0003U
+
+/* alertable threads */
+#define NT_SYNC_NON_ALERTABLE 0x00000000U
+#define NT_SYNC_ALERTABLE 0x00000001U
+
+/* sync block flag bits */
+#define NT_SYNC_BLOCK_YIELD_TO_SERVER 0x00000001U
+
+typedef struct _nt_timer_basic_information {
+ nt_large_integer timer_remaining;
+ int32_t signal_state;
+} nt_timer_basic_information;
+
+
+typedef struct _nt_event_basic_information {
+ nt_event_type event_type;
+ int32_t signal_state;
+} nt_event_basic_information, nt_ebi;
+
+
+typedef struct _nt_semaphore_basic_information {
+ int32_t current_count;
+ int32_t max_count;
+} nt_semaphore_basic_information;
+
+
+typedef struct _nt_mutant_basic_information {
+ int32_t signal_state;
+ int32_t owned;
+ int32_t abandoned;
+} nt_mutant_basic_information;
+
+
+typedef struct _nt_io_completion_basic_information {
+ int32_t signal_state;
+} nt_io_completion_basic_information;
+
+
+typedef union __attr_aligned__(NT_SYNC_BLOCK_SIZE) _nt_sync_block {
+ char cache_line[NT_SYNC_BLOCK_SIZE];
+ struct {
+ int32_t tid;
+ int32_t pid;
+ uint32_t flags;
+ uint32_t srvtid;
+ uint32_t lock_tries;
+ uint32_t ref_cnt;
+ uint32_t busy;
+ int32_t invalid;
+ nt_timeout lock_wait;
+ void * hwait;
+ void * hsignal;
+ void * hserver;
+ };
+} nt_sync_block;
+
+
+typedef void __stdcall nt_timer_apc_routine(
+ void * timer_context,
+ uint32_t timer_low_value,
+ uint32_t timer_high_value);
+
+
+typedef int32_t __stdcall ntapi_zw_wait_for_single_object(
+ __in void * handle,
+ __in int32_t alertable,
+ __in nt_large_integer * timeout __optional);
+
+
+typedef int32_t __stdcall ntapi_zw_signal_and_wait_for_single_object(
+ __in void * handle_to_signal,
+ __in void * handle_to_wait,
+ __in int32_t alertable,
+ __in nt_large_integer * timeout __optional);
+
+
+typedef int32_t __stdcall ntapi_zw_wait_for_multiple_objects(
+ __in uint32_t handle_count,
+ __in void ** handles,
+ __in nt_wait_type wait_type,
+ __in int32_t alertable,
+ __in nt_large_integer * timeout __optional);
+
+
+typedef int32_t __stdcall ntapi_zw_create_timer(
+ __out void ** htimer,
+ __in uint32_t desired_access,
+ __in nt_object_attributes * obj_attr,
+ __in nt_timer_type timer_type);
+
+
+typedef int32_t __stdcall ntapi_zw_open_timer(
+ __out void ** htimer,
+ __in uint32_t desired_access,
+ __in nt_object_attributes * obj_attr);
+
+
+typedef int32_t __stdcall ntapi_zw_cancel_timer(
+ __in void * htimer,
+ __out int32_t * previous_state __optional);
+
+
+typedef int32_t __stdcall ntapi_zw_set_timer(
+ __in void * htimer,
+ __in nt_large_integer * due_time,
+ __in nt_timer_apc_routine * timer_apc_routine __optional,
+ __in void * timer_context,
+ __in int32_t resume,
+ __in int32_t period,
+ __out int32_t * previous_state __optional);
+
+
+typedef int32_t __stdcall ntapi_zw_query_timer(
+ __in void * htimer,
+ __in nt_timer_info_class timer_info_class,
+ __out void * timer_info,
+ __in size_t timer_info_length,
+ __out size_t * returned_length __optional);
+
+
+typedef int32_t __stdcall ntapi_zw_create_event(
+ __out void ** hevent,
+ __in uint32_t desired_access,
+ __in nt_object_attributes * obj_attr,
+ __in nt_event_type event_type,
+ __in int32_t initial_state);
+
+
+typedef int32_t __stdcall ntapi_zw_open_event(
+ __out void ** hevent,
+ __in uint32_t desired_access,
+ __in nt_object_attributes * obj_attr);
+
+
+typedef int32_t __stdcall ntapi_zw_set_event(
+ __in void * hevent,
+ __out int32_t * previous_state);
+
+
+typedef int32_t __stdcall ntapi_zw_pulse_event(
+ __in void * hevent,
+ __out int32_t * previous_state);
+
+
+typedef int32_t __stdcall ntapi_zw_reset_event(
+ __in void * hevent,
+ __out int32_t * previous_state);
+
+
+typedef int32_t __stdcall ntapi_zw_clear_event(
+ __in void * hevent);
+
+
+typedef int32_t __stdcall ntapi_zw_query_event(
+ __in void * hevent,
+ __in nt_event_info_class event_info_class,
+ __out void * event_info,
+ __in size_t event_info_length,
+ __out size_t * returned_length __optional);
+
+
+typedef int32_t __stdcall ntapi_zw_create_semaphore(
+ __out void ** hsemaphore,
+ __in uint32_t desired_access,
+ __in nt_object_attributes * obj_attr,
+ __in int32_t initial_count,
+ __in int32_t max_count);
+
+
+typedef int32_t __stdcall ntapi_zw_open_semaphore(
+ __out void ** hsemaphore,
+ __in uint32_t desired_access,
+ __in nt_object_attributes * obj_attr);
+
+
+typedef int32_t __stdcall ntapi_zw_release_semaphore(
+ __in void * hsemaphore,
+ __in int32_t release_count,
+ __out int32_t * previous_count);
+
+
+typedef int32_t __stdcall ntapi_zw_query_semaphore(
+ __in void * hsemaphore,
+ __in nt_semaphore_info_class semaphore_info_class,
+ __out void * semaphore_info,
+ __in size_t semaphore_info_length,
+ __out size_t * returned_length __optional);
+
+
+typedef int32_t __stdcall ntapi_zw_create_mutant(
+ __out void ** hmutant,
+ __in uint32_t desired_access,
+ __in nt_object_attributes * obj_attr,
+ __in int32_t initial_owner);
+
+
+typedef int32_t __stdcall ntapi_zw_open_mutant(
+ __out void ** hmutant,
+ __in uint32_t desired_access,
+ __in nt_object_attributes * obj_attr);
+
+
+typedef int32_t __stdcall ntapi_zw_release_mutant(
+ __in void * hmutant,
+ __out int32_t * previous_state);
+
+
+typedef int32_t __stdcall ntapi_zw_query_mutant(
+ __in void * hmutant,
+ __in nt_mutant_info_class mutant_info_class,
+ __out void * mutant_info,
+ __in size_t mutant_info_length,
+ __out size_t * returned_length __optional);
+
+
+typedef int32_t __stdcall ntapi_zw_create_io_completion(
+ __out void ** hio_completion,
+ __in uint32_t desired_access,
+ __in nt_object_attributes * obj_attr,
+ __in uint32_t max_concurrent_threads);
+
+
+typedef int32_t __stdcall ntapi_zw_open_io_completion(
+ __out void ** hio_completion,
+ __in uint32_t desired_access,
+ __in nt_object_attributes * obj_attr);
+
+
+typedef int32_t __stdcall ntapi_zw_set_io_completion(
+ __in void * hio_completion,
+ __in uint32_t completion_key,
+ __in uint32_t completion_value,
+ __in int32_t status,
+ __in uint32_t information);
+
+
+typedef int32_t __stdcall ntapi_zw_remove_io_completion(
+ __in void * hio_completion,
+ __out uint32_t * completion_key,
+ __out uint32_t * completion_value,
+ __out nt_io_status_block * io_status_block,
+ __in nt_large_integer * timeout);
+
+
+typedef int32_t __stdcall ntapi_zw_query_io_completion(
+ __in void * hio_completion,
+ __in nt_io_completion_info_class io_completion_info_class,
+ __out void * io_completion_info,
+ __in size_t io_completion_info_length,
+ __out size_t * returned_length __optional);
+
+
+typedef int32_t __stdcall ntapi_zw_create_event_pair(
+ __out void ** hevent_pair,
+ __in uint32_t desired_access,
+ __in nt_object_attributes * obj_attr);
+
+
+typedef int32_t __stdcall ntapi_zw_open_event_pair(
+ __out void ** hevent_pair,
+ __in uint32_t desired_access,
+ __in nt_object_attributes * obj_attr);
+
+
+typedef int32_t __stdcall ntapi_zw_wait_low_event_pair(
+ __in void * hevent_pair);
+
+
+typedef int32_t __stdcall ntapi_zw_set_low_event_pair(
+ __in void * hevent_pair);
+
+
+typedef int32_t __stdcall ntapi_zw_wait_high_event_pair(
+ __in void * hevent_pair);
+
+
+typedef int32_t __stdcall ntapi_zw_set_high_event_pair(
+ __in void * hevent_pair);
+
+
+typedef int32_t __stdcall ntapi_zw_set_low_wait_high_event_pair(
+ __in void * hevent_pair);
+
+
+typedef int32_t __stdcall ntapi_zw_set_high_wait_low_event_pair(
+ __in void * hevent_pair);
+
+
+/* extensions */
+typedef int32_t __stdcall ntapi_tt_create_inheritable_event(
+ __out void ** hevent,
+ __in nt_event_type event_type,
+ __in int32_t initial_state);
+
+
+typedef int32_t __stdcall ntapi_tt_create_private_event(
+ __out void ** hevent,
+ __in nt_event_type event_type,
+ __in int32_t initial_state);
+
+
+typedef void __stdcall ntapi_tt_sync_block_init(
+ __in nt_sync_block * sync_block,
+ __in uint32_t flags __optional,
+ __in int32_t srvtid __optional,
+ __in int32_t default_lock_tries __optional,
+ __in int64_t default_lock_wait __optional,
+ __in void * hsignal __optional);
+
+
+typedef int32_t __stdcall ntapi_tt_sync_block_lock(
+ __in nt_sync_block * sync_block,
+ __in int32_t lock_tries __optional,
+ __in int64_t lock_wait __optional,
+ __in uint32_t * sig_flag __optional);
+
+
+typedef int32_t __stdcall ntapi_tt_sync_block_server_lock(
+ __in nt_sync_block * sync_block,
+ __in int32_t lock_tries __optional,
+ __in int64_t lock_wait __optional,
+ __in uint32_t * sig_flag __optional);
+
+
+typedef int32_t __stdcall ntapi_tt_sync_block_unlock(
+ __in nt_sync_block * sync_block);
+
+
+typedef void __stdcall ntapi_tt_sync_block_validate(
+ __in nt_sync_block * sync_block);
+
+
+typedef int32_t __stdcall ntapi_tt_sync_block_invalidate(
+ __in nt_sync_block * sync_block);
+
+
+typedef int32_t __stdcall ntapi_tt_sync_block_discard(
+ __in nt_sync_block * sync_block);
+
+
+typedef int32_t __stdcall ntapi_tt_wait_for_dummy_event(void);
+
+#endif