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 #ifndef SANDBOX_TOOLS_FINDER_NTUNDOC_H__ 6 #define SANDBOX_TOOLS_FINDER_NTUNDOC_H__ 7 8 #define NTSTATUS ULONG 9 #define STATUS_SUCCESS 0x00000000 10 #define STATUS_INFO_LENGTH_MISMATCH 0xC0000004 11 #define STATUS_ACCESS_DENIED 0xC0000022 12 #define STATUS_BUFFER_OVERFLOW 0x80000005 13 14 typedef struct _LSA_UNICODE_STRING { 15 USHORT Length; 16 USHORT MaximumLength; 17 PWSTR Buffer; 18 } UNICODE_STRING; 19 20 typedef struct _OBJDIR_INFORMATION { 21 UNICODE_STRING ObjectName; 22 UNICODE_STRING ObjectTypeName; 23 BYTE Data[1]; 24 } OBJDIR_INFORMATION; 25 26 typedef struct _OBJECT_ATTRIBUTES { 27 ULONG Length; 28 HANDLE RootDirectory; 29 UNICODE_STRING *ObjectName; 30 ULONG Attributes; 31 PVOID SecurityDescriptor; 32 PVOID SecurityQualityOfService; 33 } OBJECT_ATTRIBUTES; 34 35 typedef struct _PUBLIC_OBJECT_BASIC_INFORMATION { 36 ULONG Attributes; 37 ACCESS_MASK GrantedAccess; 38 ULONG HandleCount; 39 ULONG PointerCount; 40 ULONG Reserved[10]; // reserved for internal use 41 } PUBLIC_OBJECT_BASIC_INFORMATION, *PPUBLIC_OBJECT_BASIC_INFORMATION; 42 43 typedef struct __PUBLIC_OBJECT_TYPE_INFORMATION { 44 UNICODE_STRING TypeName; 45 ULONG Reserved [22]; // reserved for internal use 46 } PUBLIC_OBJECT_TYPE_INFORMATION, *PPUBLIC_OBJECT_TYPE_INFORMATION; 47 48 typedef enum _POOL_TYPE { 49 NonPagedPool, 50 PagedPool, 51 NonPagedPoolMustSucceed, 52 ReservedType, 53 NonPagedPoolCacheAligned, 54 PagedPoolCacheAligned, 55 NonPagedPoolCacheAlignedMustS 56 } POOL_TYPE; 57 58 typedef struct _OBJECT_TYPE_INFORMATION { 59 UNICODE_STRING Name; 60 ULONG TotalNumberOfObjects; 61 ULONG TotalNumberOfHandles; 62 ULONG TotalPagedPoolUsage; 63 ULONG TotalNonPagedPoolUsage; 64 ULONG TotalNamePoolUsage; 65 ULONG TotalHandleTableUsage; 66 ULONG HighWaterNumberOfObjects; 67 ULONG HighWaterNumberOfHandles; 68 ULONG HighWaterPagedPoolUsage; 69 ULONG HighWaterNonPagedPoolUsage; 70 ULONG HighWaterNamePoolUsage; 71 ULONG HighWaterHandleTableUsage; 72 ULONG InvalidAttributes; 73 GENERIC_MAPPING GenericMapping; 74 ULONG ValidAccess; 75 BOOLEAN SecurityRequired; 76 BOOLEAN MaintainHandleCount; 77 USHORT MaintainTypeList; 78 POOL_TYPE PoolType; 79 ULONG PagedPoolUsage; 80 ULONG NonPagedPoolUsage; 81 } OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION; 82 83 typedef struct _OBJECT_NAME_INFORMATION { 84 UNICODE_STRING ObjectName; 85 } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION; 86 87 typedef enum _OBJECT_INFORMATION_CLASS { 88 ObjectBasicInformation, 89 ObjectNameInformation, 90 ObjectTypeInformation, 91 ObjectAllInformation, 92 ObjectDataInformation 93 } OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS; 94 95 typedef struct _FILE_NAME_INFORMATION { 96 ULONG FileNameLength; 97 WCHAR FileName[1]; 98 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION; 99 100 typedef enum _FILE_INFORMATION_CLASS { 101 // end_wdm 102 FileDirectoryInformation = 1, 103 FileFullDirectoryInformation, // 2 104 FileBothDirectoryInformation, // 3 105 FileBasicInformation, // 4 wdm 106 FileStandardInformation, // 5 wdm 107 FileInternalInformation, // 6 108 FileEaInformation, // 7 109 FileAccessInformation, // 8 110 FileNameInformation, // 9 111 FileRenameInformation, // 10 112 FileLinkInformation, // 11 113 FileNamesInformation, // 12 114 FileDispositionInformation, // 13 115 FilePositionInformation, // 14 wdm 116 FileFullEaInformation, // 15 117 FileModeInformation, // 16 118 FileAlignmentInformation, // 17 119 FileAllInformation, // 18 120 FileAllocationInformation, // 19 121 FileEndOfFileInformation, // 20 wdm 122 FileAlternateNameInformation, // 21 123 FileStreamInformation, // 22 124 FilePipeInformation, // 23 125 FilePipeLocalInformation, // 24 126 FilePipeRemoteInformation, // 25 127 FileMailslotQueryInformation, // 26 128 FileMailslotSetInformation, // 27 129 FileCompressionInformation, // 28 130 FileObjectIdInformation, // 29 131 FileCompletionInformation, // 30 132 FileMoveClusterInformation, // 31 133 FileQuotaInformation, // 32 134 FileReparsePointInformation, // 33 135 FileNetworkOpenInformation, // 34 136 FileAttributeTagInformation, // 35 137 FileTrackingInformation, // 36 138 FileMaximumInformation 139 // begin_wdm 140 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; 141 142 typedef enum _SYSTEM_INFORMATION_CLASS { 143 SystemHandleInformation = 16 144 } SYSTEM_INFORMATION_CLASS; 145 146 typedef struct _IO_STATUS_BLOCK { 147 union { 148 NTSTATUS Status; 149 PVOID Pointer; 150 }; 151 ULONG_PTR Information; 152 } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; 153 154 #define InitializeObjectAttributes( p, n, a, r, s ) { \ 155 (p)->Length = sizeof( OBJECT_ATTRIBUTES ); \ 156 (p)->RootDirectory = r; \ 157 (p)->Attributes = a; \ 158 (p)->ObjectName = n; \ 159 (p)->SecurityDescriptor = s; \ 160 (p)->SecurityQualityOfService = NULL; \ 161 } 162 163 typedef struct _SYSTEM_HANDLE_INFORMATION { 164 USHORT ProcessId; 165 USHORT CreatorBackTraceIndex; 166 UCHAR ObjectTypeNumber; 167 UCHAR Flags; 168 USHORT Handle; 169 PVOID Object; 170 ACCESS_MASK GrantedAccess; 171 } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION; 172 173 typedef struct _SYSTEM_HANDLE_INFORMATION_EX { 174 ULONG NumberOfHandles; 175 SYSTEM_HANDLE_INFORMATION Information[1]; 176 } SYSTEM_HANDLE_INFORMATION_EX, *PSYSTEM_HANDLE_INFORMATION_EX; 177 178 #define POBJECT_ATTRIBUTES OBJECT_ATTRIBUTES* 179 180 typedef NTSTATUS (WINAPI* NTQUERYDIRECTORYOBJECT)( 181 HANDLE, 182 OBJDIR_INFORMATION*, 183 DWORD, 184 DWORD, 185 DWORD, 186 DWORD*, 187 DWORD*); 188 189 typedef NTSTATUS (WINAPI* NTOPENDIRECTORYOBJECT)( 190 HANDLE *, 191 DWORD, 192 OBJECT_ATTRIBUTES* ); 193 194 typedef NTSTATUS (WINAPI* NTGENERICOPEN) ( 195 OUT PHANDLE EventHandle, 196 IN ACCESS_MASK DesiredAccess, 197 IN POBJECT_ATTRIBUTES ObjectAttributes); 198 199 typedef NTSTATUS (WINAPI* NTOPENEVENT)( 200 OUT PHANDLE EventHandle, 201 IN ACCESS_MASK DesiredAccess, 202 IN POBJECT_ATTRIBUTES ObjectAttributes); 203 204 typedef NTSTATUS (WINAPI* NTOPENJOBOBJECT)( 205 OUT PHANDLE JobHandle, 206 IN ACCESS_MASK DesiredAccess, 207 IN POBJECT_ATTRIBUTES ObjectAttributes); 208 209 typedef NTSTATUS (WINAPI* NTOPENKEYEDEVENT)( 210 OUT PHANDLE KeyedEventHandle, 211 IN ACCESS_MASK DesiredAccess, 212 IN POBJECT_ATTRIBUTES ObjectAttributes); 213 214 typedef NTSTATUS (WINAPI* NTOPENMUTANT)( 215 OUT PHANDLE MutantHandle, 216 IN ACCESS_MASK DesiredAccess, 217 IN POBJECT_ATTRIBUTES ObjectAttributes); 218 219 typedef NTSTATUS (WINAPI* NTOPENSECTION)( 220 OUT PHANDLE SectionHandle, 221 IN ACCESS_MASK DesiredAccess, 222 IN POBJECT_ATTRIBUTES ObjectAttributes); 223 224 typedef NTSTATUS (WINAPI* NTOPENSEMAPHORE)( 225 OUT PHANDLE SemaphoreHandle, 226 IN ACCESS_MASK DesiredAccess, 227 IN POBJECT_ATTRIBUTES ObjectAttributes); 228 229 typedef NTSTATUS (WINAPI* NTOPENSYMBOLICLINKOBJECT)( 230 OUT PHANDLE SymbolicLinkHandle, 231 IN ACCESS_MASK DesiredAccess, 232 IN POBJECT_ATTRIBUTES ObjectAttributes); 233 234 typedef NTSTATUS (WINAPI* NTOPENTIMER)( 235 OUT PHANDLE TimerHandle, 236 IN ACCESS_MASK DesiredAccess, 237 IN POBJECT_ATTRIBUTES ObjectAttributes); 238 239 typedef NTSTATUS (WINAPI* NTOPENFILE)( 240 HANDLE *, 241 DWORD, 242 OBJECT_ATTRIBUTES *, 243 IO_STATUS_BLOCK *, 244 DWORD, 245 DWORD); 246 247 typedef NTSTATUS (WINAPI* NTQUERYINFORMATIONFILE)( 248 HANDLE, 249 PIO_STATUS_BLOCK, 250 PVOID, 251 ULONG, 252 FILE_INFORMATION_CLASS); 253 254 typedef NTSTATUS (WINAPI* NTQUERYSYSTEMINFORMATION)( 255 SYSTEM_INFORMATION_CLASS SystemInformationClass, 256 PVOID SystemInformation, 257 ULONG SystemInformationLength, 258 PULONG ReturnLength); 259 260 typedef NTSTATUS (WINAPI* NTQUERYOBJECT)( 261 HANDLE Handle, 262 OBJECT_INFORMATION_CLASS ObjectInformationClass, 263 PVOID ObjectInformation, 264 ULONG ObjectInformationLength, 265 PULONG ReturnLength); 266 267 typedef NTSTATUS (WINAPI* NTCLOSE) (HANDLE); 268 269 #define DIRECTORY_QUERY 0x0001 270 #define DIRECTORY_TRAVERSE 0x0002 271 #define DIRECTORY_CREATE_OBJECT 0x0004 272 #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008 273 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF) 274 275 #endif // SANDBOX_TOOLS_FINDER_NTUNDOC_H__ 276