summaryrefslogtreecommitdiffhomepage
path: root/include/ntapi/ntapi.h
blob: 528ab6920d1f016aff4a38a8c1eac5624e082c14 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
#ifndef _NTAPI_H_
#define _NTAPI_H_

#include "nt_api.h"
#include "nt_compiler.h"
#include "nt_status.h"
#include "nt_crc32.h"
#include "nt_crc64.h"
#include "nt_object.h"
#include "nt_sysinfo.h"
#include "nt_memory.h"
#include "nt_section.h"
#include "nt_thread.h"
#include "nt_process.h"
#include "nt_job.h"
#include "nt_token.h"
#include "nt_sync.h"
#include "nt_time.h"
#include "nt_profiling.h"
#include "nt_port.h"
#include "nt_device.h"
#include "nt_file.h"
#include "nt_registry.h"
#include "nt_security.h"
#include "nt_pnp.h"
#include "nt_exception.h"
#include "nt_locale.h"
#include "nt_uuid.h"
#include "nt_atom.h"
#include "nt_os.h"
#include "nt_ipc.h"
#include "nt_ldr.h"
#include "nt_string.h"
#include "nt_guid.h"
#include "nt_argv.h"
#include "nt_blitter.h"
#include "nt_unicode.h"
#include "nt_socket.h"
#include "nt_mount.h"
#include "nt_istat.h"
#include "nt_stat.h"
#include "nt_statfs.h"
#include "nt_daemon.h"
#include "nt_sem.h"
#include "nt_vfd.h"
#include "nt_tty.h"
#include "nt_hash.h"
#include "nt_debug.h"


#ifdef __cplusplus
extern "C" {
#endif


typedef struct _ntapi_vtbl {
	/* imported symbols: head */
	/* nt_object.h */
	ntapi_zw_query_object *				zw_query_object;
	ntapi_zw_set_information_object *		zw_set_information_object;
	ntapi_zw_duplicate_object *			zw_duplicate_object;
	ntapi_zw_make_temporary_object *		zw_make_temporary_object;
	ntapi_zw_close *				zw_close;
	ntapi_zw_query_security_object *		zw_query_security_object;
	ntapi_zw_set_security_object *			zw_set_security_object;
	ntapi_zw_create_directory_object *		zw_create_directory_object;
	ntapi_zw_open_directory_object *		zw_open_directory_object;
	ntapi_zw_query_directory_object *		zw_query_directory_object;
	ntapi_zw_create_symbolic_link_object *		zw_create_symbolic_link_object;
	ntapi_zw_open_symbolic_link_object *		zw_open_symbolic_link_object;
	ntapi_zw_query_symbolic_link_object *		zw_query_symbolic_link_object;

	/* nt_sysinfo.h */
	ntapi_zw_query_system_information *		zw_query_system_information;
	ntapi_zw_set_system_information *		zw_set_system_information;
	ntapi_zw_query_system_environment_value *	zw_query_system_environment_value;
	ntapi_zw_set_system_environment_value *		zw_set_system_environment_value;
	ntapi_zw_shutdown_system *			zw_shutdown_system;
	ntapi_zw_system_debug_control *			zw_system_debug_control;

	/* nt_memory.h */
	ntapi_zw_allocate_virtual_memory *		zw_allocate_virtual_memory;
	ntapi_zw_free_virtual_memory *			zw_free_virtual_memory;
	ntapi_zw_query_virtual_memory *			zw_query_virtual_memory;
	ntapi_zw_protect_virtual_memory *		zw_protect_virtual_memory;
	ntapi_zw_read_virtual_memory *			zw_read_virtual_memory;
	ntapi_zw_write_virtual_memory *			zw_write_virtual_memory;
	ntapi_zw_lock_virtual_memory *			zw_lock_virtual_memory;
	ntapi_zw_unlock_virtual_memory *		zw_unlock_virtual_memory;
	ntapi_zw_flush_virtual_memory *			zw_flush_virtual_memory;
	ntapi_zw_allocate_user_physical_pages *		zw_allocate_user_physical_pages;
	ntapi_zw_free_user_physical_pages *		zw_free_user_physical_pages;
	ntapi_zw_map_user_physical_pages *		zw_map_user_physical_pages;
	ntapi_zw_get_write_watch *			zw_get_write_watch;
	ntapi_zw_reset_write_watch *			zw_reset_write_watch;

	/* nt_section.h */
	ntapi_zw_create_section *			zw_create_section;
	ntapi_zw_open_section *				zw_open_section;
	ntapi_zw_query_section *			zw_query_section;
	ntapi_zw_extend_section *			zw_extend_section;
	ntapi_zw_map_view_of_section *			zw_map_view_of_section;
	ntapi_zw_unmap_view_of_section *		zw_unmap_view_of_section;
	ntapi_zw_are_mapped_files_the_same *		zw_are_mapped_files_the_same;

	/* nt_thread.h */
	ntapi_zw_create_thread *			zw_create_thread;
	ntapi_zw_open_thread *				zw_open_thread;
	ntapi_zw_terminate_thread *			zw_terminate_thread;
	ntapi_zw_query_information_thread *		zw_query_information_thread;
	ntapi_zw_set_information_thread *		zw_set_information_thread;
	ntapi_zw_suspend_thread *			zw_suspend_thread;
	ntapi_zw_resume_thread *			zw_resume_thread;
	ntapi_zw_get_context_thread *			zw_get_context_thread;
	ntapi_zw_set_context_thread *			zw_set_context_thread;
	ntapi_zw_queue_apc_thread *			zw_queue_apc_thread;
	ntapi_zw_test_alert *				zw_test_alert;
	ntapi_zw_alert_thread *				zw_alert_thread;
	ntapi_zw_alert_resume_thread *			zw_alert_resume_thread;
	ntapi_zw_register_thread_terminate_port *	zw_register_thread_terminate_port;
	ntapi_zw_impersonate_thread *			zw_impersonate_thread;
	ntapi_zw_impersonate_anonymous_token *		zw_impersonate_anonymous_token;

	/* nt_process.h */
	ntapi_zw_create_process *			zw_create_process;
	ntapi_zw_create_user_process *			zw_create_user_process;
	ntapi_zw_open_process *				zw_open_process;
	ntapi_zw_terminate_process *			zw_terminate_process;
	ntapi_zw_query_information_process *		zw_query_information_process;
	ntapi_zw_set_information_process *		zw_set_information_process;
	ntapi_zw_flush_instruction_cache *		zw_flush_instruction_cache;
	ntapi_rtl_create_process_parameters *		rtl_create_process_parameters;
	ntapi_rtl_destroy_process_parameters *		rtl_destroy_process_parameters;
	ntapi_rtl_normalize_process_params *		rtl_normalize_process_params;
	ntapi_rtl_create_query_debug_buffer *		rtl_create_query_debug_buffer;
	ntapi_rtl_destroy_query_debug_buffer *		rtl_destroy_query_debug_buffer;
	ntapi_rtl_query_process_debug_information *	rtl_query_process_debug_information;

	/* nt_job.h */
	ntapi_zw_create_job_object *			zw_create_job_object;
	ntapi_zw_open_job_object *			zw_open_job_object;
	ntapi_zw_terminate_job_object *			zw_terminate_job_object;
	ntapi_zw_assign_process_to_job_object *		zw_assign_process_to_job_object;
	ntapi_zw_query_information_job_object *		zw_query_information_job_object;
	ntapi_zw_set_information_job_object *		zw_set_information_job_object;

	/* nt_token.h */
	ntapi_zw_create_token *				zw_create_token;
	ntapi_zw_open_process_token *			zw_open_process_token;
	ntapi_zw_open_thread_token *			zw_open_thread_token;
	ntapi_zw_duplicate_token *			zw_duplicate_token;
	ntapi_zw_filter_token *				zw_filter_token;
	ntapi_zw_adjust_privileges_token *		zw_adjust_privileges_token;
	ntapi_zw_adjust_groups_token *			zw_adjust_groups_token;
	ntapi_zw_query_information_token *		zw_query_information_token;
	ntapi_zw_set_information_token *		zw_set_information_token;

	/* nt_sync.h */
	ntapi_zw_wait_for_single_object *		zw_wait_for_single_object;
	ntapi_zw_signal_and_wait_for_single_object *	zw_signal_and_wait_for_single_object;
	ntapi_zw_wait_for_multiple_objects *		zw_wait_for_multiple_objects;
	ntapi_zw_create_timer *				zw_create_timer;
	ntapi_zw_open_timer *				zw_open_timer;
	ntapi_zw_cancel_timer *				zw_cancel_timer;
	ntapi_zw_set_timer *				zw_set_timer;
	ntapi_zw_query_timer *				zw_query_timer;
	ntapi_zw_create_event *				zw_create_event;
	ntapi_zw_open_event *				zw_open_event;
	ntapi_zw_set_event *				zw_set_event;
	ntapi_zw_pulse_event *				zw_pulse_event;
	ntapi_zw_reset_event *				zw_reset_event;
	ntapi_zw_clear_event *				zw_clear_event;
	ntapi_zw_query_event *				zw_query_event;
	ntapi_zw_create_semaphore *			zw_create_semaphore;
	ntapi_zw_open_semaphore *			zw_open_semaphore;
	ntapi_zw_release_semaphore *			zw_release_semaphore;
	ntapi_zw_query_semaphore *			zw_query_semaphore;
	ntapi_zw_create_mutant *			zw_create_mutant;
	ntapi_zw_open_mutant *				zw_open_mutant;
	ntapi_zw_release_mutant *			zw_release_mutant;
	ntapi_zw_query_mutant *				zw_query_mutant;
	ntapi_zw_create_io_completion *			zw_create_io_completion;
	ntapi_zw_open_io_completion *			zw_open_io_completion;
	ntapi_zw_set_io_completion *			zw_set_io_completion;
	ntapi_zw_remove_io_completion *			zw_remove_io_completion;
	ntapi_zw_query_io_completion *			zw_query_io_completion;
	ntapi_zw_create_event_pair *			zw_create_event_pair;
	ntapi_zw_open_event_pair *			zw_open_event_pair;
	ntapi_zw_wait_low_event_pair *			zw_wait_low_event_pair;
	ntapi_zw_set_low_event_pair *			zw_set_low_event_pair;
	ntapi_zw_wait_high_event_pair *			zw_wait_high_event_pair;
	ntapi_zw_set_high_event_pair *			zw_set_high_event_pair;
	ntapi_zw_set_low_wait_high_event_pair *		zw_set_low_wait_high_event_pair;
	ntapi_zw_set_high_wait_low_event_pair *		zw_set_high_wait_low_event_pair;

	/* nt_time.h */
	ntapi_zw_query_system_time *			zw_query_system_time;
	ntapi_zw_set_system_time *			zw_set_system_time;
	ntapi_zw_query_performance_counter *		zw_query_performance_counter;
	ntapi_zw_set_timer_resolution *			zw_set_timer_resolution;
	ntapi_zw_query_timer_resolution *		zw_query_timer_resolution;
	ntapi_zw_delay_execution *			zw_delay_execution;
	ntapi_zw_yield_execution *			zw_yield_execution;

	/* nt_profiling.h */
	ntapi_zw_create_profile *			zw_create_profile;
	ntapi_zw_set_interval_profile *			zw_set_interval_profile;
	ntapi_zw_query_interval_profile *		zw_query_interval_profile;
	ntapi_zw_start_profile *			zw_start_profile;
	ntapi_zw_stop_profile *				zw_stop_profile;

	/* nt_port.h */
	ntapi_zw_create_port *				zw_create_port;
	ntapi_zw_create_waitable_port *			zw_create_waitable_port;
	ntapi_zw_connect_port *				zw_connect_port;
	ntapi_zw_secure_connect_port *			zw_secure_connect_port;
	ntapi_zw_listen_port *				zw_listen_port;
	ntapi_zw_accept_connect_port *			zw_accept_connect_port;
	ntapi_zw_complete_connect_port *		zw_complete_connect_port;
	ntapi_zw_request_port *				zw_request_port;
	ntapi_zw_request_wait_reply_port *		zw_request_wait_reply_port;
	ntapi_zw_reply_port *				zw_reply_port;
	ntapi_zw_reply_wait_reply_port *		zw_reply_wait_reply_port;
	ntapi_zw_reply_wait_receive_port *		zw_reply_wait_receive_port;
	ntapi_zw_reply_wait_receive_port_ex *		zw_reply_wait_receive_port_ex;
	ntapi_zw_read_request_data *			zw_read_request_data;
	ntapi_zw_write_request_data *			zw_write_request_data;
	ntapi_zw_query_information_port *		zw_query_information_port;
	ntapi_zw_impersonate_client_of_port *		zw_impersonate_client_of_port;
	ntapi_csr_client_call_server *			csr_client_call_server;
	ntapi_csr_port_handle *				csr_port_handle;

	/* nt_device.h */
	ntapi_zw_load_driver *				zw_load_driver;
	ntapi_zw_unload_driver *			zw_unload_driver;

	/* nt_file.h */
	ntapi_zw_create_file *				zw_create_file;
	ntapi_zw_open_file *				zw_open_file;
	ntapi_zw_delete_file *				zw_delete_file;
	ntapi_zw_flush_buffers_file *			zw_flush_buffers_file;
	ntapi_zw_cancel_io_file *			zw_cancel_io_file;
	ntapi_zw_cancel_io_file_ex *			zw_cancel_io_file_ex;
	ntapi_zw_read_file *				zw_read_file;
	ntapi_zw_write_file *				zw_write_file;
	ntapi_zw_read_file_scatter *			zw_read_file_scatter;
	ntapi_zw_write_file_gather *			zw_write_file_gather;
	ntapi_zw_lock_file *				zw_lock_file;
	ntapi_zw_unlock_file *				zw_unlock_file;
	ntapi_zw_device_io_control_file *		zw_device_io_control_file;
	ntapi_zw_fs_control_file *			zw_fs_control_file;
	ntapi_zw_notify_change_directory_file *		zw_notify_change_directory_file;
	ntapi_zw_query_ea_file *			zw_query_ea_file;
	ntapi_zw_set_ea_file *				zw_set_ea_file;
	ntapi_zw_create_named_pipe_file *		zw_create_named_pipe_file;
	ntapi_zw_create_mailslot_file *			zw_create_mailslot_file;
	ntapi_zw_query_volume_information_file *	zw_query_volume_information_file;
	ntapi_zw_set_volume_information_file *		zw_set_volume_information_file;
	ntapi_zw_query_quota_information_file *		zw_query_quota_information_file;
	ntapi_zw_set_quota_information_file *		zw_set_quota_information_file;
	ntapi_zw_query_attributes_file *		zw_query_attributes_file;
	ntapi_zw_query_full_attributes_file *		zw_query_full_attributes_file;
	ntapi_zw_query_directory_file *			zw_query_directory_file;
	ntapi_zw_query_information_file *		zw_query_information_file;
	ntapi_zw_set_information_file *			zw_set_information_file;

	/* nt_resistry.h */
	ntapi_zw_create_key *				zw_create_key;
	ntapi_zw_open_key *				zw_open_key;
	ntapi_zw_delete_key *				zw_delete_key;
	ntapi_zw_flush_key *				zw_flush_key;
	ntapi_zw_save_key *				zw_save_key;
	ntapi_zw_save_merged_keys *			zw_save_merged_keys;
	ntapi_zw_restore_key *				zw_restore_key;
	ntapi_zw_load_key *				zw_load_key;
	ntapi_zw_load_key2 *				zw_load_key2;
	ntapi_zw_unload_key *				zw_unload_key;
	ntapi_zw_query_open_sub_keys *			zw_query_open_sub_keys;
	ntapi_zw_replace_key *				zw_replace_key;
	ntapi_zw_set_information_key *			zw_set_information_key;
	ntapi_zw_query_key *				zw_query_key;
	ntapi_zw_enumerate_key *			zw_enumerate_key;
	ntapi_zw_notify_change_key *			zw_notify_change_key;
	ntapi_zw_notify_change_multiple_keys *		zw_notify_change_multiple_keys;
	ntapi_zw_delete_value_key *			zw_delete_value_key;
	ntapi_zw_set_value_key *			zw_set_value_key;
	ntapi_zw_query_value_key *			zw_query_value_key;
	ntapi_zw_enumerate_value_key *			zw_enumerate_value_key;
	ntapi_zw_query_multiple_value_key *		zw_query_multiple_value_key;
	ntapi_zw_initialize_registry *			zw_initialize_registry;

	/* nt_security.h */
	ntapi_zw_privilege_check *			zw_privilege_check;
	ntapi_zw_privilege_object_audit_alarm *		zw_privilege_object_audit_alarm;
	ntapi_zw_privileged_service_audit_alarm *	zw_privileged_service_audit_alarm;
	ntapi_zw_access_check *				zw_access_check;
	ntapi_zw_access_check_and_audit_alarm *		zw_access_check_and_audit_alarm;
	ntapi_zw_access_check_by_type *			zw_access_check_by_type;
	ntapi_zw_access_check_by_type_result_list *	zw_access_check_by_type_result_list;
	ntapi_zw_open_object_audit_alarm *		zw_open_object_audit_alarm;
	ntapi_zw_close_object_audit_alarm *		zw_close_object_audit_alarm;
	ntapi_zw_delete_object_audit_alarm *		zw_delete_object_audit_alarm;

	ntapi_zw_access_check_by_type_and_audit_alarm *	zw_access_check_by_type_and_audit_alarm;

	ntapi_zw_access_check_by_type_result_list_and_audit_alarm *		zw_access_check_by_type_result_list_and_audit_alarm;
	ntapi_zw_access_check_by_type_result_list_and_audit_alarm_by_handle *	zw_access_check_by_type_result_list_and_audit_alarm_by_handle;

	/* nt_pnp.h */
	ntapi_zw_is_system_resume_automatic *		zw_is_system_resume_automatic;
	ntapi_zw_set_thread_execution_state *		zw_set_thread_execution_state;
	ntapi_zw_get_device_power_state *		zw_get_device_power_state;
	ntapi_zw_set_system_power_state *		zw_set_system_power_state;
	ntapi_zw_initiate_power_action *		zw_initiate_power_action;
	ntapi_zw_power_information *			zw_power_information;
	ntapi_zw_plug_play_control *			zw_plug_play_control;
	ntapi_zw_get_plug_play_event *			zw_get_plug_play_event;

	/* nt_exception */
	ntapi_zw_raise_exception *			zw_raise_exception;
	ntapi_zw_continue *				zw_continue;

	/* nt_locale */
	ntapi_zw_query_default_locale *			zw_query_default_locale;
	ntapi_zw_set_default_locale *			zw_set_default_locale;
	ntapi_zw_query_default_ui_language *		zw_query_default_ui_language;
	ntapi_zw_set_default_ui_language *		zw_set_default_ui_language;
	ntapi_zw_query_install_ui_language *		zw_query_install_ui_language;

	/* nt_uuid.h */
	ntapi_zw_allocate_locally_unique_id *		zw_allocate_locally_unique_id;
	ntapi_zw_allocate_uuids *			zw_allocate_uuids;
	ntapi_zw_set_uuid_seed *			zw_set_uuid_seed;

	/* nt_atom.h */
	ntapi_zw_add_atom *				zw_add_atom;
	ntapi_zw_find_atom *				zw_find_atom;
	ntapi_zw_delete_atom *				zw_delete_atom;
	ntapi_zw_query_information_atom *		zw_query_information_atom;

	/* nt_os.h */
	ntapi_zw_flush_write_buffer *			zw_flush_write_buffer;
	ntapi_zw_raise_hard_error *			zw_raise_hard_error;
	ntapi_zw_set_default_hard_error_port *		zw_set_default_hard_error_port;
	ntapi_zw_display_string *			zw_display_string;
	ntapi_zw_create_paging_file *			zw_create_paging_file;
	ntapi_zw_set_ldt_entries *			zw_set_ldt_entries;
	ntapi_zw_vdm_control *				zw_vdm_control;

	/* nt_ldr.h */
	ntapi_ldr_load_dll *				ldr_load_dll;
	ntapi_ldr_unload_dll *				ldr_unload_dll;

	/* nt_string.h */
	ntapi_memset *					memset;
	ntapi_sprintf *					sprintf;
	ntapi_snprintf *				snprintf;
	ntapi_vsprintf *				vsprintf;
	ntapi_vsnprintf *				vsnprintf;
	/* imported symbols: tail */

	/* alternate implementation */
	/* nt_string.h */
	ntapi_rtl_init_unicode_string *			rtl_init_unicode_string;
	ntapi_strlen *					strlen;
	ntapi_wcslen *					wcslen;

	/* extension functions */
	/* nt_object.h */
	ntapi_tt_open_ipc_object_directory *		tt_open_ipc_object_directory;
	ntapi_tt_create_ipc_object_directory_entry *	tt_create_ipc_object_directory_entry;
	ntapi_tt_create_keyed_object_directory *	tt_create_keyed_object_directory;
	ntapi_tt_open_keyed_object_directory *		tt_open_keyed_object_directory;
	ntapi_tt_create_keyed_object_directory_entry *	tt_create_keyed_object_directory_entry;

	/* nt_crc32.h */
	ntapi_tt_buffer_crc32 *				tt_buffer_crc32;
	ntapi_tt_mbstr_crc32 *				tt_mbstr_crc32;
	ntapi_tt_crc32_table *				tt_crc32_table;

	/* nt_crc64.h */
	ntapi_tt_buffer_crc64 *				tt_buffer_crc64;
	ntapi_tt_mbstr_crc64 *				tt_mbstr_crc64;
	ntapi_tt_crc64_table *				tt_crc64_table;

	/* nt_file.h */
	ntapi_tt_get_file_handle_type *			tt_get_file_handle_type;
	ntapi_tt_open_logical_parent_directory *	tt_open_logical_parent_directory;
	ntapi_tt_open_physical_parent_directory	*	tt_open_physical_parent_directory;

	/* nt_ipc.h */
	ntapi_ipc_connect_by_attr *			ipc_connect_by_attr;
	ntapi_ipc_connect_by_name *			ipc_connect_by_name;
	ntapi_ipc_connect_by_symlink *			ipc_connect_by_symlink;
	ntapi_ipc_connect_by_port *			ipc_connect_by_port;
	ntapi_ipc_connect_section_by_attr *		ipc_connect_section_by_attr;
	ntapi_ipc_connect_section_by_name *		ipc_connect_section_by_name;
	ntapi_ipc_connect_section_by_symlink *		ipc_connect_section_by_symlink;
	ntapi_ipc_connect_section_by_port *		ipc_connect_section_by_port;
	ntapi_ipc_get_port_by_attr *			ipc_get_port_by_attr;
	ntapi_ipc_get_port_section_by_attr *		ipc_get_port_section_by_attr;
	ntapi_ipc_init_section_by_port *		ipc_init_section_by_port;
	ntapi_ipc_disconnect_unmap_section_by_port *	ipc_disconnect_unmap_section_by_port;
	ntapi_ipc_create_pipe *				ipc_create_pipe;

	/* nt_sem.h */
	ntapi_sem_create *				sem_create;
	ntapi_sem_open *				sem_open;
	ntapi_sem_fcntl *				sem_fcntl;
	ntapi_sem_ioctl *				sem_ioctl;
	ntapi_sem_query *				sem_query;
	ntapi_sem_set *					sem_set;
	ntapi_sem_cancel *				sem_cancel;
	ntapi_sem_free *				sem_free;

	/* nt_msq.h */
	ntapi_msq_create *				msq_create;
	ntapi_msq_open *				msq_open;
	ntapi_msq_send *				msq_send;
	ntapi_msq_recv *				msq_recv;
	ntapi_msq_fcntl *				msq_fcntl;
	ntapi_msq_ioctl *				msq_ioctl;
	ntapi_msq_query *				msq_query;
	ntapi_msq_set *					msq_set;
	ntapi_msq_cancel *				msq_cancel;
	ntapi_msq_free *				msq_free;

	/* nt_ldr.h */
	ntapi_ldr_load_system_dll *			ldr_load_system_dll;
	ntapi_ldr_create_state_snapshot *		ldr_create_state_snapshot;
	ntapi_ldr_revert_state_to_snapshot *		ldr_revert_state_to_snapshot;

	/* nt_string.h */
	ntapi_tt_string_null_offset_multibyte *		tt_string_null_offset_multibyte;
	ntapi_tt_string_null_offset_short *		tt_string_null_offset_short;
	ntapi_tt_string_null_offset_dword *		tt_string_null_offset_dword;
	ntapi_tt_string_null_offset_qword *		tt_string_null_offset_qword;
	ntapi_tt_string_null_offset_ptrsize *		tt_string_null_offset_ptrsize;
	ntapi_tt_strcmp_multibyte *			tt_strcmp_multibyte;
	ntapi_tt_strcmp_utf16 *				tt_strcmp_utf16;
	ntapi_tt_strncmp_multibyte *			tt_strncmp_multibyte;
	ntapi_tt_strncmp_utf16 *			tt_strncmp_utf16;
	ntapi_tt_aligned_block_memset *			tt_aligned_block_memset;
	ntapi_tt_aligned_block_memcpy *			tt_aligned_block_memcpy;
	ntapi_tt_aligned_memcpy_utf16 *			tt_aligned_memcpy_utf16;
	ntapi_tt_memcpy_utf16 *				tt_memcpy_utf16;
	ntapi_tt_generic_memset *			tt_generic_memset;
	ntapi_tt_generic_memcpy *			tt_generic_memcpy;
	ntapi_tt_uint16_to_hex_utf16 *			tt_uint16_to_hex_utf16;
	ntapi_tt_uint32_to_hex_utf16 *			tt_uint32_to_hex_utf16;
	ntapi_tt_uint64_to_hex_utf16 *			tt_uint64_to_hex_utf16;
	ntapi_tt_uintptr_to_hex_utf16 *			tt_uintptr_to_hex_utf16;
	ntapi_tt_hex_utf16_to_uint16 *			tt_hex_utf16_to_uint16;
	ntapi_tt_hex_utf16_to_uint32 *			tt_hex_utf16_to_uint32;
	ntapi_tt_hex_utf16_to_uint64 *			tt_hex_utf16_to_uint64;
	ntapi_tt_hex_utf16_to_uintptr *			tt_hex_utf16_to_uintptr;
	ntapi_tt_uint16_to_hex_utf8 *			tt_uint16_to_hex_utf8;
	ntapi_tt_uint32_to_hex_utf8 *			tt_uint32_to_hex_utf8;
	ntapi_tt_uint64_to_hex_utf8 *			tt_uint64_to_hex_utf8;
	ntapi_tt_uintptr_to_hex_utf8 *			tt_uintptr_to_hex_utf8;
	ntapi_tt_init_unicode_string_from_utf16*	tt_init_unicode_string_from_utf16;

	/* nt_guid.h */
	ntapi_tt_guid_copy *				tt_guid_copy;
	ntapi_tt_guid_compare *				tt_guid_compare;
	ntapi_tt_guid_to_string_utf16 *			tt_guid_to_string_utf16;
	ntapi_tt_string_to_guid_utf16 *			tt_string_to_guid_utf16;

	/* nt_sysinfo.h */
	ntapi_tt_get_system_directory_native_path *	tt_get_system_directory_native_path;
	ntapi_tt_get_system_directory_dos_path *	tt_get_system_directory_dos_path;
	ntapi_tt_get_system_directory_handle *		tt_get_system_directory_handle;
	ntapi_tt_get_system_info_snapshot *		tt_get_system_info_snapshot;

	/* nt_thread.h */
	ntapi_tt_create_thread *			tt_create_thread;
	ntapi_tt_create_local_thread *			tt_create_local_thread;
	ntapi_tt_create_remote_thread *			tt_create_remote_thread;

	/* nt_process.h */
	ntapi_tt_fork *					tt_fork;
	ntapi_tt_create_remote_process_params *		tt_create_remote_process_params;
	ntapi_tt_create_native_process *		tt_create_native_process;
	ntapi_tt_spawn_native_process *			tt_spawn_native_process;
	ntapi_tt_get_runtime_data *			tt_get_runtime_data;
	ntapi_tt_init_runtime_data *			tt_init_runtime_data;
	ntapi_tt_update_runtime_data *			tt_update_runtime_data;
	ntapi_tt_exec_map_image_as_data *		tt_exec_map_image_as_data;
	ntapi_tt_exec_unmap_image *			tt_exec_unmap_image;

	/* nt_token.h */
	ntapi_tt_enable_token_privilege *		tt_enable_token_privilege;
	ntapi_tt_disable_token_privilege *		tt_disable_token_privilege;

	/* nt_section.h */
	ntapi_tt_get_section_name *			tt_get_section_name;

	/* nt_sync.h */
	ntapi_tt_create_inheritable_event *		tt_create_inheritable_event;
	ntapi_tt_create_private_event *			tt_create_private_event;
	ntapi_tt_sync_block_init *			tt_sync_block_init;
	ntapi_tt_sync_block_discard *			tt_sync_block_discard;
	ntapi_tt_sync_block_lock *			tt_sync_block_lock;
	ntapi_tt_sync_block_unlock *			tt_sync_block_unlock;
	ntapi_tt_sync_block_server_lock *		tt_sync_block_server_lock;
	ntapi_tt_wait_for_dummy_event *			tt_wait_for_dummy_event;

	/* nt_port.h */
	ntapi_tt_port_guid_from_type *			tt_port_guid_from_type;
	ntapi_tt_port_type_from_guid *			tt_port_type_from_guid;
	ntapi_tt_port_generate_keys *			tt_port_generate_keys;
	ntapi_tt_port_format_keys *			tt_port_format_keys;
	ntapi_tt_port_name_from_attr *			tt_port_name_from_attr;
	ntapi_tt_port_attr_from_name *			tt_port_attr_from_name;
	ntapi_tt_port_attr_from_string *		tt_port_attr_from_string;
	ntapi_tt_port_attr_from_symlink *		tt_port_attr_from_symlink;

	/* nt_argv.h */
	ntapi_tt_get_cmd_line_utf16 *			tt_get_cmd_line_utf16;
	ntapi_tt_get_peb_env_block_utf16 *		tt_get_peb_env_block_utf16;
	ntapi_tt_parse_cmd_line_args_utf16 *		tt_parse_cmd_line_args_utf16;
	ntapi_tt_get_argv_envp_utf8 *			tt_get_argv_envp_utf8;
	ntapi_tt_get_argv_envp_utf16 *			tt_get_argv_envp_utf16;
	ntapi_tt_get_env_var_meta_utf8 *		tt_get_env_var_meta_utf8;
	ntapi_tt_get_env_var_meta_utf16 *		tt_get_env_var_meta_utf16;
	ntapi_tt_array_copy_utf8 *			tt_array_copy_utf8;
	ntapi_tt_array_copy_utf16 *			tt_array_copy_utf16;
	ntapi_tt_array_convert_utf8_to_utf16 *		tt_array_convert_utf8_to_utf16;
	ntapi_tt_array_convert_utf16_to_utf8 *		tt_array_convert_utf16_to_utf8;

	/* nt_blitter.h */
	ntapi_blt_alloc *				blt_alloc;
	ntapi_blt_free *				blt_free;
	ntapi_blt_acquire *				blt_acquire;
	ntapi_blt_obtain *				blt_obtain;
	ntapi_blt_possess *				blt_possess;
	ntapi_blt_release *				blt_release;
	ntapi_blt_get *					blt_get;
	ntapi_blt_set *					blt_set;

	/* nt_unicode.h */
	ntapi_uc_validate_unicode_stream_utf8 *		uc_validate_unicode_stream_utf8;
	ntapi_uc_validate_unicode_stream_utf16 *	uc_validate_unicode_stream_utf16;
	ntapi_uc_get_code_point_byte_count_utf8 *	uc_get_code_point_byte_count_utf8;
	ntapi_uc_get_code_point_byte_count_utf16 *	uc_get_code_point_byte_count_utf16;
	ntapi_uc_convert_unicode_stream_utf8_to_utf16 *	uc_convert_unicode_stream_utf8_to_utf16;
	ntapi_uc_convert_unicode_stream_utf8_to_utf32 *	uc_convert_unicode_stream_utf8_to_utf32;
	ntapi_uc_convert_unicode_stream_utf16_to_utf8 *	uc_convert_unicode_stream_utf16_to_utf8;
	ntapi_uc_convert_unicode_stream_utf16_to_utf32 *uc_convert_unicode_stream_utf16_to_utf32;

	/* nt_daemon.h */
	ntapi_dsr_init *				dsr_init;
	ntapi_dsr_start *				dsr_start;
	ntapi_dsr_create_port *				dsr_create_port;
	ntapi_dsr_connect_internal_client *		dsr_connect_internal_client;
	ntapi_dsr_internal_client_connect *		dsr_internal_client_connect;

	/* nt_vfd.h */
	ntapi_vfd_dev_name_init *			vfd_dev_name_init;

	/* nt_tty.h */
	ntapi_tty_create_session *			tty_create_session;
	ntapi_tty_join_session *			tty_join_session;
	ntapi_tty_connect *				tty_connect;
	ntapi_tty_client_session_disconnect *		tty_client_session_disconnect;
	ntapi_tty_client_session_query *		tty_client_session_query;
	ntapi_tty_client_session_set *			tty_client_session_set;
	ntapi_tty_client_process_register *		tty_client_process_register;
	ntapi_tty_query_information_section *		tty_query_information_section;
	ntapi_tty_query_information_server *		tty_query_information_server;
	ntapi_tty_query_information_service *		tty_query_information_service;
	ntapi_tty_request_peer *			tty_request_peer;
	ntapi_tty_vms_query *				tty_vms_query;
	ntapi_tty_vms_request *				tty_vms_request;
	ntapi_pty_open *				pty_open;
	ntapi_pty_open_pair *				pty_open_pair;
	ntapi_pty_reopen *				pty_reopen;
	ntapi_pty_inherit * 				pty_inherit;
	ntapi_pty_inherit_runtime_ctty * 		pty_inherit_runtime_ctty;
	ntapi_pty_close *				pty_close;
	ntapi_pty_read *				pty_read;
	ntapi_pty_write *				pty_write;
	ntapi_pty_fcntl *				pty_fcntl;
	ntapi_pty_ioctl *				pty_ioctl;
	ntapi_pty_query *				pty_query;
	ntapi_pty_set *					pty_set;
	ntapi_pty_cancel *				pty_cancel;

	/* nt_socket.h */
	ntapi_sc_socket *				sc_socket;
	ntapi_sc_bind *					sc_bind;
	ntapi_sc_listen *				sc_listen;
	ntapi_sc_accept *				sc_accept;
	ntapi_sc_connect *				sc_connect;
	ntapi_sc_send *					sc_send;
	ntapi_sc_recv *					sc_recv;
	ntapi_sc_shutdown *				sc_shutdown;
	ntapi_sc_getsockname *				sc_getsockname;
	ntapi_sc_getpeername *				sc_getpeername;
	ntapi_sc_server_accept_connection *		sc_server_accept_connection;
	ntapi_sc_server_duplicate_socket *		sc_server_duplicate_socket;
	ntapi_sc_setsockopt *				sc_setsockopt;
	ntapi_sc_getsockopt *				sc_getsockopt;
	ntapi_sc_wait *					sc_wait;

	/* nt_mount.h */
	ntapi_tt_get_dos_drive_device_handle *		tt_get_dos_drive_device_handle;
	ntapi_tt_get_dos_drive_root_handle *		tt_get_dos_drive_root_handle;
	ntapi_tt_get_dos_drive_device_name *		tt_get_dos_drive_device_name;
	ntapi_tt_get_dos_drive_mount_points *		tt_get_dos_drive_mount_points;
	ntapi_tt_dev_mount_points_to_statfs *		tt_dev_mount_points_to_statfs;
	ntapi_tt_get_dos_drive_letter_from_device *	tt_get_dos_drive_letter_from_device;

	/* nt_istat.h */
	ntapi_tt_istat *				tt_istat;

	/* nt_stat.h */
	ntapi_tt_stat *					tt_stat;

	/* nt_statfs.h */
	ntapi_tt_statfs *				tt_statfs;

	/* nt_debug.h */
	ntapi_dbg_write *				dbg_write;
	ntapi_dbg_fn_call *				dbg_fn_call;
	ntapi_dbg_msg *					dbg_msg;
} ntapi_vtbl;


__ntapi_api
int32_t __fastcall ntapi_init(ntapi_vtbl ** pvtbl);


#ifdef __cplusplus
}
#endif

#endif