Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
michael@0 | 1 | // Copyright (c) 2006-2010 The Chromium Authors. All rights reserved. |
michael@0 | 2 | // Use of this source code is governed by a BSD-style license that can be |
michael@0 | 3 | // found in the LICENSE file. |
michael@0 | 4 | |
michael@0 | 5 | // This file holds definitions related to the ntdll API. |
michael@0 | 6 | |
michael@0 | 7 | #ifndef SANDBOX_WIN_SRC_NT_INTERNALS_H__ |
michael@0 | 8 | #define SANDBOX_WIN_SRC_NT_INTERNALS_H__ |
michael@0 | 9 | |
michael@0 | 10 | #include <windows.h> |
michael@0 | 11 | |
michael@0 | 12 | typedef LONG NTSTATUS; |
michael@0 | 13 | #define NT_SUCCESS(st) (st >= 0) |
michael@0 | 14 | |
michael@0 | 15 | #define STATUS_SUCCESS ((NTSTATUS)0x00000000L) |
michael@0 | 16 | #define STATUS_BUFFER_OVERFLOW ((NTSTATUS)0x80000005L) |
michael@0 | 17 | #define STATUS_UNSUCCESSFUL ((NTSTATUS)0xC0000001L) |
michael@0 | 18 | #define STATUS_NOT_IMPLEMENTED ((NTSTATUS)0xC0000002L) |
michael@0 | 19 | #define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS)0xC0000004L) |
michael@0 | 20 | #ifndef STATUS_INVALID_PARAMETER |
michael@0 | 21 | // It is now defined in Windows 2008 SDK. |
michael@0 | 22 | #define STATUS_INVALID_PARAMETER ((NTSTATUS)0xC000000DL) |
michael@0 | 23 | #endif |
michael@0 | 24 | #define STATUS_CONFLICTING_ADDRESSES ((NTSTATUS)0xC0000018L) |
michael@0 | 25 | #define STATUS_ACCESS_DENIED ((NTSTATUS)0xC0000022L) |
michael@0 | 26 | #define STATUS_BUFFER_TOO_SMALL ((NTSTATUS)0xC0000023L) |
michael@0 | 27 | #define STATUS_OBJECT_NAME_NOT_FOUND ((NTSTATUS)0xC0000034L) |
michael@0 | 28 | #define STATUS_PROCEDURE_NOT_FOUND ((NTSTATUS)0xC000007AL) |
michael@0 | 29 | #define STATUS_INVALID_IMAGE_FORMAT ((NTSTATUS)0xC000007BL) |
michael@0 | 30 | #define STATUS_NO_TOKEN ((NTSTATUS)0xC000007CL) |
michael@0 | 31 | |
michael@0 | 32 | #define CURRENT_PROCESS ((HANDLE) -1) |
michael@0 | 33 | #define CURRENT_THREAD ((HANDLE) -2) |
michael@0 | 34 | #define NtCurrentProcess CURRENT_PROCESS |
michael@0 | 35 | |
michael@0 | 36 | typedef struct _UNICODE_STRING { |
michael@0 | 37 | USHORT Length; |
michael@0 | 38 | USHORT MaximumLength; |
michael@0 | 39 | PWSTR Buffer; |
michael@0 | 40 | } UNICODE_STRING; |
michael@0 | 41 | typedef UNICODE_STRING *PUNICODE_STRING; |
michael@0 | 42 | typedef const UNICODE_STRING *PCUNICODE_STRING; |
michael@0 | 43 | |
michael@0 | 44 | typedef struct _STRING { |
michael@0 | 45 | USHORT Length; |
michael@0 | 46 | USHORT MaximumLength; |
michael@0 | 47 | PCHAR Buffer; |
michael@0 | 48 | } STRING; |
michael@0 | 49 | typedef STRING *PSTRING; |
michael@0 | 50 | |
michael@0 | 51 | typedef STRING ANSI_STRING; |
michael@0 | 52 | typedef PSTRING PANSI_STRING; |
michael@0 | 53 | typedef CONST PSTRING PCANSI_STRING; |
michael@0 | 54 | |
michael@0 | 55 | typedef STRING OEM_STRING; |
michael@0 | 56 | typedef PSTRING POEM_STRING; |
michael@0 | 57 | typedef CONST STRING* PCOEM_STRING; |
michael@0 | 58 | |
michael@0 | 59 | #define OBJ_CASE_INSENSITIVE 0x00000040L |
michael@0 | 60 | |
michael@0 | 61 | typedef struct _OBJECT_ATTRIBUTES { |
michael@0 | 62 | ULONG Length; |
michael@0 | 63 | HANDLE RootDirectory; |
michael@0 | 64 | PUNICODE_STRING ObjectName; |
michael@0 | 65 | ULONG Attributes; |
michael@0 | 66 | PVOID SecurityDescriptor; |
michael@0 | 67 | PVOID SecurityQualityOfService; |
michael@0 | 68 | } OBJECT_ATTRIBUTES; |
michael@0 | 69 | typedef OBJECT_ATTRIBUTES *POBJECT_ATTRIBUTES; |
michael@0 | 70 | |
michael@0 | 71 | #define InitializeObjectAttributes(p, n, a, r, s) { \ |
michael@0 | 72 | (p)->Length = sizeof(OBJECT_ATTRIBUTES);\ |
michael@0 | 73 | (p)->RootDirectory = r;\ |
michael@0 | 74 | (p)->Attributes = a;\ |
michael@0 | 75 | (p)->ObjectName = n;\ |
michael@0 | 76 | (p)->SecurityDescriptor = s;\ |
michael@0 | 77 | (p)->SecurityQualityOfService = NULL;\ |
michael@0 | 78 | } |
michael@0 | 79 | |
michael@0 | 80 | typedef struct _IO_STATUS_BLOCK { |
michael@0 | 81 | union { |
michael@0 | 82 | NTSTATUS Status; |
michael@0 | 83 | PVOID Pointer; |
michael@0 | 84 | }; |
michael@0 | 85 | ULONG_PTR Information; |
michael@0 | 86 | } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; |
michael@0 | 87 | |
michael@0 | 88 | // ----------------------------------------------------------------------- |
michael@0 | 89 | // File IO |
michael@0 | 90 | |
michael@0 | 91 | // Create disposition values. |
michael@0 | 92 | |
michael@0 | 93 | #define FILE_SUPERSEDE 0x00000000 |
michael@0 | 94 | #define FILE_OPEN 0x00000001 |
michael@0 | 95 | #define FILE_CREATE 0x00000002 |
michael@0 | 96 | #define FILE_OPEN_IF 0x00000003 |
michael@0 | 97 | #define FILE_OVERWRITE 0x00000004 |
michael@0 | 98 | #define FILE_OVERWRITE_IF 0x00000005 |
michael@0 | 99 | #define FILE_MAXIMUM_DISPOSITION 0x00000005 |
michael@0 | 100 | |
michael@0 | 101 | // Create/open option flags. |
michael@0 | 102 | |
michael@0 | 103 | #define FILE_DIRECTORY_FILE 0x00000001 |
michael@0 | 104 | #define FILE_WRITE_THROUGH 0x00000002 |
michael@0 | 105 | #define FILE_SEQUENTIAL_ONLY 0x00000004 |
michael@0 | 106 | #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008 |
michael@0 | 107 | |
michael@0 | 108 | #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010 |
michael@0 | 109 | #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020 |
michael@0 | 110 | #define FILE_NON_DIRECTORY_FILE 0x00000040 |
michael@0 | 111 | #define FILE_CREATE_TREE_CONNECTION 0x00000080 |
michael@0 | 112 | |
michael@0 | 113 | #define FILE_COMPLETE_IF_OPLOCKED 0x00000100 |
michael@0 | 114 | #define FILE_NO_EA_KNOWLEDGE 0x00000200 |
michael@0 | 115 | #define FILE_OPEN_REMOTE_INSTANCE 0x00000400 |
michael@0 | 116 | #define FILE_RANDOM_ACCESS 0x00000800 |
michael@0 | 117 | |
michael@0 | 118 | #define FILE_DELETE_ON_CLOSE 0x00001000 |
michael@0 | 119 | #define FILE_OPEN_BY_FILE_ID 0x00002000 |
michael@0 | 120 | #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000 |
michael@0 | 121 | #define FILE_NO_COMPRESSION 0x00008000 |
michael@0 | 122 | |
michael@0 | 123 | #define FILE_RESERVE_OPFILTER 0x00100000 |
michael@0 | 124 | #define FILE_OPEN_REPARSE_POINT 0x00200000 |
michael@0 | 125 | #define FILE_OPEN_NO_RECALL 0x00400000 |
michael@0 | 126 | #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000 |
michael@0 | 127 | |
michael@0 | 128 | typedef NTSTATUS (WINAPI *NtCreateFileFunction)( |
michael@0 | 129 | OUT PHANDLE FileHandle, |
michael@0 | 130 | IN ACCESS_MASK DesiredAccess, |
michael@0 | 131 | IN POBJECT_ATTRIBUTES ObjectAttributes, |
michael@0 | 132 | OUT PIO_STATUS_BLOCK IoStatusBlock, |
michael@0 | 133 | IN PLARGE_INTEGER AllocationSize OPTIONAL, |
michael@0 | 134 | IN ULONG FileAttributes, |
michael@0 | 135 | IN ULONG ShareAccess, |
michael@0 | 136 | IN ULONG CreateDisposition, |
michael@0 | 137 | IN ULONG CreateOptions, |
michael@0 | 138 | IN PVOID EaBuffer OPTIONAL, |
michael@0 | 139 | IN ULONG EaLength); |
michael@0 | 140 | |
michael@0 | 141 | typedef NTSTATUS (WINAPI *NtOpenFileFunction)( |
michael@0 | 142 | OUT PHANDLE FileHandle, |
michael@0 | 143 | IN ACCESS_MASK DesiredAccess, |
michael@0 | 144 | IN POBJECT_ATTRIBUTES ObjectAttributes, |
michael@0 | 145 | OUT PIO_STATUS_BLOCK IoStatusBlock, |
michael@0 | 146 | IN ULONG ShareAccess, |
michael@0 | 147 | IN ULONG OpenOptions); |
michael@0 | 148 | |
michael@0 | 149 | typedef NTSTATUS (WINAPI *NtCloseFunction)( |
michael@0 | 150 | IN HANDLE Handle); |
michael@0 | 151 | |
michael@0 | 152 | typedef enum _FILE_INFORMATION_CLASS { |
michael@0 | 153 | FileRenameInformation = 10 |
michael@0 | 154 | } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; |
michael@0 | 155 | |
michael@0 | 156 | typedef struct _FILE_RENAME_INFORMATION { |
michael@0 | 157 | BOOLEAN ReplaceIfExists; |
michael@0 | 158 | HANDLE RootDirectory; |
michael@0 | 159 | ULONG FileNameLength; |
michael@0 | 160 | WCHAR FileName[1]; |
michael@0 | 161 | } FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION; |
michael@0 | 162 | |
michael@0 | 163 | typedef NTSTATUS (WINAPI *NtSetInformationFileFunction)( |
michael@0 | 164 | IN HANDLE FileHandle, |
michael@0 | 165 | OUT PIO_STATUS_BLOCK IoStatusBlock, |
michael@0 | 166 | IN PVOID FileInformation, |
michael@0 | 167 | IN ULONG Length, |
michael@0 | 168 | IN FILE_INFORMATION_CLASS FileInformationClass); |
michael@0 | 169 | |
michael@0 | 170 | typedef struct FILE_BASIC_INFORMATION { |
michael@0 | 171 | LARGE_INTEGER CreationTime; |
michael@0 | 172 | LARGE_INTEGER LastAccessTime; |
michael@0 | 173 | LARGE_INTEGER LastWriteTime; |
michael@0 | 174 | LARGE_INTEGER ChangeTime; |
michael@0 | 175 | ULONG FileAttributes; |
michael@0 | 176 | } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION; |
michael@0 | 177 | |
michael@0 | 178 | typedef NTSTATUS (WINAPI *NtQueryAttributesFileFunction)( |
michael@0 | 179 | IN POBJECT_ATTRIBUTES ObjectAttributes, |
michael@0 | 180 | OUT PFILE_BASIC_INFORMATION FileAttributes); |
michael@0 | 181 | |
michael@0 | 182 | typedef struct _FILE_NETWORK_OPEN_INFORMATION { |
michael@0 | 183 | LARGE_INTEGER CreationTime; |
michael@0 | 184 | LARGE_INTEGER LastAccessTime; |
michael@0 | 185 | LARGE_INTEGER LastWriteTime; |
michael@0 | 186 | LARGE_INTEGER ChangeTime; |
michael@0 | 187 | LARGE_INTEGER AllocationSize; |
michael@0 | 188 | LARGE_INTEGER EndOfFile; |
michael@0 | 189 | ULONG FileAttributes; |
michael@0 | 190 | } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION; |
michael@0 | 191 | |
michael@0 | 192 | typedef NTSTATUS (WINAPI *NtQueryFullAttributesFileFunction)( |
michael@0 | 193 | IN POBJECT_ATTRIBUTES ObjectAttributes, |
michael@0 | 194 | OUT PFILE_NETWORK_OPEN_INFORMATION FileAttributes); |
michael@0 | 195 | |
michael@0 | 196 | // ----------------------------------------------------------------------- |
michael@0 | 197 | // Sections |
michael@0 | 198 | |
michael@0 | 199 | typedef NTSTATUS (WINAPI *NtCreateSectionFunction)( |
michael@0 | 200 | OUT PHANDLE SectionHandle, |
michael@0 | 201 | IN ACCESS_MASK DesiredAccess, |
michael@0 | 202 | IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, |
michael@0 | 203 | IN PLARGE_INTEGER MaximumSize OPTIONAL, |
michael@0 | 204 | IN ULONG SectionPageProtection, |
michael@0 | 205 | IN ULONG AllocationAttributes, |
michael@0 | 206 | IN HANDLE FileHandle OPTIONAL); |
michael@0 | 207 | |
michael@0 | 208 | typedef ULONG SECTION_INHERIT; |
michael@0 | 209 | #define ViewShare 1 |
michael@0 | 210 | #define ViewUnmap 2 |
michael@0 | 211 | |
michael@0 | 212 | typedef NTSTATUS (WINAPI *NtMapViewOfSectionFunction)( |
michael@0 | 213 | IN HANDLE SectionHandle, |
michael@0 | 214 | IN HANDLE ProcessHandle, |
michael@0 | 215 | IN OUT PVOID *BaseAddress, |
michael@0 | 216 | IN ULONG_PTR ZeroBits, |
michael@0 | 217 | IN SIZE_T CommitSize, |
michael@0 | 218 | IN OUT PLARGE_INTEGER SectionOffset OPTIONAL, |
michael@0 | 219 | IN OUT PSIZE_T ViewSize, |
michael@0 | 220 | IN SECTION_INHERIT InheritDisposition, |
michael@0 | 221 | IN ULONG AllocationType, |
michael@0 | 222 | IN ULONG Win32Protect); |
michael@0 | 223 | |
michael@0 | 224 | typedef NTSTATUS (WINAPI *NtUnmapViewOfSectionFunction)( |
michael@0 | 225 | IN HANDLE ProcessHandle, |
michael@0 | 226 | IN PVOID BaseAddress); |
michael@0 | 227 | |
michael@0 | 228 | typedef enum _SECTION_INFORMATION_CLASS { |
michael@0 | 229 | SectionBasicInformation = 0, |
michael@0 | 230 | SectionImageInformation |
michael@0 | 231 | } SECTION_INFORMATION_CLASS; |
michael@0 | 232 | |
michael@0 | 233 | typedef struct _SECTION_BASIC_INFORMATION { |
michael@0 | 234 | PVOID BaseAddress; |
michael@0 | 235 | ULONG Attributes; |
michael@0 | 236 | LARGE_INTEGER Size; |
michael@0 | 237 | } SECTION_BASIC_INFORMATION, *PSECTION_BASIC_INFORMATION; |
michael@0 | 238 | |
michael@0 | 239 | typedef NTSTATUS (WINAPI *NtQuerySectionFunction)( |
michael@0 | 240 | IN HANDLE SectionHandle, |
michael@0 | 241 | IN SECTION_INFORMATION_CLASS SectionInformationClass, |
michael@0 | 242 | OUT PVOID SectionInformation, |
michael@0 | 243 | IN SIZE_T SectionInformationLength, |
michael@0 | 244 | OUT PSIZE_T ReturnLength OPTIONAL); |
michael@0 | 245 | |
michael@0 | 246 | // ----------------------------------------------------------------------- |
michael@0 | 247 | // Process and Thread |
michael@0 | 248 | |
michael@0 | 249 | typedef struct _CLIENT_ID { |
michael@0 | 250 | PVOID UniqueProcess; |
michael@0 | 251 | PVOID UniqueThread; |
michael@0 | 252 | } CLIENT_ID, *PCLIENT_ID; |
michael@0 | 253 | |
michael@0 | 254 | typedef NTSTATUS (WINAPI *NtOpenThreadFunction) ( |
michael@0 | 255 | OUT PHANDLE ThreadHandle, |
michael@0 | 256 | IN ACCESS_MASK DesiredAccess, |
michael@0 | 257 | IN POBJECT_ATTRIBUTES ObjectAttributes, |
michael@0 | 258 | IN PCLIENT_ID ClientId); |
michael@0 | 259 | |
michael@0 | 260 | typedef NTSTATUS (WINAPI *NtOpenProcessFunction) ( |
michael@0 | 261 | OUT PHANDLE ProcessHandle, |
michael@0 | 262 | IN ACCESS_MASK DesiredAccess, |
michael@0 | 263 | IN POBJECT_ATTRIBUTES ObjectAttributes, |
michael@0 | 264 | IN PCLIENT_ID ClientId); |
michael@0 | 265 | |
michael@0 | 266 | typedef enum _NT_THREAD_INFORMATION_CLASS { |
michael@0 | 267 | ThreadBasicInformation, |
michael@0 | 268 | ThreadTimes, |
michael@0 | 269 | ThreadPriority, |
michael@0 | 270 | ThreadBasePriority, |
michael@0 | 271 | ThreadAffinityMask, |
michael@0 | 272 | ThreadImpersonationToken, |
michael@0 | 273 | ThreadDescriptorTableEntry, |
michael@0 | 274 | ThreadEnableAlignmentFaultFixup, |
michael@0 | 275 | ThreadEventPair, |
michael@0 | 276 | ThreadQuerySetWin32StartAddress, |
michael@0 | 277 | ThreadZeroTlsCell, |
michael@0 | 278 | ThreadPerformanceCount, |
michael@0 | 279 | ThreadAmILastThread, |
michael@0 | 280 | ThreadIdealProcessor, |
michael@0 | 281 | ThreadPriorityBoost, |
michael@0 | 282 | ThreadSetTlsArrayAddress, |
michael@0 | 283 | ThreadIsIoPending, |
michael@0 | 284 | ThreadHideFromDebugger |
michael@0 | 285 | } NT_THREAD_INFORMATION_CLASS, *PNT_THREAD_INFORMATION_CLASS; |
michael@0 | 286 | |
michael@0 | 287 | typedef NTSTATUS (WINAPI *NtSetInformationThreadFunction) ( |
michael@0 | 288 | IN HANDLE ThreadHandle, |
michael@0 | 289 | IN NT_THREAD_INFORMATION_CLASS ThreadInformationClass, |
michael@0 | 290 | IN PVOID ThreadInformation, |
michael@0 | 291 | IN ULONG ThreadInformationLength); |
michael@0 | 292 | |
michael@0 | 293 | // Partial definition only: |
michael@0 | 294 | typedef enum _PROCESSINFOCLASS { |
michael@0 | 295 | ProcessBasicInformation = 0, |
michael@0 | 296 | ProcessExecuteFlags = 0x22 |
michael@0 | 297 | } PROCESSINFOCLASS; |
michael@0 | 298 | |
michael@0 | 299 | typedef PVOID PPEB; |
michael@0 | 300 | typedef PVOID KPRIORITY; |
michael@0 | 301 | |
michael@0 | 302 | typedef struct _PROCESS_BASIC_INFORMATION { |
michael@0 | 303 | NTSTATUS ExitStatus; |
michael@0 | 304 | PPEB PebBaseAddress; |
michael@0 | 305 | KAFFINITY AffinityMask; |
michael@0 | 306 | KPRIORITY BasePriority; |
michael@0 | 307 | ULONG UniqueProcessId; |
michael@0 | 308 | ULONG InheritedFromUniqueProcessId; |
michael@0 | 309 | } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION; |
michael@0 | 310 | |
michael@0 | 311 | typedef NTSTATUS (WINAPI *NtQueryInformationProcessFunction)( |
michael@0 | 312 | IN HANDLE ProcessHandle, |
michael@0 | 313 | IN PROCESSINFOCLASS ProcessInformationClass, |
michael@0 | 314 | OUT PVOID ProcessInformation, |
michael@0 | 315 | IN ULONG ProcessInformationLength, |
michael@0 | 316 | OUT PULONG ReturnLength OPTIONAL); |
michael@0 | 317 | |
michael@0 | 318 | typedef NTSTATUS (WINAPI *NtSetInformationProcessFunction)( |
michael@0 | 319 | HANDLE ProcessHandle, |
michael@0 | 320 | IN PROCESSINFOCLASS ProcessInformationClass, |
michael@0 | 321 | IN PVOID ProcessInformation, |
michael@0 | 322 | IN ULONG ProcessInformationLength); |
michael@0 | 323 | |
michael@0 | 324 | typedef NTSTATUS (WINAPI *NtOpenThreadTokenFunction) ( |
michael@0 | 325 | IN HANDLE ThreadHandle, |
michael@0 | 326 | IN ACCESS_MASK DesiredAccess, |
michael@0 | 327 | IN BOOLEAN OpenAsSelf, |
michael@0 | 328 | OUT PHANDLE TokenHandle); |
michael@0 | 329 | |
michael@0 | 330 | typedef NTSTATUS (WINAPI *NtOpenThreadTokenExFunction) ( |
michael@0 | 331 | IN HANDLE ThreadHandle, |
michael@0 | 332 | IN ACCESS_MASK DesiredAccess, |
michael@0 | 333 | IN BOOLEAN OpenAsSelf, |
michael@0 | 334 | IN ULONG HandleAttributes, |
michael@0 | 335 | OUT PHANDLE TokenHandle); |
michael@0 | 336 | |
michael@0 | 337 | typedef NTSTATUS (WINAPI *NtOpenProcessTokenFunction) ( |
michael@0 | 338 | IN HANDLE ProcessHandle, |
michael@0 | 339 | IN ACCESS_MASK DesiredAccess, |
michael@0 | 340 | OUT PHANDLE TokenHandle); |
michael@0 | 341 | |
michael@0 | 342 | typedef NTSTATUS (WINAPI *NtOpenProcessTokenExFunction) ( |
michael@0 | 343 | IN HANDLE ProcessHandle, |
michael@0 | 344 | IN ACCESS_MASK DesiredAccess, |
michael@0 | 345 | IN ULONG HandleAttributes, |
michael@0 | 346 | OUT PHANDLE TokenHandle); |
michael@0 | 347 | |
michael@0 | 348 | typedef NTSTATUS (WINAPI * RtlCreateUserThreadFunction)( |
michael@0 | 349 | IN HANDLE Process, |
michael@0 | 350 | IN PSECURITY_DESCRIPTOR ThreadSecurityDescriptor, |
michael@0 | 351 | IN BOOLEAN CreateSuspended, |
michael@0 | 352 | IN ULONG ZeroBits, |
michael@0 | 353 | IN SIZE_T MaximumStackSize, |
michael@0 | 354 | IN SIZE_T CommittedStackSize, |
michael@0 | 355 | IN LPTHREAD_START_ROUTINE StartAddress, |
michael@0 | 356 | IN PVOID Parameter, |
michael@0 | 357 | OUT PHANDLE Thread, |
michael@0 | 358 | OUT PCLIENT_ID ClientId); |
michael@0 | 359 | |
michael@0 | 360 | // ----------------------------------------------------------------------- |
michael@0 | 361 | // Registry |
michael@0 | 362 | |
michael@0 | 363 | typedef NTSTATUS (WINAPI *NtCreateKeyFunction)( |
michael@0 | 364 | OUT PHANDLE KeyHandle, |
michael@0 | 365 | IN ACCESS_MASK DesiredAccess, |
michael@0 | 366 | IN POBJECT_ATTRIBUTES ObjectAttributes, |
michael@0 | 367 | IN ULONG TitleIndex, |
michael@0 | 368 | IN PUNICODE_STRING Class OPTIONAL, |
michael@0 | 369 | IN ULONG CreateOptions, |
michael@0 | 370 | OUT PULONG Disposition OPTIONAL); |
michael@0 | 371 | |
michael@0 | 372 | typedef NTSTATUS (WINAPI *NtOpenKeyFunction)( |
michael@0 | 373 | OUT PHANDLE KeyHandle, |
michael@0 | 374 | IN ACCESS_MASK DesiredAccess, |
michael@0 | 375 | IN POBJECT_ATTRIBUTES ObjectAttributes); |
michael@0 | 376 | |
michael@0 | 377 | typedef NTSTATUS (WINAPI *NtOpenKeyExFunction)( |
michael@0 | 378 | OUT PHANDLE KeyHandle, |
michael@0 | 379 | IN ACCESS_MASK DesiredAccess, |
michael@0 | 380 | IN POBJECT_ATTRIBUTES ObjectAttributes, |
michael@0 | 381 | IN DWORD open_options); |
michael@0 | 382 | |
michael@0 | 383 | typedef NTSTATUS (WINAPI *NtDeleteKeyFunction)( |
michael@0 | 384 | IN HANDLE KeyHandle); |
michael@0 | 385 | |
michael@0 | 386 | // ----------------------------------------------------------------------- |
michael@0 | 387 | // Memory |
michael@0 | 388 | |
michael@0 | 389 | // Don't really need this structure right now. |
michael@0 | 390 | typedef PVOID PRTL_HEAP_PARAMETERS; |
michael@0 | 391 | |
michael@0 | 392 | typedef PVOID (WINAPI *RtlCreateHeapFunction)( |
michael@0 | 393 | IN ULONG Flags, |
michael@0 | 394 | IN PVOID HeapBase OPTIONAL, |
michael@0 | 395 | IN SIZE_T ReserveSize OPTIONAL, |
michael@0 | 396 | IN SIZE_T CommitSize OPTIONAL, |
michael@0 | 397 | IN PVOID Lock OPTIONAL, |
michael@0 | 398 | IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL); |
michael@0 | 399 | |
michael@0 | 400 | typedef PVOID (WINAPI *RtlDestroyHeapFunction)( |
michael@0 | 401 | IN PVOID HeapHandle); |
michael@0 | 402 | |
michael@0 | 403 | typedef PVOID (WINAPI *RtlAllocateHeapFunction)( |
michael@0 | 404 | IN PVOID HeapHandle, |
michael@0 | 405 | IN ULONG Flags, |
michael@0 | 406 | IN SIZE_T Size); |
michael@0 | 407 | |
michael@0 | 408 | typedef BOOLEAN (WINAPI *RtlFreeHeapFunction)( |
michael@0 | 409 | IN PVOID HeapHandle, |
michael@0 | 410 | IN ULONG Flags, |
michael@0 | 411 | IN PVOID HeapBase); |
michael@0 | 412 | |
michael@0 | 413 | typedef NTSTATUS (WINAPI *NtAllocateVirtualMemoryFunction) ( |
michael@0 | 414 | IN HANDLE ProcessHandle, |
michael@0 | 415 | IN OUT PVOID *BaseAddress, |
michael@0 | 416 | IN ULONG_PTR ZeroBits, |
michael@0 | 417 | IN OUT PSIZE_T RegionSize, |
michael@0 | 418 | IN ULONG AllocationType, |
michael@0 | 419 | IN ULONG Protect); |
michael@0 | 420 | |
michael@0 | 421 | typedef NTSTATUS (WINAPI *NtFreeVirtualMemoryFunction) ( |
michael@0 | 422 | IN HANDLE ProcessHandle, |
michael@0 | 423 | IN OUT PVOID *BaseAddress, |
michael@0 | 424 | IN OUT PSIZE_T RegionSize, |
michael@0 | 425 | IN ULONG FreeType); |
michael@0 | 426 | |
michael@0 | 427 | typedef enum _MEMORY_INFORMATION_CLASS { |
michael@0 | 428 | MemoryBasicInformation = 0, |
michael@0 | 429 | MemoryWorkingSetList, |
michael@0 | 430 | MemorySectionName, |
michael@0 | 431 | MemoryBasicVlmInformation |
michael@0 | 432 | } MEMORY_INFORMATION_CLASS; |
michael@0 | 433 | |
michael@0 | 434 | typedef struct _MEMORY_SECTION_NAME { // Information Class 2 |
michael@0 | 435 | UNICODE_STRING SectionFileName; |
michael@0 | 436 | } MEMORY_SECTION_NAME, *PMEMORY_SECTION_NAME; |
michael@0 | 437 | |
michael@0 | 438 | typedef NTSTATUS (WINAPI *NtQueryVirtualMemoryFunction)( |
michael@0 | 439 | IN HANDLE ProcessHandle, |
michael@0 | 440 | IN PVOID BaseAddress, |
michael@0 | 441 | IN MEMORY_INFORMATION_CLASS MemoryInformationClass, |
michael@0 | 442 | OUT PVOID MemoryInformation, |
michael@0 | 443 | IN ULONG MemoryInformationLength, |
michael@0 | 444 | OUT PULONG ReturnLength OPTIONAL); |
michael@0 | 445 | |
michael@0 | 446 | typedef NTSTATUS (WINAPI *NtProtectVirtualMemoryFunction)( |
michael@0 | 447 | IN HANDLE ProcessHandle, |
michael@0 | 448 | IN OUT PVOID* BaseAddress, |
michael@0 | 449 | IN OUT PSIZE_T ProtectSize, |
michael@0 | 450 | IN ULONG NewProtect, |
michael@0 | 451 | OUT PULONG OldProtect); |
michael@0 | 452 | |
michael@0 | 453 | // ----------------------------------------------------------------------- |
michael@0 | 454 | // Objects |
michael@0 | 455 | |
michael@0 | 456 | typedef enum _OBJECT_INFORMATION_CLASS { |
michael@0 | 457 | ObjectBasicInformation, |
michael@0 | 458 | ObjectNameInformation, |
michael@0 | 459 | ObjectTypeInformation, |
michael@0 | 460 | ObjectAllInformation, |
michael@0 | 461 | ObjectDataInformation |
michael@0 | 462 | } OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS; |
michael@0 | 463 | |
michael@0 | 464 | typedef struct _OBJDIR_INFORMATION { |
michael@0 | 465 | UNICODE_STRING ObjectName; |
michael@0 | 466 | UNICODE_STRING ObjectTypeName; |
michael@0 | 467 | BYTE Data[1]; |
michael@0 | 468 | } OBJDIR_INFORMATION; |
michael@0 | 469 | |
michael@0 | 470 | typedef struct _PUBLIC_OBJECT_BASIC_INFORMATION { |
michael@0 | 471 | ULONG Attributes; |
michael@0 | 472 | ACCESS_MASK GrantedAccess; |
michael@0 | 473 | ULONG HandleCount; |
michael@0 | 474 | ULONG PointerCount; |
michael@0 | 475 | ULONG Reserved[10]; // reserved for internal use |
michael@0 | 476 | } PUBLIC_OBJECT_BASIC_INFORMATION, *PPUBLIC_OBJECT_BASIC_INFORMATION; |
michael@0 | 477 | |
michael@0 | 478 | typedef struct __PUBLIC_OBJECT_TYPE_INFORMATION { |
michael@0 | 479 | UNICODE_STRING TypeName; |
michael@0 | 480 | ULONG Reserved[22]; // reserved for internal use |
michael@0 | 481 | } PUBLIC_OBJECT_TYPE_INFORMATION, *PPUBLIC_OBJECT_TYPE_INFORMATION; |
michael@0 | 482 | |
michael@0 | 483 | typedef enum _POOL_TYPE { |
michael@0 | 484 | NonPagedPool, |
michael@0 | 485 | PagedPool, |
michael@0 | 486 | NonPagedPoolMustSucceed, |
michael@0 | 487 | ReservedType, |
michael@0 | 488 | NonPagedPoolCacheAligned, |
michael@0 | 489 | PagedPoolCacheAligned, |
michael@0 | 490 | NonPagedPoolCacheAlignedMustS |
michael@0 | 491 | } POOL_TYPE; |
michael@0 | 492 | |
michael@0 | 493 | typedef struct _OBJECT_BASIC_INFORMATION { |
michael@0 | 494 | ULONG Attributes; |
michael@0 | 495 | ACCESS_MASK GrantedAccess; |
michael@0 | 496 | ULONG HandleCount; |
michael@0 | 497 | ULONG PointerCount; |
michael@0 | 498 | ULONG PagedPoolUsage; |
michael@0 | 499 | ULONG NonPagedPoolUsage; |
michael@0 | 500 | ULONG Reserved[3]; |
michael@0 | 501 | ULONG NameInformationLength; |
michael@0 | 502 | ULONG TypeInformationLength; |
michael@0 | 503 | ULONG SecurityDescriptorLength; |
michael@0 | 504 | LARGE_INTEGER CreateTime; |
michael@0 | 505 | } OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION; |
michael@0 | 506 | |
michael@0 | 507 | typedef struct _OBJECT_TYPE_INFORMATION { |
michael@0 | 508 | UNICODE_STRING Name; |
michael@0 | 509 | ULONG TotalNumberOfObjects; |
michael@0 | 510 | ULONG TotalNumberOfHandles; |
michael@0 | 511 | ULONG TotalPagedPoolUsage; |
michael@0 | 512 | ULONG TotalNonPagedPoolUsage; |
michael@0 | 513 | ULONG TotalNamePoolUsage; |
michael@0 | 514 | ULONG TotalHandleTableUsage; |
michael@0 | 515 | ULONG HighWaterNumberOfObjects; |
michael@0 | 516 | ULONG HighWaterNumberOfHandles; |
michael@0 | 517 | ULONG HighWaterPagedPoolUsage; |
michael@0 | 518 | ULONG HighWaterNonPagedPoolUsage; |
michael@0 | 519 | ULONG HighWaterNamePoolUsage; |
michael@0 | 520 | ULONG HighWaterHandleTableUsage; |
michael@0 | 521 | ULONG InvalidAttributes; |
michael@0 | 522 | GENERIC_MAPPING GenericMapping; |
michael@0 | 523 | ULONG ValidAccess; |
michael@0 | 524 | BOOLEAN SecurityRequired; |
michael@0 | 525 | BOOLEAN MaintainHandleCount; |
michael@0 | 526 | USHORT MaintainTypeList; |
michael@0 | 527 | POOL_TYPE PoolType; |
michael@0 | 528 | ULONG PagedPoolUsage; |
michael@0 | 529 | ULONG NonPagedPoolUsage; |
michael@0 | 530 | } OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION; |
michael@0 | 531 | |
michael@0 | 532 | typedef enum _SYSTEM_INFORMATION_CLASS { |
michael@0 | 533 | SystemHandleInformation = 16 |
michael@0 | 534 | } SYSTEM_INFORMATION_CLASS; |
michael@0 | 535 | |
michael@0 | 536 | typedef struct _SYSTEM_HANDLE_INFORMATION { |
michael@0 | 537 | USHORT ProcessId; |
michael@0 | 538 | USHORT CreatorBackTraceIndex; |
michael@0 | 539 | UCHAR ObjectTypeNumber; |
michael@0 | 540 | UCHAR Flags; |
michael@0 | 541 | USHORT Handle; |
michael@0 | 542 | PVOID Object; |
michael@0 | 543 | ACCESS_MASK GrantedAccess; |
michael@0 | 544 | } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION; |
michael@0 | 545 | |
michael@0 | 546 | typedef struct _SYSTEM_HANDLE_INFORMATION_EX { |
michael@0 | 547 | ULONG NumberOfHandles; |
michael@0 | 548 | SYSTEM_HANDLE_INFORMATION Information[1]; |
michael@0 | 549 | } SYSTEM_HANDLE_INFORMATION_EX, *PSYSTEM_HANDLE_INFORMATION_EX; |
michael@0 | 550 | |
michael@0 | 551 | typedef struct _OBJECT_NAME_INFORMATION { |
michael@0 | 552 | UNICODE_STRING ObjectName; |
michael@0 | 553 | } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION; |
michael@0 | 554 | |
michael@0 | 555 | typedef NTSTATUS (WINAPI *NtQueryObjectFunction)( |
michael@0 | 556 | IN HANDLE Handle, |
michael@0 | 557 | IN OBJECT_INFORMATION_CLASS ObjectInformationClass, |
michael@0 | 558 | OUT PVOID ObjectInformation OPTIONAL, |
michael@0 | 559 | IN ULONG ObjectInformationLength, |
michael@0 | 560 | OUT PULONG ReturnLength OPTIONAL); |
michael@0 | 561 | |
michael@0 | 562 | typedef NTSTATUS (WINAPI *NtDuplicateObjectFunction)( |
michael@0 | 563 | IN HANDLE SourceProcess, |
michael@0 | 564 | IN HANDLE SourceHandle, |
michael@0 | 565 | IN HANDLE TargetProcess, |
michael@0 | 566 | OUT PHANDLE TargetHandle, |
michael@0 | 567 | IN ACCESS_MASK DesiredAccess, |
michael@0 | 568 | IN ULONG Attributes, |
michael@0 | 569 | IN ULONG Options); |
michael@0 | 570 | |
michael@0 | 571 | typedef NTSTATUS (WINAPI *NtSignalAndWaitForSingleObjectFunction)( |
michael@0 | 572 | IN HANDLE HandleToSignal, |
michael@0 | 573 | IN HANDLE HandleToWait, |
michael@0 | 574 | IN BOOLEAN Alertable, |
michael@0 | 575 | IN PLARGE_INTEGER Timeout OPTIONAL); |
michael@0 | 576 | |
michael@0 | 577 | typedef NTSTATUS (WINAPI *NtQuerySystemInformation)( |
michael@0 | 578 | IN SYSTEM_INFORMATION_CLASS SystemInformationClass, |
michael@0 | 579 | OUT PVOID SystemInformation, |
michael@0 | 580 | IN ULONG SystemInformationLength, |
michael@0 | 581 | OUT PULONG ReturnLength); |
michael@0 | 582 | |
michael@0 | 583 | typedef NTSTATUS (WINAPI *NtQueryObject)( |
michael@0 | 584 | IN HANDLE Handle, |
michael@0 | 585 | IN OBJECT_INFORMATION_CLASS ObjectInformationClass, |
michael@0 | 586 | OUT PVOID ObjectInformation, |
michael@0 | 587 | IN ULONG ObjectInformationLength, |
michael@0 | 588 | OUT PULONG ReturnLength); |
michael@0 | 589 | |
michael@0 | 590 | // ----------------------------------------------------------------------- |
michael@0 | 591 | // Strings |
michael@0 | 592 | |
michael@0 | 593 | typedef int (__cdecl *_strnicmpFunction)( |
michael@0 | 594 | IN const char* _Str1, |
michael@0 | 595 | IN const char* _Str2, |
michael@0 | 596 | IN size_t _MaxCount); |
michael@0 | 597 | |
michael@0 | 598 | typedef size_t (__cdecl *strlenFunction)( |
michael@0 | 599 | IN const char * _Str); |
michael@0 | 600 | |
michael@0 | 601 | typedef size_t (__cdecl *wcslenFunction)( |
michael@0 | 602 | IN const wchar_t* _Str); |
michael@0 | 603 | |
michael@0 | 604 | typedef NTSTATUS (WINAPI *RtlAnsiStringToUnicodeStringFunction)( |
michael@0 | 605 | IN OUT PUNICODE_STRING DestinationString, |
michael@0 | 606 | IN PANSI_STRING SourceString, |
michael@0 | 607 | IN BOOLEAN AllocateDestinationString); |
michael@0 | 608 | |
michael@0 | 609 | typedef LONG (WINAPI *RtlCompareUnicodeStringFunction)( |
michael@0 | 610 | IN PCUNICODE_STRING String1, |
michael@0 | 611 | IN PCUNICODE_STRING String2, |
michael@0 | 612 | IN BOOLEAN CaseInSensitive); |
michael@0 | 613 | |
michael@0 | 614 | typedef VOID (WINAPI *RtlInitUnicodeStringFunction) ( |
michael@0 | 615 | IN OUT PUNICODE_STRING DestinationString, |
michael@0 | 616 | IN PCWSTR SourceString); |
michael@0 | 617 | |
michael@0 | 618 | #endif // SANDBOX_WIN_SRC_NT_INTERNALS_H__ |
michael@0 | 619 |