1 // Copyright 2013 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 // This file holds definitions related to the ntdll API.
7 #ifndef SANDBOX_WIN_SRC_NT_INTERNALS_H__
8 #define SANDBOX_WIN_SRC_NT_INTERNALS_H__
12 typedef LONG NTSTATUS
;
13 #define NT_SUCCESS(st) (st >= 0)
15 #define STATUS_SUCCESS ((NTSTATUS)0x00000000L)
16 #define STATUS_BUFFER_OVERFLOW ((NTSTATUS)0x80000005L)
17 #define STATUS_UNSUCCESSFUL ((NTSTATUS)0xC0000001L)
18 #define STATUS_NOT_IMPLEMENTED ((NTSTATUS)0xC0000002L)
19 #define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS)0xC0000004L)
20 #ifndef STATUS_INVALID_PARAMETER
21 // It is now defined in Windows 2008 SDK.
22 #define STATUS_INVALID_PARAMETER ((NTSTATUS)0xC000000DL)
24 #define STATUS_CONFLICTING_ADDRESSES ((NTSTATUS)0xC0000018L)
25 #define STATUS_ACCESS_DENIED ((NTSTATUS)0xC0000022L)
26 #define STATUS_BUFFER_TOO_SMALL ((NTSTATUS)0xC0000023L)
27 #define STATUS_OBJECT_NAME_NOT_FOUND ((NTSTATUS)0xC0000034L)
28 #define STATUS_PROCEDURE_NOT_FOUND ((NTSTATUS)0xC000007AL)
29 #define STATUS_INVALID_IMAGE_FORMAT ((NTSTATUS)0xC000007BL)
30 #define STATUS_NO_TOKEN ((NTSTATUS)0xC000007CL)
32 #define CURRENT_PROCESS ((HANDLE) -1)
33 #define CURRENT_THREAD ((HANDLE) -2)
34 #define NtCurrentProcess CURRENT_PROCESS
36 typedef struct _UNICODE_STRING
{
41 typedef UNICODE_STRING
*PUNICODE_STRING
;
42 typedef const UNICODE_STRING
*PCUNICODE_STRING
;
44 typedef struct _STRING
{
49 typedef STRING
*PSTRING
;
51 typedef STRING ANSI_STRING
;
52 typedef PSTRING PANSI_STRING
;
53 typedef CONST PSTRING PCANSI_STRING
;
55 typedef STRING OEM_STRING
;
56 typedef PSTRING POEM_STRING
;
57 typedef CONST STRING
* PCOEM_STRING
;
59 #define OBJ_CASE_INSENSITIVE 0x00000040L
61 typedef struct _OBJECT_ATTRIBUTES
{
64 PUNICODE_STRING ObjectName
;
66 PVOID SecurityDescriptor
;
67 PVOID SecurityQualityOfService
;
69 typedef OBJECT_ATTRIBUTES
*POBJECT_ATTRIBUTES
;
71 #define InitializeObjectAttributes(p, n, a, r, s) { \
72 (p)->Length = sizeof(OBJECT_ATTRIBUTES);\
73 (p)->RootDirectory = r;\
76 (p)->SecurityDescriptor = s;\
77 (p)->SecurityQualityOfService = NULL;\
80 typedef struct _IO_STATUS_BLOCK
{
85 ULONG_PTR Information
;
86 } IO_STATUS_BLOCK
, *PIO_STATUS_BLOCK
;
88 // -----------------------------------------------------------------------
91 // Create disposition values.
93 #define FILE_SUPERSEDE 0x00000000
94 #define FILE_OPEN 0x00000001
95 #define FILE_CREATE 0x00000002
96 #define FILE_OPEN_IF 0x00000003
97 #define FILE_OVERWRITE 0x00000004
98 #define FILE_OVERWRITE_IF 0x00000005
99 #define FILE_MAXIMUM_DISPOSITION 0x00000005
101 // Create/open option flags.
103 #define FILE_DIRECTORY_FILE 0x00000001
104 #define FILE_WRITE_THROUGH 0x00000002
105 #define FILE_SEQUENTIAL_ONLY 0x00000004
106 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
108 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
109 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
110 #define FILE_NON_DIRECTORY_FILE 0x00000040
111 #define FILE_CREATE_TREE_CONNECTION 0x00000080
113 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
114 #define FILE_NO_EA_KNOWLEDGE 0x00000200
115 #define FILE_OPEN_REMOTE_INSTANCE 0x00000400
116 #define FILE_RANDOM_ACCESS 0x00000800
118 #define FILE_DELETE_ON_CLOSE 0x00001000
119 #define FILE_OPEN_BY_FILE_ID 0x00002000
120 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
121 #define FILE_NO_COMPRESSION 0x00008000
123 #define FILE_RESERVE_OPFILTER 0x00100000
124 #define FILE_OPEN_REPARSE_POINT 0x00200000
125 #define FILE_OPEN_NO_RECALL 0x00400000
126 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
128 typedef NTSTATUS (WINAPI
*NtCreateFileFunction
)(
129 OUT PHANDLE FileHandle
,
130 IN ACCESS_MASK DesiredAccess
,
131 IN POBJECT_ATTRIBUTES ObjectAttributes
,
132 OUT PIO_STATUS_BLOCK IoStatusBlock
,
133 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
134 IN ULONG FileAttributes
,
135 IN ULONG ShareAccess
,
136 IN ULONG CreateDisposition
,
137 IN ULONG CreateOptions
,
138 IN PVOID EaBuffer OPTIONAL
,
141 typedef NTSTATUS (WINAPI
*NtOpenFileFunction
)(
142 OUT PHANDLE FileHandle
,
143 IN ACCESS_MASK DesiredAccess
,
144 IN POBJECT_ATTRIBUTES ObjectAttributes
,
145 OUT PIO_STATUS_BLOCK IoStatusBlock
,
146 IN ULONG ShareAccess
,
147 IN ULONG OpenOptions
);
149 typedef NTSTATUS (WINAPI
*NtCloseFunction
)(
152 typedef enum _FILE_INFORMATION_CLASS
{
153 FileRenameInformation
= 10
154 } FILE_INFORMATION_CLASS
, *PFILE_INFORMATION_CLASS
;
156 typedef struct _FILE_RENAME_INFORMATION
{
157 BOOLEAN ReplaceIfExists
;
158 HANDLE RootDirectory
;
159 ULONG FileNameLength
;
161 } FILE_RENAME_INFORMATION
, *PFILE_RENAME_INFORMATION
;
163 typedef NTSTATUS (WINAPI
*NtSetInformationFileFunction
)(
164 IN HANDLE FileHandle
,
165 OUT PIO_STATUS_BLOCK IoStatusBlock
,
166 IN PVOID FileInformation
,
168 IN FILE_INFORMATION_CLASS FileInformationClass
);
170 typedef struct FILE_BASIC_INFORMATION
{
171 LARGE_INTEGER CreationTime
;
172 LARGE_INTEGER LastAccessTime
;
173 LARGE_INTEGER LastWriteTime
;
174 LARGE_INTEGER ChangeTime
;
175 ULONG FileAttributes
;
176 } FILE_BASIC_INFORMATION
, *PFILE_BASIC_INFORMATION
;
178 typedef NTSTATUS (WINAPI
*NtQueryAttributesFileFunction
)(
179 IN POBJECT_ATTRIBUTES ObjectAttributes
,
180 OUT PFILE_BASIC_INFORMATION FileAttributes
);
182 typedef struct _FILE_NETWORK_OPEN_INFORMATION
{
183 LARGE_INTEGER CreationTime
;
184 LARGE_INTEGER LastAccessTime
;
185 LARGE_INTEGER LastWriteTime
;
186 LARGE_INTEGER ChangeTime
;
187 LARGE_INTEGER AllocationSize
;
188 LARGE_INTEGER EndOfFile
;
189 ULONG FileAttributes
;
190 } FILE_NETWORK_OPEN_INFORMATION
, *PFILE_NETWORK_OPEN_INFORMATION
;
192 typedef NTSTATUS (WINAPI
*NtQueryFullAttributesFileFunction
)(
193 IN POBJECT_ATTRIBUTES ObjectAttributes
,
194 OUT PFILE_NETWORK_OPEN_INFORMATION FileAttributes
);
196 // -----------------------------------------------------------------------
199 typedef NTSTATUS (WINAPI
*NtCreateSectionFunction
)(
200 OUT PHANDLE SectionHandle
,
201 IN ACCESS_MASK DesiredAccess
,
202 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
203 IN PLARGE_INTEGER MaximumSize OPTIONAL
,
204 IN ULONG SectionPageProtection
,
205 IN ULONG AllocationAttributes
,
206 IN HANDLE FileHandle OPTIONAL
);
208 typedef ULONG SECTION_INHERIT
;
212 typedef NTSTATUS (WINAPI
*NtMapViewOfSectionFunction
)(
213 IN HANDLE SectionHandle
,
214 IN HANDLE ProcessHandle
,
215 IN OUT PVOID
*BaseAddress
,
216 IN ULONG_PTR ZeroBits
,
217 IN SIZE_T CommitSize
,
218 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL
,
219 IN OUT PSIZE_T ViewSize
,
220 IN SECTION_INHERIT InheritDisposition
,
221 IN ULONG AllocationType
,
222 IN ULONG Win32Protect
);
224 typedef NTSTATUS (WINAPI
*NtUnmapViewOfSectionFunction
)(
225 IN HANDLE ProcessHandle
,
226 IN PVOID BaseAddress
);
228 typedef enum _SECTION_INFORMATION_CLASS
{
229 SectionBasicInformation
= 0,
230 SectionImageInformation
231 } SECTION_INFORMATION_CLASS
;
233 typedef struct _SECTION_BASIC_INFORMATION
{
237 } SECTION_BASIC_INFORMATION
, *PSECTION_BASIC_INFORMATION
;
239 typedef NTSTATUS (WINAPI
*NtQuerySectionFunction
)(
240 IN HANDLE SectionHandle
,
241 IN SECTION_INFORMATION_CLASS SectionInformationClass
,
242 OUT PVOID SectionInformation
,
243 IN SIZE_T SectionInformationLength
,
244 OUT PSIZE_T ReturnLength OPTIONAL
);
246 // -----------------------------------------------------------------------
247 // Process and Thread
249 typedef struct _CLIENT_ID
{
252 } CLIENT_ID
, *PCLIENT_ID
;
254 typedef NTSTATUS (WINAPI
*NtOpenThreadFunction
) (
255 OUT PHANDLE ThreadHandle
,
256 IN ACCESS_MASK DesiredAccess
,
257 IN POBJECT_ATTRIBUTES ObjectAttributes
,
258 IN PCLIENT_ID ClientId
);
260 typedef NTSTATUS (WINAPI
*NtOpenProcessFunction
) (
261 OUT PHANDLE ProcessHandle
,
262 IN ACCESS_MASK DesiredAccess
,
263 IN POBJECT_ATTRIBUTES ObjectAttributes
,
264 IN PCLIENT_ID ClientId
);
266 typedef enum _NT_THREAD_INFORMATION_CLASS
{
267 ThreadBasicInformation
,
272 ThreadImpersonationToken
,
273 ThreadDescriptorTableEntry
,
274 ThreadEnableAlignmentFaultFixup
,
276 ThreadQuerySetWin32StartAddress
,
278 ThreadPerformanceCount
,
280 ThreadIdealProcessor
,
282 ThreadSetTlsArrayAddress
,
284 ThreadHideFromDebugger
285 } NT_THREAD_INFORMATION_CLASS
, *PNT_THREAD_INFORMATION_CLASS
;
287 typedef NTSTATUS (WINAPI
*NtSetInformationThreadFunction
) (
288 IN HANDLE ThreadHandle
,
289 IN NT_THREAD_INFORMATION_CLASS ThreadInformationClass
,
290 IN PVOID ThreadInformation
,
291 IN ULONG ThreadInformationLength
);
293 // Partial definition only:
294 typedef enum _PROCESSINFOCLASS
{
295 ProcessBasicInformation
= 0,
296 ProcessExecuteFlags
= 0x22
300 typedef PVOID KPRIORITY
;
302 typedef struct _PROCESS_BASIC_INFORMATION
{
305 KAFFINITY AffinityMask
;
306 KPRIORITY BasePriority
;
307 ULONG UniqueProcessId
;
308 ULONG InheritedFromUniqueProcessId
;
309 } PROCESS_BASIC_INFORMATION
, *PPROCESS_BASIC_INFORMATION
;
311 typedef NTSTATUS (WINAPI
*NtQueryInformationProcessFunction
)(
312 IN HANDLE ProcessHandle
,
313 IN PROCESSINFOCLASS ProcessInformationClass
,
314 OUT PVOID ProcessInformation
,
315 IN ULONG ProcessInformationLength
,
316 OUT PULONG ReturnLength OPTIONAL
);
318 typedef NTSTATUS (WINAPI
*NtSetInformationProcessFunction
)(
319 HANDLE ProcessHandle
,
320 IN PROCESSINFOCLASS ProcessInformationClass
,
321 IN PVOID ProcessInformation
,
322 IN ULONG ProcessInformationLength
);
324 typedef NTSTATUS (WINAPI
*NtOpenThreadTokenFunction
) (
325 IN HANDLE ThreadHandle
,
326 IN ACCESS_MASK DesiredAccess
,
327 IN BOOLEAN OpenAsSelf
,
328 OUT PHANDLE TokenHandle
);
330 typedef NTSTATUS (WINAPI
*NtOpenThreadTokenExFunction
) (
331 IN HANDLE ThreadHandle
,
332 IN ACCESS_MASK DesiredAccess
,
333 IN BOOLEAN OpenAsSelf
,
334 IN ULONG HandleAttributes
,
335 OUT PHANDLE TokenHandle
);
337 typedef NTSTATUS (WINAPI
*NtOpenProcessTokenFunction
) (
338 IN HANDLE ProcessHandle
,
339 IN ACCESS_MASK DesiredAccess
,
340 OUT PHANDLE TokenHandle
);
342 typedef NTSTATUS (WINAPI
*NtOpenProcessTokenExFunction
) (
343 IN HANDLE ProcessHandle
,
344 IN ACCESS_MASK DesiredAccess
,
345 IN ULONG HandleAttributes
,
346 OUT PHANDLE TokenHandle
);
348 typedef NTSTATUS (WINAPI
* RtlCreateUserThreadFunction
)(
350 IN PSECURITY_DESCRIPTOR ThreadSecurityDescriptor
,
351 IN BOOLEAN CreateSuspended
,
353 IN SIZE_T MaximumStackSize
,
354 IN SIZE_T CommittedStackSize
,
355 IN LPTHREAD_START_ROUTINE StartAddress
,
358 OUT PCLIENT_ID ClientId
);
360 // -----------------------------------------------------------------------
363 typedef NTSTATUS (WINAPI
*NtCreateKeyFunction
)(
364 OUT PHANDLE KeyHandle
,
365 IN ACCESS_MASK DesiredAccess
,
366 IN POBJECT_ATTRIBUTES ObjectAttributes
,
368 IN PUNICODE_STRING Class OPTIONAL
,
369 IN ULONG CreateOptions
,
370 OUT PULONG Disposition OPTIONAL
);
372 typedef NTSTATUS (WINAPI
*NtOpenKeyFunction
)(
373 OUT PHANDLE KeyHandle
,
374 IN ACCESS_MASK DesiredAccess
,
375 IN POBJECT_ATTRIBUTES ObjectAttributes
);
377 typedef NTSTATUS (WINAPI
*NtOpenKeyExFunction
)(
378 OUT PHANDLE KeyHandle
,
379 IN ACCESS_MASK DesiredAccess
,
380 IN POBJECT_ATTRIBUTES ObjectAttributes
,
381 IN DWORD open_options
);
383 typedef NTSTATUS (WINAPI
*NtDeleteKeyFunction
)(
384 IN HANDLE KeyHandle
);
386 // -----------------------------------------------------------------------
389 // Don't really need this structure right now.
390 typedef PVOID PRTL_HEAP_PARAMETERS
;
392 typedef PVOID (WINAPI
*RtlCreateHeapFunction
)(
394 IN PVOID HeapBase OPTIONAL
,
395 IN SIZE_T ReserveSize OPTIONAL
,
396 IN SIZE_T CommitSize OPTIONAL
,
397 IN PVOID Lock OPTIONAL
,
398 IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL
);
400 typedef PVOID (WINAPI
*RtlDestroyHeapFunction
)(
401 IN PVOID HeapHandle
);
403 typedef PVOID (WINAPI
*RtlAllocateHeapFunction
)(
408 typedef BOOLEAN (WINAPI
*RtlFreeHeapFunction
)(
413 typedef NTSTATUS (WINAPI
*NtAllocateVirtualMemoryFunction
) (
414 IN HANDLE ProcessHandle
,
415 IN OUT PVOID
*BaseAddress
,
416 IN ULONG_PTR ZeroBits
,
417 IN OUT PSIZE_T RegionSize
,
418 IN ULONG AllocationType
,
421 typedef NTSTATUS (WINAPI
*NtFreeVirtualMemoryFunction
) (
422 IN HANDLE ProcessHandle
,
423 IN OUT PVOID
*BaseAddress
,
424 IN OUT PSIZE_T RegionSize
,
427 typedef enum _MEMORY_INFORMATION_CLASS
{
428 MemoryBasicInformation
= 0,
429 MemoryWorkingSetList
,
431 MemoryBasicVlmInformation
432 } MEMORY_INFORMATION_CLASS
;
434 typedef struct _MEMORY_SECTION_NAME
{ // Information Class 2
435 UNICODE_STRING SectionFileName
;
436 } MEMORY_SECTION_NAME
, *PMEMORY_SECTION_NAME
;
438 typedef NTSTATUS (WINAPI
*NtQueryVirtualMemoryFunction
)(
439 IN HANDLE ProcessHandle
,
440 IN PVOID BaseAddress
,
441 IN MEMORY_INFORMATION_CLASS MemoryInformationClass
,
442 OUT PVOID MemoryInformation
,
443 IN ULONG MemoryInformationLength
,
444 OUT PULONG ReturnLength OPTIONAL
);
446 typedef NTSTATUS (WINAPI
*NtProtectVirtualMemoryFunction
)(
447 IN HANDLE ProcessHandle
,
448 IN OUT PVOID
* BaseAddress
,
449 IN OUT PSIZE_T ProtectSize
,
451 OUT PULONG OldProtect
);
453 // -----------------------------------------------------------------------
456 typedef enum _OBJECT_INFORMATION_CLASS
{
457 ObjectBasicInformation
,
458 ObjectNameInformation
,
459 ObjectTypeInformation
,
460 ObjectAllInformation
,
461 ObjectDataInformation
462 } OBJECT_INFORMATION_CLASS
, *POBJECT_INFORMATION_CLASS
;
464 typedef struct _OBJDIR_INFORMATION
{
465 UNICODE_STRING ObjectName
;
466 UNICODE_STRING ObjectTypeName
;
468 } OBJDIR_INFORMATION
;
470 typedef struct _PUBLIC_OBJECT_BASIC_INFORMATION
{
472 ACCESS_MASK GrantedAccess
;
475 ULONG Reserved
[10]; // reserved for internal use
476 } PUBLIC_OBJECT_BASIC_INFORMATION
, *PPUBLIC_OBJECT_BASIC_INFORMATION
;
478 typedef struct __PUBLIC_OBJECT_TYPE_INFORMATION
{
479 UNICODE_STRING TypeName
;
480 ULONG Reserved
[22]; // reserved for internal use
481 } PUBLIC_OBJECT_TYPE_INFORMATION
, *PPUBLIC_OBJECT_TYPE_INFORMATION
;
483 typedef enum _POOL_TYPE
{
486 NonPagedPoolMustSucceed
,
488 NonPagedPoolCacheAligned
,
489 PagedPoolCacheAligned
,
490 NonPagedPoolCacheAlignedMustS
493 typedef struct _OBJECT_BASIC_INFORMATION
{
495 ACCESS_MASK GrantedAccess
;
498 ULONG PagedPoolUsage
;
499 ULONG NonPagedPoolUsage
;
501 ULONG NameInformationLength
;
502 ULONG TypeInformationLength
;
503 ULONG SecurityDescriptorLength
;
504 LARGE_INTEGER CreateTime
;
505 } OBJECT_BASIC_INFORMATION
, *POBJECT_BASIC_INFORMATION
;
507 typedef struct _OBJECT_TYPE_INFORMATION
{
509 ULONG TotalNumberOfObjects
;
510 ULONG TotalNumberOfHandles
;
511 ULONG TotalPagedPoolUsage
;
512 ULONG TotalNonPagedPoolUsage
;
513 ULONG TotalNamePoolUsage
;
514 ULONG TotalHandleTableUsage
;
515 ULONG HighWaterNumberOfObjects
;
516 ULONG HighWaterNumberOfHandles
;
517 ULONG HighWaterPagedPoolUsage
;
518 ULONG HighWaterNonPagedPoolUsage
;
519 ULONG HighWaterNamePoolUsage
;
520 ULONG HighWaterHandleTableUsage
;
521 ULONG InvalidAttributes
;
522 GENERIC_MAPPING GenericMapping
;
524 BOOLEAN SecurityRequired
;
525 BOOLEAN MaintainHandleCount
;
526 USHORT MaintainTypeList
;
528 ULONG PagedPoolUsage
;
529 ULONG NonPagedPoolUsage
;
530 } OBJECT_TYPE_INFORMATION
, *POBJECT_TYPE_INFORMATION
;
532 typedef enum _SYSTEM_INFORMATION_CLASS
{
533 SystemHandleInformation
= 16
534 } SYSTEM_INFORMATION_CLASS
;
536 typedef struct _SYSTEM_HANDLE_INFORMATION
{
538 USHORT CreatorBackTraceIndex
;
539 UCHAR ObjectTypeNumber
;
543 ACCESS_MASK GrantedAccess
;
544 } SYSTEM_HANDLE_INFORMATION
, *PSYSTEM_HANDLE_INFORMATION
;
546 typedef struct _SYSTEM_HANDLE_INFORMATION_EX
{
547 ULONG NumberOfHandles
;
548 SYSTEM_HANDLE_INFORMATION Information
[1];
549 } SYSTEM_HANDLE_INFORMATION_EX
, *PSYSTEM_HANDLE_INFORMATION_EX
;
551 typedef struct _OBJECT_NAME_INFORMATION
{
552 UNICODE_STRING ObjectName
;
553 } OBJECT_NAME_INFORMATION
, *POBJECT_NAME_INFORMATION
;
555 typedef NTSTATUS (WINAPI
*NtQueryObjectFunction
)(
557 IN OBJECT_INFORMATION_CLASS ObjectInformationClass
,
558 OUT PVOID ObjectInformation OPTIONAL
,
559 IN ULONG ObjectInformationLength
,
560 OUT PULONG ReturnLength OPTIONAL
);
562 typedef NTSTATUS (WINAPI
*NtDuplicateObjectFunction
)(
563 IN HANDLE SourceProcess
,
564 IN HANDLE SourceHandle
,
565 IN HANDLE TargetProcess
,
566 OUT PHANDLE TargetHandle
,
567 IN ACCESS_MASK DesiredAccess
,
571 typedef NTSTATUS (WINAPI
*NtSignalAndWaitForSingleObjectFunction
)(
572 IN HANDLE HandleToSignal
,
573 IN HANDLE HandleToWait
,
574 IN BOOLEAN Alertable
,
575 IN PLARGE_INTEGER Timeout OPTIONAL
);
577 typedef NTSTATUS (WINAPI
*NtQuerySystemInformation
)(
578 IN SYSTEM_INFORMATION_CLASS SystemInformationClass
,
579 OUT PVOID SystemInformation
,
580 IN ULONG SystemInformationLength
,
581 OUT PULONG ReturnLength
);
583 typedef NTSTATUS (WINAPI
*NtQueryObject
)(
585 IN OBJECT_INFORMATION_CLASS ObjectInformationClass
,
586 OUT PVOID ObjectInformation
,
587 IN ULONG ObjectInformationLength
,
588 OUT PULONG ReturnLength
);
590 // -----------------------------------------------------------------------
593 typedef int (__cdecl
*_strnicmpFunction
)(
594 IN
const char* _Str1
,
595 IN
const char* _Str2
,
596 IN
size_t _MaxCount
);
598 typedef size_t (__cdecl
*strlenFunction
)(
599 IN
const char * _Str
);
601 typedef size_t (__cdecl
*wcslenFunction
)(
602 IN
const wchar_t* _Str
);
604 typedef void* (__cdecl
*memcpyFunction
)(
609 typedef NTSTATUS (WINAPI
*RtlAnsiStringToUnicodeStringFunction
)(
610 IN OUT PUNICODE_STRING DestinationString
,
611 IN PANSI_STRING SourceString
,
612 IN BOOLEAN AllocateDestinationString
);
614 typedef LONG (WINAPI
*RtlCompareUnicodeStringFunction
)(
615 IN PCUNICODE_STRING String1
,
616 IN PCUNICODE_STRING String2
,
617 IN BOOLEAN CaseInSensitive
);
619 typedef VOID (WINAPI
*RtlInitUnicodeStringFunction
) (
620 IN OUT PUNICODE_STRING DestinationString
,
621 IN PCWSTR SourceString
);
623 typedef enum _EVENT_TYPE
{
626 } EVENT_TYPE
, *PEVENT_TYPE
;
628 typedef NTSTATUS (WINAPI
* NtOpenDirectoryObjectFunction
) (
629 PHANDLE DirectoryHandle
,
630 ACCESS_MASK DesiredAccess
,
631 POBJECT_ATTRIBUTES ObjectAttributes
);
633 typedef NTSTATUS (WINAPI
* NtQuerySymbolicLinkObjectFunction
) (
635 PUNICODE_STRING LinkTarget
,
636 PULONG ReturnedLength
);
638 typedef NTSTATUS (WINAPI
* NtOpenSymbolicLinkObjectFunction
) (
640 ACCESS_MASK DesiredAccess
,
641 POBJECT_ATTRIBUTES ObjectAttributes
);
643 #define DIRECTORY_QUERY 0x0001
644 #define DIRECTORY_TRAVERSE 0x0002
645 #define DIRECTORY_CREATE_OBJECT 0x0004
646 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
647 #define DIRECTORY_ALL_ACCESS 0x000F
649 #endif // SANDBOX_WIN_SRC_NT_INTERNALS_H__