4 * Copyright (C) 2020 Alexandre Julliard
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 #ifndef __NTDLL_UNIXLIB_H
22 #define __NTDLL_UNIXLIB_H
24 #include "wine/server.h"
25 #include "wine/debug.h"
30 /* increment this when you change the function table */
31 #define NTDLL_UNIXLIB_VERSION 43
36 NTSTATUS (WINAPI
*NtAlertResumeThread
)( HANDLE handle
, ULONG
*count
);
37 NTSTATUS (WINAPI
*NtAlertThread
)( HANDLE handle
);
38 NTSTATUS (WINAPI
*NtAllocateVirtualMemory
)( HANDLE process
, PVOID
*ret
, ULONG_PTR zero_bits
,
39 SIZE_T
*size_ptr
, ULONG type
, ULONG protect
);
40 NTSTATUS (WINAPI
*NtAreMappedFilesTheSame
)(PVOID addr1
, PVOID addr2
);
41 NTSTATUS (WINAPI
*NtCancelTimer
)( HANDLE handle
, BOOLEAN
*state
);
42 NTSTATUS (WINAPI
*NtClearEvent
)( HANDLE handle
);
43 NTSTATUS (WINAPI
*NtClose
)( HANDLE handle
);
44 NTSTATUS (WINAPI
*NtContinue
)( CONTEXT
*context
, BOOLEAN alertable
);
45 NTSTATUS (WINAPI
*NtCreateEvent
)( HANDLE
*handle
, ACCESS_MASK access
,
46 const OBJECT_ATTRIBUTES
*attr
, EVENT_TYPE type
, BOOLEAN state
);
47 NTSTATUS (WINAPI
*NtCreateFile
)( HANDLE
*handle
, ACCESS_MASK access
, OBJECT_ATTRIBUTES
*attr
,
48 IO_STATUS_BLOCK
*io
, LARGE_INTEGER
*alloc_size
,
49 ULONG attributes
, ULONG sharing
, ULONG disposition
,
50 ULONG options
, void *ea_buffer
, ULONG ea_length
);
51 NTSTATUS (WINAPI
*NtCreateKeyedEvent
)( HANDLE
*handle
, ACCESS_MASK access
,
52 const OBJECT_ATTRIBUTES
*attr
, ULONG flags
);
53 NTSTATUS (WINAPI
*NtCreateMailslotFile
)( HANDLE
*handle
, ULONG access
, OBJECT_ATTRIBUTES
*attr
,
54 IO_STATUS_BLOCK
*io
, ULONG options
, ULONG quota
,
55 ULONG msg_size
, LARGE_INTEGER
*timeout
);
56 NTSTATUS (WINAPI
*NtCreateMutant
)( HANDLE
*handle
, ACCESS_MASK access
,
57 const OBJECT_ATTRIBUTES
*attr
, BOOLEAN owned
);
58 NTSTATUS (WINAPI
*NtCreateNamedPipeFile
)( HANDLE
*handle
, ULONG access
, OBJECT_ATTRIBUTES
*attr
,
59 IO_STATUS_BLOCK
*io
, ULONG sharing
, ULONG dispo
,
60 ULONG options
, ULONG pipe_type
, ULONG read_mode
,
61 ULONG completion_mode
, ULONG max_inst
,
62 ULONG inbound_quota
, ULONG outbound_quota
,
63 LARGE_INTEGER
*timeout
);
64 NTSTATUS (WINAPI
*NtCreateSection
)( HANDLE
*handle
, ACCESS_MASK access
,
65 const OBJECT_ATTRIBUTES
*attr
, const LARGE_INTEGER
*size
,
66 ULONG protect
, ULONG sec_flags
, HANDLE file
);
67 NTSTATUS (WINAPI
*NtCreateSemaphore
)( HANDLE
*handle
, ACCESS_MASK access
,
68 const OBJECT_ATTRIBUTES
*attr
, LONG initial
, LONG max
);
69 NTSTATUS (WINAPI
*NtCreateThreadEx
)( HANDLE
*handle
, ACCESS_MASK access
, OBJECT_ATTRIBUTES
*attr
,
70 HANDLE process
, PRTL_THREAD_START_ROUTINE start
, void *param
,
71 ULONG flags
, SIZE_T zero_bits
, SIZE_T stack_commit
,
72 SIZE_T stack_reserve
, PS_ATTRIBUTE_LIST
*attr_list
);
73 NTSTATUS (WINAPI
*NtCreateTimer
)( HANDLE
*handle
, ACCESS_MASK access
,
74 const OBJECT_ATTRIBUTES
*attr
, TIMER_TYPE type
);
75 TEB
* (WINAPI
*NtCurrentTeb
)(void);
76 NTSTATUS (WINAPI
*NtDelayExecution
)( BOOLEAN alertable
, const LARGE_INTEGER
*timeout
);
77 NTSTATUS (WINAPI
*NtDeleteFile
)( OBJECT_ATTRIBUTES
*attr
);
78 NTSTATUS (WINAPI
*NtDuplicateObject
)( HANDLE source_process
, HANDLE source
,
79 HANDLE dest_process
, HANDLE
*dest
,
80 ACCESS_MASK access
, ULONG attributes
, ULONG options
);
81 NTSTATUS (WINAPI
*NtFlushVirtualMemory
)( HANDLE process
, LPCVOID
*addr_ptr
,
82 SIZE_T
*size_ptr
, ULONG unknown
);
83 NTSTATUS (WINAPI
*NtFreeVirtualMemory
)( HANDLE process
, PVOID
*addr_ptr
,
84 SIZE_T
*size_ptr
, ULONG type
);
85 NTSTATUS (WINAPI
*NtGetContextThread
)( HANDLE handle
, CONTEXT
*context
);
86 NTSTATUS (WINAPI
*NtGetWriteWatch
)( HANDLE process
, ULONG flags
, PVOID base
, SIZE_T size
,
87 PVOID
*addresses
, ULONG_PTR
*count
, ULONG
*granularity
);
88 NTSTATUS (WINAPI
*NtLockVirtualMemory
)( HANDLE process
, PVOID
*addr
, SIZE_T
*size
, ULONG unknown
);
89 NTSTATUS (WINAPI
*NtMapViewOfSection
)( HANDLE handle
, HANDLE process
, PVOID
*addr_ptr
,
90 ULONG_PTR zero_bits
, SIZE_T commit_size
,
91 const LARGE_INTEGER
*offset_ptr
, SIZE_T
*size_ptr
,
92 SECTION_INHERIT inherit
, ULONG alloc_type
, ULONG protect
);
93 NTSTATUS (WINAPI
*NtOpenEvent
)( HANDLE
*handle
, ACCESS_MASK access
,
94 const OBJECT_ATTRIBUTES
*attr
);
95 NTSTATUS (WINAPI
*NtOpenFile
)( HANDLE
*handle
, ACCESS_MASK access
, OBJECT_ATTRIBUTES
*attr
,
96 IO_STATUS_BLOCK
*io
, ULONG sharing
, ULONG options
);
97 NTSTATUS (WINAPI
*NtOpenKeyedEvent
)( HANDLE
*handle
, ACCESS_MASK access
,
98 const OBJECT_ATTRIBUTES
*attr
);
99 NTSTATUS (WINAPI
*NtOpenMutant
)( HANDLE
*handle
, ACCESS_MASK access
,
100 const OBJECT_ATTRIBUTES
*attr
);
101 NTSTATUS (WINAPI
*NtOpenSection
)( HANDLE
*handle
, ACCESS_MASK access
,
102 const OBJECT_ATTRIBUTES
*attr
);
103 NTSTATUS (WINAPI
*NtOpenSemaphore
)( HANDLE
*handle
, ACCESS_MASK access
,
104 const OBJECT_ATTRIBUTES
*attr
);
105 NTSTATUS (WINAPI
*NtOpenThread
)( HANDLE
*handle
, ACCESS_MASK access
, const OBJECT_ATTRIBUTES
*attr
, const CLIENT_ID
*id
);
106 NTSTATUS (WINAPI
*NtOpenTimer
)( HANDLE
*handle
, ACCESS_MASK access
,
107 const OBJECT_ATTRIBUTES
*attr
);
108 NTSTATUS (WINAPI
*NtProtectVirtualMemory
)( HANDLE process
, PVOID
*addr_ptr
, SIZE_T
*size_ptr
,
109 ULONG new_prot
, ULONG
*old_prot
);
110 NTSTATUS (WINAPI
*NtPulseEvent
)( HANDLE handle
, LONG
*prev_state
);
111 NTSTATUS (WINAPI
*NtQueryAttributesFile
)( const OBJECT_ATTRIBUTES
*attr
,
112 FILE_BASIC_INFORMATION
*info
);
113 NTSTATUS (WINAPI
*NtQueryDirectoryFile
)( HANDLE handle
, HANDLE event
, PIO_APC_ROUTINE apc_routine
,
114 void *apc_context
, IO_STATUS_BLOCK
*io
, void *buffer
,
115 ULONG length
, FILE_INFORMATION_CLASS info_class
,
116 BOOLEAN single_entry
, UNICODE_STRING
*mask
,
117 BOOLEAN restart_scan
);
118 NTSTATUS (WINAPI
*NtQueryEvent
)( HANDLE handle
, EVENT_INFORMATION_CLASS
class,
119 void *info
, ULONG len
, ULONG
*ret_len
);
120 NTSTATUS (WINAPI
*NtQueryFullAttributesFile
)( const OBJECT_ATTRIBUTES
*attr
,
121 FILE_NETWORK_OPEN_INFORMATION
*info
);
122 NTSTATUS (WINAPI
*NtQueryMutant
)( HANDLE handle
, MUTANT_INFORMATION_CLASS
class,
123 void *info
, ULONG len
, ULONG
*ret_len
);
124 NTSTATUS (WINAPI
*NtQueryPerformanceCounter
)( LARGE_INTEGER
*counter
, LARGE_INTEGER
*frequency
);
125 NTSTATUS (WINAPI
*NtQuerySection
)( HANDLE handle
, SECTION_INFORMATION_CLASS
class,
126 void *ptr
, SIZE_T size
, SIZE_T
*ret_size
);
127 NTSTATUS (WINAPI
*NtQuerySemaphore
)( HANDLE handle
, SEMAPHORE_INFORMATION_CLASS
class,
128 void *info
, ULONG len
, ULONG
*ret_len
);
129 NTSTATUS (WINAPI
*NtQuerySystemTime
)( LARGE_INTEGER
*time
);
130 NTSTATUS (WINAPI
*NtQueryTimer
)( HANDLE handle
, TIMER_INFORMATION_CLASS
class,
131 void *info
, ULONG len
, ULONG
*ret_len
);
132 NTSTATUS (WINAPI
*NtQueryVirtualMemory
)( HANDLE process
, LPCVOID addr
,
133 MEMORY_INFORMATION_CLASS info_class
,
134 PVOID buffer
, SIZE_T len
, SIZE_T
*res_len
);
135 NTSTATUS (WINAPI
*NtQueueApcThread
)( HANDLE handle
, PNTAPCFUNC func
, ULONG_PTR arg1
,
136 ULONG_PTR arg2
, ULONG_PTR arg3
);
137 NTSTATUS (WINAPI
*NtRaiseException
)( EXCEPTION_RECORD
*rec
, CONTEXT
*context
, BOOL first_chance
);
138 NTSTATUS (WINAPI
*NtReadVirtualMemory
)( HANDLE process
, const void *addr
, void *buffer
,
139 SIZE_T size
, SIZE_T
*bytes_read
);
140 NTSTATUS (WINAPI
*NtReleaseKeyedEvent
)( HANDLE handle
, const void *key
,
141 BOOLEAN alertable
, const LARGE_INTEGER
*timeout
);
142 NTSTATUS (WINAPI
*NtReleaseMutant
)( HANDLE handle
, LONG
*prev_count
);
143 NTSTATUS (WINAPI
*NtReleaseSemaphore
)( HANDLE handle
, ULONG count
, ULONG
*previous
);
144 NTSTATUS (WINAPI
*NtResetEvent
)( HANDLE handle
, LONG
*prev_state
);
145 NTSTATUS (WINAPI
*NtResetWriteWatch
)( HANDLE process
, PVOID base
, SIZE_T size
);
146 NTSTATUS (WINAPI
*NtResumeThread
)( HANDLE handle
, ULONG
*count
);
147 NTSTATUS (WINAPI
*NtSetContextThread
)( HANDLE handle
, const CONTEXT
*context
);
148 NTSTATUS (WINAPI
*NtSetEvent
)( HANDLE handle
, LONG
*prev_state
);
149 NTSTATUS (WINAPI
*NtSetLdtEntries
)( ULONG sel1
, LDT_ENTRY entry1
, ULONG sel2
, LDT_ENTRY entry2
);
150 NTSTATUS (WINAPI
*NtSetSystemTime
)( const LARGE_INTEGER
*new, LARGE_INTEGER
*old
);
151 NTSTATUS (WINAPI
*NtSetTimer
)( HANDLE handle
, const LARGE_INTEGER
*when
,
152 PTIMER_APC_ROUTINE callback
, void *arg
,
153 BOOLEAN resume
, ULONG period
, BOOLEAN
*state
);
154 NTSTATUS (WINAPI
*NtSignalAndWaitForSingleObject
)( HANDLE signal
, HANDLE wait
,
155 BOOLEAN alertable
, const LARGE_INTEGER
*timeout
);
156 NTSTATUS (WINAPI
*NtSuspendThread
)( HANDLE handle
, ULONG
*count
);
157 NTSTATUS (WINAPI
*NtTerminateThread
)( HANDLE handle
, LONG exit_code
);
158 NTSTATUS (WINAPI
*NtUnlockVirtualMemory
)( HANDLE process
, PVOID
*addr
,
159 SIZE_T
*size
, ULONG unknown
);
160 NTSTATUS (WINAPI
*NtUnmapViewOfSection
)( HANDLE process
, PVOID addr
);
161 NTSTATUS (WINAPI
*NtWaitForKeyedEvent
)( HANDLE handle
, const void *key
, BOOLEAN alertable
,
162 const LARGE_INTEGER
*timeout
);
163 NTSTATUS (WINAPI
*NtWaitForMultipleObjects
)( DWORD count
, const HANDLE
*handles
,
164 BOOLEAN wait_any
, BOOLEAN alertable
,
165 const LARGE_INTEGER
*timeout
);
166 NTSTATUS (WINAPI
*NtWaitForSingleObject
)( HANDLE handle
, BOOLEAN alertable
,
167 const LARGE_INTEGER
*timeout
);
168 NTSTATUS (WINAPI
*NtWriteVirtualMemory
)( HANDLE process
, void *addr
, const void *buffer
,
169 SIZE_T size
, SIZE_T
*bytes_written
);
170 NTSTATUS (WINAPI
*NtYieldExecution
)(void);
172 /* other Win32 API functions */
173 NTSTATUS (WINAPI
*DbgUiIssueRemoteBreakin
)( HANDLE process
);
174 NTSTATUS (WINAPI
*RtlWaitOnAddress
)( const void *addr
, const void *cmp
, SIZE_T size
,
175 const LARGE_INTEGER
*timeout
);
176 void (WINAPI
*RtlWakeAddressAll
)( const void *addr
);
177 void (WINAPI
*RtlWakeAddressSingle
)( const void *addr
);
180 NTSTATUS (CDECL
*fast_RtlpWaitForCriticalSection
)( RTL_CRITICAL_SECTION
*crit
, int timeout
);
181 NTSTATUS (CDECL
*fast_RtlpUnWaitCriticalSection
)( RTL_CRITICAL_SECTION
*crit
);
182 NTSTATUS (CDECL
*fast_RtlDeleteCriticalSection
)( RTL_CRITICAL_SECTION
*crit
);
183 NTSTATUS (CDECL
*fast_RtlTryAcquireSRWLockExclusive
)( RTL_SRWLOCK
*lock
);
184 NTSTATUS (CDECL
*fast_RtlAcquireSRWLockExclusive
)( RTL_SRWLOCK
*lock
);
185 NTSTATUS (CDECL
*fast_RtlTryAcquireSRWLockShared
)( RTL_SRWLOCK
*lock
);
186 NTSTATUS (CDECL
*fast_RtlAcquireSRWLockShared
)( RTL_SRWLOCK
*lock
);
187 NTSTATUS (CDECL
*fast_RtlReleaseSRWLockExclusive
)( RTL_SRWLOCK
*lock
);
188 NTSTATUS (CDECL
*fast_RtlReleaseSRWLockShared
)( RTL_SRWLOCK
*lock
);
189 NTSTATUS (CDECL
*fast_RtlSleepConditionVariableSRW
)( RTL_CONDITION_VARIABLE
*variable
,
191 const LARGE_INTEGER
*timeout
, ULONG flags
);
192 NTSTATUS (CDECL
*fast_RtlSleepConditionVariableCS
)( RTL_CONDITION_VARIABLE
*variable
,
193 RTL_CRITICAL_SECTION
*cs
,
194 const LARGE_INTEGER
*timeout
);
195 NTSTATUS (CDECL
*fast_RtlWakeConditionVariable
)( RTL_CONDITION_VARIABLE
*variable
, int count
);
197 /* environment functions */
198 void (CDECL
*get_main_args
)( int *argc
, char **argv
[], char **envp
[] );
199 NTSTATUS (CDECL
*get_initial_environment
)( WCHAR
**wargv
[], WCHAR
*env
, SIZE_T
*size
);
200 void (CDECL
*get_paths
)( const char **builddir
, const char **datadir
, const char **configdir
);
201 void (CDECL
*get_dll_path
)( const char ***paths
, SIZE_T
*maxlen
);
202 void (CDECL
*get_unix_codepage
)( CPTABLEINFO
*table
);
203 void (CDECL
*get_locales
)( WCHAR
*sys
, WCHAR
*user
);
204 const char * (CDECL
*get_version
)(void);
205 const char * (CDECL
*get_build_id
)(void);
206 void (CDECL
*get_host_version
)( const char **sysname
, const char **release
);
208 /* virtual memory functions */
209 NTSTATUS (CDECL
*map_so_dll
)( const IMAGE_NT_HEADERS
*nt_descr
, HMODULE module
);
210 NTSTATUS (CDECL
*virtual_map_section
)( HANDLE handle
, PVOID
*addr_ptr
, unsigned short zero_bits_64
, SIZE_T commit_size
,
211 const LARGE_INTEGER
*offset_ptr
, SIZE_T
*size_ptr
, ULONG alloc_type
,
212 ULONG protect
, pe_image_info_t
*image_info
);
213 void (CDECL
*virtual_get_system_info
)( SYSTEM_BASIC_INFORMATION
*info
);
214 NTSTATUS (CDECL
*virtual_create_builtin_view
)( void *module
);
215 NTSTATUS (CDECL
*virtual_alloc_thread_stack
)( INITIAL_TEB
*stack
, SIZE_T reserve_size
, SIZE_T commit_size
, SIZE_T
*pthread_size
);
216 unsigned int (CDECL
*virtual_locked_server_call
)( void *req_ptr
);
217 ssize_t (CDECL
*virtual_locked_read
)( int fd
, void *addr
, size_t size
);
218 ssize_t (CDECL
*virtual_locked_pread
)( int fd
, void *addr
, size_t size
, off_t offset
);
219 ssize_t (CDECL
*virtual_locked_recvmsg
)( int fd
, struct msghdr
*hdr
, int flags
);
220 BOOL (CDECL
*virtual_check_buffer_for_read
)( const void *ptr
, SIZE_T size
);
221 BOOL (CDECL
*virtual_check_buffer_for_write
)( void *ptr
, SIZE_T size
);
222 void (CDECL
*virtual_set_force_exec
)( BOOL enable
);
223 void (CDECL
*virtual_release_address_space
)(void);
224 void (CDECL
*virtual_set_large_address_space
)(void);
226 /* thread/process functions */
227 TEB
* (CDECL
*init_threading
)( int *nb_threads_ptr
, struct ldt_copy
**ldt_copy
, SIZE_T
*size
,
228 BOOL
*suspend
, unsigned int *cpus
, BOOL
*wow64
, timeout_t
*start_time
);
229 void (CDECL
*exit_thread
)( int status
);
230 void (CDECL
*exit_process
)( int status
);
231 NTSTATUS (CDECL
*get_thread_ldt_entry
)( HANDLE handle
, void *data
, ULONG len
, ULONG
*ret_len
);
232 NTSTATUS (CDECL
*spawn_process
)( const RTL_USER_PROCESS_PARAMETERS
*params
, int socketfd
,
233 const char *unixdir
, char *winedebug
,
234 const pe_image_info_t
*pe_info
);
235 NTSTATUS (CDECL
*exec_process
)( const UNICODE_STRING
*cmdline
, const pe_image_info_t
*pe_info
);
236 NTSTATUS (CDECL
*fork_and_exec
)( const char *unix_name
, const char *unix_dir
,
237 const RTL_USER_PROCESS_PARAMETERS
*params
);
239 /* server functions */
240 unsigned int (CDECL
*server_call
)( void *req_ptr
);
241 void (CDECL
*server_send_fd
)( int fd
);
242 int (CDECL
*server_get_unix_fd
)( HANDLE handle
, unsigned int wanted_access
, int *unix_fd
,
243 int *needs_close
, enum server_fd_type
*type
, unsigned int *options
);
244 NTSTATUS (CDECL
*server_fd_to_handle
)( int fd
, unsigned int access
, unsigned int attributes
,
246 NTSTATUS (CDECL
*server_handle_to_fd
)( HANDLE handle
, unsigned int access
, int *unix_fd
,
247 unsigned int *options
);
248 void (CDECL
*server_release_fd
)( HANDLE handle
, int unix_fd
);
249 void (CDECL
*server_init_process_done
)( void *relay
);
252 NTSTATUS (CDECL
*file_id_to_unix_file_name
)( const OBJECT_ATTRIBUTES
*attr
,
253 ANSI_STRING
*unix_name
);
254 NTSTATUS (CDECL
*nt_to_unix_file_name_attr
)( const OBJECT_ATTRIBUTES
*attr
,
255 ANSI_STRING
*unix_name_ret
, UINT disposition
);
256 NTSTATUS (CDECL
*nt_to_unix_file_name
)( const UNICODE_STRING
*nameW
, ANSI_STRING
*unix_name_ret
,
257 UINT disposition
, BOOLEAN check_case
);
258 NTSTATUS (CDECL
*unmount_device
)( HANDLE handle
);
259 void (CDECL
*set_show_dot_files
)( BOOL enable
);
261 /* debugging functions */
262 unsigned char (CDECL
*dbg_get_channel_flags
)( struct __wine_debug_channel
*channel
);
263 const char * (CDECL
*dbg_strdup
)( const char *str
);
264 int (CDECL
*dbg_output
)( const char *str
);
265 int (CDECL
*dbg_header
)( enum __wine_debug_class cls
, struct __wine_debug_channel
*channel
,
266 const char *function
);
269 #endif /* __NTDLL_UNIXLIB_H */