security/sandbox/win/src/nt_internals.h

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

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

mercurial