Fri, 16 Jan 2015 18:13:44 +0100
Integrate suggestion from review to improve consistency with existing code.
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #ifndef _SECURITY_SANDBOX_BASE_SHIM_SDKDECLS_H_
8 #define _SECURITY_SANDBOX_BASE_SHIM_SDKDECLS_H_
10 #include <windows.h>
12 // This file contains definitions required for things dynamically loaded
13 // while building or targetting lower platform versions or lower SDKs.
15 #if (_WIN32_WINNT < 0x0600)
16 typedef struct _STARTUPINFOEXA {
17 STARTUPINFOA StartupInfo;
18 LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList;
19 } STARTUPINFOEXA, *LPSTARTUPINFOEXA;
20 typedef struct _STARTUPINFOEXW {
21 STARTUPINFOW StartupInfo;
22 LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList;
23 } STARTUPINFOEXW, *LPSTARTUPINFOEXW;
24 #ifdef UNICODE
25 typedef STARTUPINFOEXW STARTUPINFOEX;
26 typedef LPSTARTUPINFOEXW LPSTARTUPINFOEX;
27 #else
28 typedef STARTUPINFOEXA STARTUPINFOEX;
29 typedef LPSTARTUPINFOEXA LPSTARTUPINFOEX;
30 #endif // UNICODE
32 #define PROC_THREAD_ATTRIBUTE_NUMBER 0x0000FFFF
33 #define PROC_THREAD_ATTRIBUTE_THREAD 0x00010000 // Attribute may be used with thread creation
34 #define PROC_THREAD_ATTRIBUTE_INPUT 0x00020000 // Attribute is input only
35 #define PROC_THREAD_ATTRIBUTE_ADDITIVE 0x00040000 // Attribute may be "accumulated," e.g. bitmasks, counters, etc.
37 #define ProcThreadAttributeValue(Number, Thread, Input, Additive) \
38 (((Number) & PROC_THREAD_ATTRIBUTE_NUMBER) | \
39 ((Thread != FALSE) ? PROC_THREAD_ATTRIBUTE_THREAD : 0) | \
40 ((Input != FALSE) ? PROC_THREAD_ATTRIBUTE_INPUT : 0) | \
41 ((Additive != FALSE) ? PROC_THREAD_ATTRIBUTE_ADDITIVE : 0))
43 #define ProcThreadAttributeHandleList 2
45 #define PROC_THREAD_ATTRIBUTE_HANDLE_LIST \
46 ProcThreadAttributeValue (ProcThreadAttributeHandleList, FALSE, TRUE, FALSE)
48 #define PROCESS_DEP_ENABLE 0x00000001
49 #define PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION 0x00000002
51 #endif // (_WIN32_WINNT >= 0x0600)
53 #if (_WIN32_WINNT < 0x0601)
54 #define ProcThreadAttributeMitigationPolicy 7
55 #define PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY \
56 ProcThreadAttributeValue (ProcThreadAttributeMitigationPolicy, FALSE, TRUE, FALSE)
58 #define PROCESS_CREATION_MITIGATION_POLICY_DEP_ENABLE 0x01
59 #define PROCESS_CREATION_MITIGATION_POLICY_DEP_ATL_THUNK_ENABLE 0x02
60 #define PROCESS_CREATION_MITIGATION_POLICY_SEHOP_ENABLE 0x04
61 #endif // (_WIN32_WINNT >= 0x0601)
63 #if (_WIN32_WINNT < 0x0602)
64 #define ProcThreadAttributeSecurityCapabilities 9
65 #define PROC_THREAD_ATTRIBUTE_SECURITY_CAPABILITIES \
66 ProcThreadAttributeValue (ProcThreadAttributeSecurityCapabilities, FALSE, TRUE, FALSE)
68 #define PROCESS_CREATION_MITIGATION_POLICY_FORCE_RELOCATE_IMAGES_MASK (0x00000003 << 8)
69 #define PROCESS_CREATION_MITIGATION_POLICY_FORCE_RELOCATE_IMAGES_DEFER (0x00000000 << 8)
70 #define PROCESS_CREATION_MITIGATION_POLICY_FORCE_RELOCATE_IMAGES_ALWAYS_ON (0x00000001 << 8)
71 #define PROCESS_CREATION_MITIGATION_POLICY_FORCE_RELOCATE_IMAGES_ALWAYS_OFF (0x00000002 << 8)
72 #define PROCESS_CREATION_MITIGATION_POLICY_FORCE_RELOCATE_IMAGES_ALWAYS_ON_REQ_RELOCS (0x00000003 << 8)
73 #define PROCESS_CREATION_MITIGATION_POLICY_HEAP_TERMINATE_MASK (0x00000003 << 12)
74 #define PROCESS_CREATION_MITIGATION_POLICY_HEAP_TERMINATE_DEFER (0x00000000 << 12)
75 #define PROCESS_CREATION_MITIGATION_POLICY_HEAP_TERMINATE_ALWAYS_ON (0x00000001 << 12)
76 #define PROCESS_CREATION_MITIGATION_POLICY_HEAP_TERMINATE_ALWAYS_OFF (0x00000002 << 12)
77 #define PROCESS_CREATION_MITIGATION_POLICY_HEAP_TERMINATE_RESERVED (0x00000003 << 12)
78 #define PROCESS_CREATION_MITIGATION_POLICY_BOTTOM_UP_ASLR_MASK (0x00000003 << 16)
79 #define PROCESS_CREATION_MITIGATION_POLICY_BOTTOM_UP_ASLR_DEFER (0x00000000 << 16)
80 #define PROCESS_CREATION_MITIGATION_POLICY_BOTTOM_UP_ASLR_ALWAYS_ON (0x00000001 << 16)
81 #define PROCESS_CREATION_MITIGATION_POLICY_BOTTOM_UP_ASLR_ALWAYS_OFF (0x00000002 << 16)
82 #define PROCESS_CREATION_MITIGATION_POLICY_BOTTOM_UP_ASLR_RESERVED (0x00000003 << 16)
83 #define PROCESS_CREATION_MITIGATION_POLICY_HIGH_ENTROPY_ASLR_MASK (0x00000003 << 20)
84 #define PROCESS_CREATION_MITIGATION_POLICY_HIGH_ENTROPY_ASLR_DEFER (0x00000000 << 20)
85 #define PROCESS_CREATION_MITIGATION_POLICY_HIGH_ENTROPY_ASLR_ALWAYS_ON (0x00000001 << 20)
86 #define PROCESS_CREATION_MITIGATION_POLICY_HIGH_ENTROPY_ASLR_ALWAYS_OFF (0x00000002 << 20)
87 #define PROCESS_CREATION_MITIGATION_POLICY_HIGH_ENTROPY_ASLR_RESERVED (0x00000003 << 20)
88 #define PROCESS_CREATION_MITIGATION_POLICY_STRICT_HANDLE_CHECKS_MASK (0x00000003 << 24)
89 #define PROCESS_CREATION_MITIGATION_POLICY_STRICT_HANDLE_CHECKS_DEFER (0x00000000 << 24)
90 #define PROCESS_CREATION_MITIGATION_POLICY_STRICT_HANDLE_CHECKS_ALWAYS_ON (0x00000001 << 24)
91 #define PROCESS_CREATION_MITIGATION_POLICY_STRICT_HANDLE_CHECKS_ALWAYS_OFF (0x00000002 << 24)
92 #define PROCESS_CREATION_MITIGATION_POLICY_STRICT_HANDLE_CHECKS_RESERVED (0x00000003 << 24)
93 #define PROCESS_CREATION_MITIGATION_POLICY_WIN32K_SYSTEM_CALL_DISABLE_MASK (0x00000003 << 28)
94 #define PROCESS_CREATION_MITIGATION_POLICY_WIN32K_SYSTEM_CALL_DISABLE_DEFER (0x00000000 << 28)
95 #define PROCESS_CREATION_MITIGATION_POLICY_WIN32K_SYSTEM_CALL_DISABLE_ALWAYS_ON (0x00000001 << 28)
96 #define PROCESS_CREATION_MITIGATION_POLICY_WIN32K_SYSTEM_CALL_DISABLE_ALWAYS_OFF (0x00000002 << 28)
97 #define PROCESS_CREATION_MITIGATION_POLICY_WIN32K_SYSTEM_CALL_DISABLE_RESERVED (0x00000003 << 28)
98 #define PROCESS_CREATION_MITIGATION_POLICY_EXTENSION_POINT_DISABLE_MASK (0x00000003ui64 << 32)
99 #define PROCESS_CREATION_MITIGATION_POLICY_EXTENSION_POINT_DISABLE_DEFER (0x00000000ui64 << 32)
100 #define PROCESS_CREATION_MITIGATION_POLICY_EXTENSION_POINT_DISABLE_ALWAYS_ON (0x00000001ui64 << 32)
101 #define PROCESS_CREATION_MITIGATION_POLICY_EXTENSION_POINT_DISABLE_ALWAYS_OFF (0x00000002ui64 << 32)
102 #define PROCESS_CREATION_MITIGATION_POLICY_EXTENSION_POINT_DISABLE_RESERVED (0x00000003ui64 << 32)
104 // Check if we're including >= win8 winnt.h
105 #ifndef NTDDI_WIN8
107 typedef struct _SECURITY_CAPABILITIES {
108 PSID AppContainerSid;
109 PSID_AND_ATTRIBUTES Capabilities;
110 DWORD CapabilityCount;
111 DWORD Reserved;
112 } SECURITY_CAPABILITIES, *PSECURITY_CAPABILITIES, *LPSECURITY_CAPABILITIES;
114 typedef enum _PROCESS_MITIGATION_POLICY {
115 ProcessDEPPolicy,
116 ProcessASLRPolicy,
117 ProcessReserved1MitigationPolicy,
118 ProcessStrictHandleCheckPolicy,
119 ProcessSystemCallDisablePolicy,
120 ProcessMitigationOptionsMask,
121 ProcessExtensionPointDisablePolicy,
122 MaxProcessMitigationPolicy
123 } PROCESS_MITIGATION_POLICY, *PPROCESS_MITIGATION_POLICY;
125 #define LOAD_LIBRARY_SEARCH_DEFAULT_DIRS 0x00001000
127 typedef struct _PROCESS_MITIGATION_ASLR_POLICY {
128 union {
129 DWORD Flags;
130 struct {
131 DWORD EnableBottomUpRandomization : 1;
132 DWORD EnableForceRelocateImages : 1;
133 DWORD EnableHighEntropy : 1;
134 DWORD DisallowStrippedImages : 1;
135 DWORD ReservedFlags : 28;
136 };
137 };
138 } PROCESS_MITIGATION_ASLR_POLICY, *PPROCESS_MITIGATION_ASLR_POLICY;
140 typedef struct _PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY {
141 union {
142 DWORD Flags;
143 struct {
144 DWORD RaiseExceptionOnInvalidHandleReference : 1;
145 DWORD HandleExceptionsPermanentlyEnabled : 1;
146 DWORD ReservedFlags : 30;
147 };
148 };
149 } PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY, *PPROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY;
151 typedef struct _PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY {
152 union {
153 DWORD Flags;
154 struct {
155 DWORD DisallowWin32kSystemCalls : 1;
156 DWORD ReservedFlags : 31;
157 };
158 };
159 } PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY, *PPROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY;
161 typedef struct _PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY {
162 union {
163 DWORD Flags;
164 struct {
165 DWORD DisableExtensionPoints : 1;
166 DWORD ReservedFlags : 31;
167 };
168 };
169 } PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY, *PPROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY;
171 #endif // NTDDI_WIN8
172 #endif // (_WIN32_WINNT < 0x0602)
173 #endif // _SECURITY_SANDBOX_BASE_SHIM_SDKDECLS_H_