1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "sandbox/win/src/nt_internals.h"
6 #include "sandbox/win/src/sandbox_types.h"
8 #ifndef SANDBOX_SRC_INTERCEPTORS_64_H_
9 #define SANDBOX_SRC_INTERCEPTORS_64_H_
15 // Interception of NtMapViewOfSection on the child process.
16 // It should never be called directly. This function provides the means to
17 // detect dlls being loaded, so we can patch them if needed.
18 SANDBOX_INTERCEPT NTSTATUS WINAPI
TargetNtMapViewOfSection64(
19 HANDLE section
, HANDLE process
, PVOID
*base
, ULONG_PTR zero_bits
,
20 SIZE_T commit_size
, PLARGE_INTEGER offset
, PSIZE_T view_size
,
21 SECTION_INHERIT inherit
, ULONG allocation_type
, ULONG protect
);
23 // Interception of NtUnmapViewOfSection on the child process.
24 // It should never be called directly. This function provides the means to
25 // detect dlls being unloaded, so we can clean up our interceptions.
26 SANDBOX_INTERCEPT NTSTATUS WINAPI
TargetNtUnmapViewOfSection64(HANDLE process
,
29 // -----------------------------------------------------------------------
30 // Interceptors without IPC.
32 // Interception of NtSetInformationThread on the child process.
33 SANDBOX_INTERCEPT NTSTATUS WINAPI
TargetNtSetInformationThread64(
34 HANDLE thread
, NT_THREAD_INFORMATION_CLASS thread_info_class
,
35 PVOID thread_information
, ULONG thread_information_bytes
);
37 // Interception of NtOpenThreadToken on the child process.
38 SANDBOX_INTERCEPT NTSTATUS WINAPI
TargetNtOpenThreadToken64(
39 HANDLE thread
, ACCESS_MASK desired_access
, BOOLEAN open_as_self
,
42 // Interception of NtOpenThreadTokenEx on the child process.
43 SANDBOX_INTERCEPT NTSTATUS WINAPI
TargetNtOpenThreadTokenEx64(
44 HANDLE thread
, ACCESS_MASK desired_access
, BOOLEAN open_as_self
,
45 ULONG handle_attributes
, PHANDLE token
);
47 // Interception of CreateThread on the child process.
48 SANDBOX_INTERCEPT HANDLE WINAPI
TargetCreateThread64(
49 LPSECURITY_ATTRIBUTES thread_attributes
, SIZE_T stack_size
,
50 LPTHREAD_START_ROUTINE start_address
, PVOID parameter
,
51 DWORD creation_flags
, LPDWORD thread_id
);
53 // Interception of GetUserDefaultLCID on the child process.
54 SANDBOX_INTERCEPT LCID WINAPI
TargetGetUserDefaultLCID64();
56 // -----------------------------------------------------------------------
57 // Interceptors handled by the file system dispatcher.
59 // Interception of NtCreateFile on the child process.
60 SANDBOX_INTERCEPT NTSTATUS WINAPI
TargetNtCreateFile64(
61 PHANDLE file
, ACCESS_MASK desired_access
,
62 POBJECT_ATTRIBUTES object_attributes
, PIO_STATUS_BLOCK io_status
,
63 PLARGE_INTEGER allocation_size
, ULONG file_attributes
, ULONG sharing
,
64 ULONG disposition
, ULONG options
, PVOID ea_buffer
, ULONG ea_length
);
66 // Interception of NtOpenFile on the child process.
67 SANDBOX_INTERCEPT NTSTATUS WINAPI
TargetNtOpenFile64(
68 PHANDLE file
, ACCESS_MASK desired_access
,
69 POBJECT_ATTRIBUTES object_attributes
, PIO_STATUS_BLOCK io_status
,
70 ULONG sharing
, ULONG options
);
72 // Interception of NtQueryAtttributesFile on the child process.
73 SANDBOX_INTERCEPT NTSTATUS WINAPI
TargetNtQueryAttributesFile64(
74 POBJECT_ATTRIBUTES object_attributes
,
75 PFILE_BASIC_INFORMATION file_attributes
);
77 // Interception of NtQueryFullAtttributesFile on the child process.
78 SANDBOX_INTERCEPT NTSTATUS WINAPI
TargetNtQueryFullAttributesFile64(
79 POBJECT_ATTRIBUTES object_attributes
,
80 PFILE_NETWORK_OPEN_INFORMATION file_attributes
);
82 // Interception of NtSetInformationFile on the child process.
83 SANDBOX_INTERCEPT NTSTATUS WINAPI
TargetNtSetInformationFile64(
84 HANDLE file
, PIO_STATUS_BLOCK io_status
, PVOID file_information
,
85 ULONG length
, FILE_INFORMATION_CLASS file_information_class
);
87 // -----------------------------------------------------------------------
88 // Interceptors handled by the named pipe dispatcher.
90 // Interception of CreateNamedPipeW in kernel32.dll
91 SANDBOX_INTERCEPT HANDLE WINAPI
TargetCreateNamedPipeW64(
92 LPCWSTR pipe_name
, DWORD open_mode
, DWORD pipe_mode
, DWORD max_instance
,
93 DWORD out_buffer_size
, DWORD in_buffer_size
, DWORD default_timeout
,
94 LPSECURITY_ATTRIBUTES security_attributes
);
96 // -----------------------------------------------------------------------
97 // Interceptors handled by the process-thread dispatcher.
99 // Interception of NtOpenThread on the child process.
100 SANDBOX_INTERCEPT NTSTATUS WINAPI
TargetNtOpenThread64(
101 PHANDLE thread
, ACCESS_MASK desired_access
,
102 POBJECT_ATTRIBUTES object_attributes
, PCLIENT_ID client_id
);
104 // Interception of NtOpenProcess on the child process.
105 SANDBOX_INTERCEPT NTSTATUS WINAPI
TargetNtOpenProcess64(
106 PHANDLE process
, ACCESS_MASK desired_access
,
107 POBJECT_ATTRIBUTES object_attributes
, PCLIENT_ID client_id
);
109 // Interception of NtOpenProcessToken on the child process.
110 SANDBOX_INTERCEPT NTSTATUS WINAPI
TargetNtOpenProcessToken64(
111 HANDLE process
, ACCESS_MASK desired_access
, PHANDLE token
);
113 // Interception of NtOpenProcessTokenEx on the child process.
114 SANDBOX_INTERCEPT NTSTATUS WINAPI
TargetNtOpenProcessTokenEx64(
115 HANDLE process
, ACCESS_MASK desired_access
, ULONG handle_attributes
,
118 // Interception of CreateProcessW in kernel32.dll.
119 SANDBOX_INTERCEPT BOOL WINAPI
TargetCreateProcessW64(
120 LPCWSTR application_name
, LPWSTR command_line
,
121 LPSECURITY_ATTRIBUTES process_attributes
,
122 LPSECURITY_ATTRIBUTES thread_attributes
, BOOL inherit_handles
, DWORD flags
,
123 LPVOID environment
, LPCWSTR current_directory
, LPSTARTUPINFOW startup_info
,
124 LPPROCESS_INFORMATION process_information
);
126 // Interception of CreateProcessA in kernel32.dll.
127 SANDBOX_INTERCEPT BOOL WINAPI
TargetCreateProcessA64(
128 LPCSTR application_name
, LPSTR command_line
,
129 LPSECURITY_ATTRIBUTES process_attributes
,
130 LPSECURITY_ATTRIBUTES thread_attributes
, BOOL inherit_handles
, DWORD flags
,
131 LPVOID environment
, LPCSTR current_directory
, LPSTARTUPINFOA startup_info
,
132 LPPROCESS_INFORMATION process_information
);
134 // -----------------------------------------------------------------------
135 // Interceptors handled by the registry dispatcher.
137 // Interception of NtCreateKey on the child process.
138 SANDBOX_INTERCEPT NTSTATUS WINAPI
TargetNtCreateKey64(
139 PHANDLE key
, ACCESS_MASK desired_access
,
140 POBJECT_ATTRIBUTES object_attributes
, ULONG title_index
,
141 PUNICODE_STRING class_name
, ULONG create_options
, PULONG disposition
);
143 // Interception of NtOpenKey on the child process.
144 SANDBOX_INTERCEPT NTSTATUS WINAPI
TargetNtOpenKey64(
145 PHANDLE key
, ACCESS_MASK desired_access
,
146 POBJECT_ATTRIBUTES object_attributes
);
148 // Interception of NtOpenKeyEx on the child process.
149 SANDBOX_INTERCEPT NTSTATUS WINAPI
TargetNtOpenKeyEx64(
150 PHANDLE key
, ACCESS_MASK desired_access
,
151 POBJECT_ATTRIBUTES object_attributes
, ULONG open_options
);
153 // -----------------------------------------------------------------------
154 // Interceptors handled by the sync dispatcher.
156 // Interception of NtCreateEvent/NtOpenEvent on the child process.
157 SANDBOX_INTERCEPT NTSTATUS WINAPI
TargetNtCreateEvent64(
158 PHANDLE event_handle
, ACCESS_MASK desired_access
,
159 POBJECT_ATTRIBUTES object_attributes
, EVENT_TYPE event_type
,
160 BOOLEAN initial_state
);
162 SANDBOX_INTERCEPT NTSTATUS WINAPI
TargetNtOpenEvent64(
163 PHANDLE event_handle
, ACCESS_MASK desired_access
,
164 POBJECT_ATTRIBUTES object_attributes
);
168 } // namespace sandbox
170 #endif // SANDBOX_SRC_INTERCEPTORS_64_H_