1 // Copyright (c) 2006-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. 4 5 #include "sandbox/win/src/nt_internals.h" 6 #include "sandbox/win/src/sandbox_types.h" 7 8 #ifndef SANDBOX_SRC_PROCESS_THREAD_INTERCEPTION_H__ 9 #define SANDBOX_SRC_PROCESS_THREAD_INTERCEPTION_H__ 10 11 namespace sandbox { 12 13 extern "C" { 14 15 typedef BOOL (WINAPI *CreateProcessWFunction)( 16 LPCWSTR lpApplicationName, 17 LPWSTR lpCommandLine, 18 LPSECURITY_ATTRIBUTES lpProcessAttributes, 19 LPSECURITY_ATTRIBUTES lpThreadAttributes, 20 BOOL bInheritHandles, 21 DWORD dwCreationFlags, 22 LPVOID lpEnvironment, 23 LPCWSTR lpCurrentDirectory, 24 LPSTARTUPINFOW lpStartupInfo, 25 LPPROCESS_INFORMATION lpProcessInformation); 26 27 typedef BOOL (WINAPI *CreateProcessAFunction)( 28 LPCSTR lpApplicationName, 29 LPSTR lpCommandLine, 30 LPSECURITY_ATTRIBUTES lpProcessAttributes, 31 LPSECURITY_ATTRIBUTES lpThreadAttributes, 32 BOOL bInheritHandles, 33 DWORD dwCreationFlags, 34 LPVOID lpEnvironment, 35 LPCSTR lpCurrentDirectory, 36 LPSTARTUPINFOA lpStartupInfo, 37 LPPROCESS_INFORMATION lpProcessInformation); 38 39 typedef HANDLE (WINAPI *CreateThreadFunction)( 40 LPSECURITY_ATTRIBUTES lpThreadAttributes, 41 SIZE_T dwStackSize, 42 LPTHREAD_START_ROUTINE lpStartAddress, 43 PVOID lpParameter, 44 DWORD dwCreationFlags, 45 LPDWORD lpThreadId); 46 47 typedef LCID (WINAPI *GetUserDefaultLCIDFunction)(); 48 49 // Interception of NtOpenThread on the child process. 50 SANDBOX_INTERCEPT NTSTATUS WINAPI TargetNtOpenThread( 51 NtOpenThreadFunction orig_OpenThread, PHANDLE thread, 52 ACCESS_MASK desired_access, POBJECT_ATTRIBUTES object_attributes, 53 PCLIENT_ID client_id); 54 55 // Interception of NtOpenProcess on the child process. 56 SANDBOX_INTERCEPT NTSTATUS WINAPI TargetNtOpenProcess( 57 NtOpenProcessFunction orig_OpenProcess, PHANDLE process, 58 ACCESS_MASK desired_access, POBJECT_ATTRIBUTES object_attributes, 59 PCLIENT_ID client_id); 60 61 // Interception of NtOpenProcessToken on the child process. 62 SANDBOX_INTERCEPT NTSTATUS WINAPI TargetNtOpenProcessToken( 63 NtOpenProcessTokenFunction orig_OpenProcessToken, HANDLE process, 64 ACCESS_MASK desired_access, PHANDLE token); 65 66 // Interception of NtOpenProcessTokenEx on the child process. 67 SANDBOX_INTERCEPT NTSTATUS WINAPI TargetNtOpenProcessTokenEx( 68 NtOpenProcessTokenExFunction orig_OpenProcessTokenEx, HANDLE process, 69 ACCESS_MASK desired_access, ULONG handle_attributes, PHANDLE token); 70 71 // Interception of CreateProcessW and A in kernel32.dll. 72 SANDBOX_INTERCEPT BOOL WINAPI TargetCreateProcessW( 73 CreateProcessWFunction orig_CreateProcessW, LPCWSTR application_name, 74 LPWSTR command_line, LPSECURITY_ATTRIBUTES process_attributes, 75 LPSECURITY_ATTRIBUTES thread_attributes, BOOL inherit_handles, DWORD flags, 76 LPVOID environment, LPCWSTR current_directory, LPSTARTUPINFOW startup_info, 77 LPPROCESS_INFORMATION process_information); 78 79 SANDBOX_INTERCEPT BOOL WINAPI TargetCreateProcessA( 80 CreateProcessAFunction orig_CreateProcessA, LPCSTR application_name, 81 LPSTR command_line, LPSECURITY_ATTRIBUTES process_attributes, 82 LPSECURITY_ATTRIBUTES thread_attributes, BOOL inherit_handles, DWORD flags, 83 LPVOID environment, LPCSTR current_directory, LPSTARTUPINFOA startup_info, 84 LPPROCESS_INFORMATION process_information); 85 86 // Interception of CreateThread in kernel32.dll. 87 SANDBOX_INTERCEPT HANDLE WINAPI TargetCreateThread( 88 CreateThreadFunction orig_CreateThread, 89 LPSECURITY_ATTRIBUTES thread_attributes, SIZE_T stack_size, 90 LPTHREAD_START_ROUTINE start_address, PVOID parameter, 91 DWORD creation_flags, LPDWORD thread_id); 92 93 // Interception of GetUserDefaultLCID in kernel32.dll. 94 SANDBOX_INTERCEPT LCID WINAPI TargetGetUserDefaultLCID( 95 GetUserDefaultLCIDFunction orig_GetUserDefaultLCID); 96 97 } // extern "C" 98 99 } // namespace sandbox 100 101 #endif // SANDBOX_SRC_PROCESS_THREAD_INTERCEPTION_H__ 102