Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

ob.h

Go to the documentation of this file.
00001 /*++ BUILD Version: 0002 // Increment this if a change has global effects 00002 00003 Copyright (c) 1989 Microsoft Corporation 00004 00005 Module Name: 00006 00007 ob.h 00008 00009 Abstract: 00010 00011 This module contains the object manager structure public data 00012 structures and procedure prototypes to be used within the NT 00013 system. 00014 00015 Author: 00016 00017 Steve Wood (stevewo) 28-Mar-1989 00018 00019 Revision History: 00020 00021 --*/ 00022 00023 #ifndef _OB_ 00024 #define _OB_ 00025 00026 // 00027 // System Initialization procedure for OB subcomponent of NTOS 00028 // 00029 BOOLEAN 00030 ObInitSystem( VOID ); 00031 00032 00033 NTSTATUS 00034 ObInitProcess( 00035 PEPROCESS ParentProcess OPTIONAL, 00036 PEPROCESS NewProcess 00037 ); 00038 00039 VOID 00040 ObInitProcess2( 00041 PEPROCESS NewProcess 00042 ); 00043 00044 VOID 00045 ObKillProcess( 00046 BOOLEAN AcquireLock, 00047 PEPROCESS Process 00048 ); 00049 00050 // begin_ntddk begin_wdm begin_nthal begin_ntifs 00051 // 00052 // Object Manager types 00053 // 00054 00055 typedef struct _OBJECT_HANDLE_INFORMATION { 00056 ULONG HandleAttributes; 00057 ACCESS_MASK GrantedAccess; 00058 } OBJECT_HANDLE_INFORMATION, *POBJECT_HANDLE_INFORMATION; 00059 00060 // end_ntddk end_wdm end_nthal end_ntifs 00061 00062 typedef struct _OBJECT_DUMP_CONTROL { 00063 PVOID Stream; 00064 ULONG Detail; 00065 } OB_DUMP_CONTROL, *POB_DUMP_CONTROL; 00066 00067 typedef VOID (*OB_DUMP_METHOD)( 00068 IN PVOID Object, 00069 IN POB_DUMP_CONTROL Control OPTIONAL 00070 ); 00071 00072 typedef enum _OB_OPEN_REASON { 00073 ObCreateHandle, 00074 ObOpenHandle, 00075 ObDuplicateHandle, 00076 ObInheritHandle, 00077 ObMaxOpenReason 00078 } OB_OPEN_REASON; 00079 00080 00081 typedef VOID (*OB_OPEN_METHOD)( 00082 IN OB_OPEN_REASON OpenReason, 00083 IN PEPROCESS Process OPTIONAL, 00084 IN PVOID Object, 00085 IN ACCESS_MASK GrantedAccess, 00086 IN ULONG HandleCount 00087 ); 00088 00089 typedef BOOLEAN (*OB_OKAYTOCLOSE_METHOD)( 00090 IN PEPROCESS Process OPTIONAL, 00091 IN PVOID Object, 00092 IN HANDLE Handle 00093 ); 00094 00095 typedef VOID (*OB_CLOSE_METHOD)( 00096 IN PEPROCESS Process OPTIONAL, 00097 IN PVOID Object, 00098 IN ACCESS_MASK GrantedAccess, 00099 IN ULONG ProcessHandleCount, 00100 IN ULONG SystemHandleCount 00101 ); 00102 00103 typedef VOID (*OB_DELETE_METHOD)( 00104 IN PVOID Object 00105 ); 00106 00107 typedef NTSTATUS (*OB_PARSE_METHOD)( 00108 IN PVOID ParseObject, 00109 IN PVOID ObjectType, 00110 IN OUT PACCESS_STATE AccessState, 00111 IN KPROCESSOR_MODE AccessMode, 00112 IN ULONG Attributes, 00113 IN OUT PUNICODE_STRING CompleteName, 00114 IN OUT PUNICODE_STRING RemainingName, 00115 IN OUT PVOID Context OPTIONAL, 00116 IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL, 00117 OUT PVOID *Object 00118 ); 00119 00120 typedef NTSTATUS (*OB_SECURITY_METHOD)( 00121 IN PVOID Object, 00122 IN SECURITY_OPERATION_CODE OperationCode, 00123 IN PSECURITY_INFORMATION SecurityInformation, 00124 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor, 00125 IN OUT PULONG CapturedLength, 00126 IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor, 00127 IN POOL_TYPE PoolType, 00128 IN PGENERIC_MAPPING GenericMapping 00129 ); 00130 00131 typedef NTSTATUS (*OB_QUERYNAME_METHOD)( 00132 IN PVOID Object, 00133 IN BOOLEAN HasObjectName, 00134 OUT POBJECT_NAME_INFORMATION ObjectNameInfo, 00135 IN ULONG Length, 00136 OUT PULONG ReturnLength 00137 ); 00138 00139 /* 00140 00141 A security method and its caller must obey the following w.r.t. 00142 capturing and probing parameters: 00143 00144 For a query operation, the caller must pass a kernel space address for 00145 CapturedLength. The caller should be able to assume that it points to 00146 valid data that will not change. In addition, the SecurityDescriptor 00147 parameter (which will receive the result of the query operation) must 00148 be probed for write up to the length given in CapturedLength. The 00149 security method itself must always write to the SecurityDescriptor 00150 buffer in a try clause in case the caller de-allocates it. 00151 00152 For a set operation, the SecurityDescriptor parameter must have 00153 been captured via SeCaptureSecurityDescriptor. This parameter is 00154 not optional, and therefore may not be NULL. 00155 00156 */ 00157 00158 00159 // 00160 // Object Type Structure 00161 // 00162 00163 typedef struct _OBJECT_TYPE_INITIALIZER { 00164 USHORT Length; 00165 BOOLEAN UseDefaultObject; 00166 BOOLEAN Reserved; 00167 ULONG InvalidAttributes; 00168 GENERIC_MAPPING GenericMapping; 00169 ULONG ValidAccessMask; 00170 BOOLEAN SecurityRequired; 00171 BOOLEAN MaintainHandleCount; 00172 BOOLEAN MaintainTypeList; 00173 POOL_TYPE PoolType; 00174 ULONG DefaultPagedPoolCharge; 00175 ULONG DefaultNonPagedPoolCharge; 00176 OB_DUMP_METHOD DumpProcedure; 00177 OB_OPEN_METHOD OpenProcedure; 00178 OB_CLOSE_METHOD CloseProcedure; 00179 OB_DELETE_METHOD DeleteProcedure; 00180 OB_PARSE_METHOD ParseProcedure; 00181 OB_SECURITY_METHOD SecurityProcedure; 00182 OB_QUERYNAME_METHOD QueryNameProcedure; 00183 OB_OKAYTOCLOSE_METHOD OkayToCloseProcedure; 00184 } OBJECT_TYPE_INITIALIZER, *POBJECT_TYPE_INITIALIZER; 00185 00186 typedef struct _OBJECT_TYPE { 00187 ERESOURCE Mutex; 00188 LIST_ENTRY TypeList; 00189 UNICODE_STRING Name; // Copy from object header for convenience 00190 PVOID DefaultObject; 00191 ULONG Index; 00192 ULONG TotalNumberOfObjects; 00193 ULONG TotalNumberOfHandles; 00194 ULONG HighWaterNumberOfObjects; 00195 ULONG HighWaterNumberOfHandles; 00196 OBJECT_TYPE_INITIALIZER TypeInfo; 00197 #ifdef POOL_TAGGING 00198 ULONG Key; 00199 #endif //POOL_TAGGING 00200 } OBJECT_TYPE, *POBJECT_TYPE; 00201 00202 // 00203 // Object Directory Structure 00204 // 00205 00206 #define NUMBER_HASH_BUCKETS 37 00207 00208 typedef struct _OBJECT_DIRECTORY { 00209 struct _OBJECT_DIRECTORY_ENTRY *HashBuckets[ NUMBER_HASH_BUCKETS ]; 00210 struct _OBJECT_DIRECTORY_ENTRY **LookupBucket; 00211 BOOLEAN LookupFound; 00212 USHORT SymbolicLinkUsageCount; 00213 struct _DEVICE_MAP *DeviceMap; 00214 } OBJECT_DIRECTORY, *POBJECT_DIRECTORY; 00215 00216 // 00217 // Object Directory Entry Structure 00218 // 00219 typedef struct _OBJECT_DIRECTORY_ENTRY { 00220 struct _OBJECT_DIRECTORY_ENTRY *ChainLink; 00221 PVOID Object; 00222 } OBJECT_DIRECTORY_ENTRY, *POBJECT_DIRECTORY_ENTRY; 00223 00224 00225 // 00226 // Symbolic Link Object Structure 00227 // 00228 00229 typedef struct _OBJECT_SYMBOLIC_LINK { 00230 LARGE_INTEGER CreationTime; 00231 UNICODE_STRING LinkTarget; 00232 UNICODE_STRING LinkTargetRemaining; 00233 PVOID LinkTargetObject; 00234 ULONG DosDeviceDriveIndex; // 1-based index into KUSER_SHARED_DATA.DosDeviceDriveType 00235 } OBJECT_SYMBOLIC_LINK, *POBJECT_SYMBOLIC_LINK; 00236 00237 00238 // 00239 // Device Map Structure 00240 // 00241 00242 typedef struct _DEVICE_MAP { 00243 ULONG ReferenceCount; 00244 POBJECT_DIRECTORY DosDevicesDirectory; 00245 ULONG DriveMap; 00246 UCHAR DriveType[ 32 ]; 00247 } DEVICE_MAP, *PDEVICE_MAP; 00248 00249 extern PDEVICE_MAP ObSystemDeviceMap; 00250 00251 // 00252 // Object Handle Count Database 00253 // 00254 00255 typedef struct _OBJECT_HANDLE_COUNT_ENTRY { 00256 PEPROCESS Process; 00257 ULONG HandleCount; 00258 } OBJECT_HANDLE_COUNT_ENTRY, *POBJECT_HANDLE_COUNT_ENTRY; 00259 00260 typedef struct _OBJECT_HANDLE_COUNT_DATABASE { 00261 ULONG CountEntries; 00262 OBJECT_HANDLE_COUNT_ENTRY HandleCountEntries[ 1 ]; 00263 } OBJECT_HANDLE_COUNT_DATABASE, *POBJECT_HANDLE_COUNT_DATABASE; 00264 00265 // 00266 // Object Header Structure 00267 // 00268 // The SecurityQuotaCharged is the amount of quota charged to cover 00269 // the GROUP and DISCRETIONARY ACL fields of the security descriptor 00270 // only. The OWNER and SYSTEM ACL fields get charged for at a fixed 00271 // rate that may be less than or greater than the amount actually used. 00272 // 00273 // If the object has no security, then the SecurityQuotaCharged and the 00274 // SecurityQuotaInUse fields are set to zero. 00275 // 00276 // Modification of the OWNER and SYSTEM ACL fields should never fail 00277 // due to quota exceeded problems. Modifications to the GROUP and 00278 // DISCRETIONARY ACL fields may fail due to quota exceeded problems. 00279 // 00280 // 00281 00282 00283 typedef struct _OBJECT_CREATE_INFORMATION { 00284 ULONG Attributes; 00285 HANDLE RootDirectory; 00286 PVOID ParseContext; 00287 KPROCESSOR_MODE ProbeMode; 00288 ULONG PagedPoolCharge; 00289 ULONG NonPagedPoolCharge; 00290 ULONG SecurityDescriptorCharge; 00291 PSECURITY_DESCRIPTOR SecurityDescriptor; 00292 PSECURITY_QUALITY_OF_SERVICE SecurityQos; 00293 SECURITY_QUALITY_OF_SERVICE SecurityQualityOfService; 00294 } OBJECT_CREATE_INFORMATION, *POBJECT_CREATE_INFORMATION; 00295 00296 typedef struct _OBJECT_HEADER { 00297 LONG PointerCount; 00298 union { 00299 LONG HandleCount; 00300 PSINGLE_LIST_ENTRY SEntry; 00301 }; 00302 POBJECT_TYPE Type; 00303 UCHAR NameInfoOffset; 00304 UCHAR HandleInfoOffset; 00305 UCHAR QuotaInfoOffset; 00306 UCHAR Flags; 00307 union { 00308 POBJECT_CREATE_INFORMATION ObjectCreateInfo; 00309 PVOID QuotaBlockCharged; 00310 }; 00311 00312 PSECURITY_DESCRIPTOR SecurityDescriptor; 00313 QUAD Body; 00314 } OBJECT_HEADER, *POBJECT_HEADER; 00315 00316 typedef struct _OBJECT_HEADER_QUOTA_INFO { 00317 ULONG PagedPoolCharge; 00318 ULONG NonPagedPoolCharge; 00319 ULONG SecurityDescriptorCharge; 00320 PEPROCESS ExclusiveProcess; 00321 } OBJECT_HEADER_QUOTA_INFO, *POBJECT_HEADER_QUOTA_INFO; 00322 00323 typedef struct _OBJECT_HEADER_HANDLE_INFO { 00324 union { 00325 POBJECT_HANDLE_COUNT_DATABASE HandleCountDataBase; 00326 OBJECT_HANDLE_COUNT_ENTRY SingleEntry; 00327 }; 00328 } OBJECT_HEADER_HANDLE_INFO, *POBJECT_HEADER_HANDLE_INFO; 00329 00330 typedef struct _OBJECT_HEADER_NAME_INFO { 00331 POBJECT_DIRECTORY Directory; 00332 UNICODE_STRING Name; 00333 ULONG Reserved; 00334 #if DBG 00335 ULONG Reserved2 ; 00336 LONG DbgDereferenceCount ; 00337 #endif 00338 } OBJECT_HEADER_NAME_INFO, *POBJECT_HEADER_NAME_INFO; 00339 00340 typedef struct _OBJECT_HEADER_CREATOR_INFO { 00341 LIST_ENTRY TypeList; 00342 HANDLE CreatorUniqueProcess; 00343 USHORT CreatorBackTraceIndex; 00344 USHORT Reserved; 00345 } OBJECT_HEADER_CREATOR_INFO, *POBJECT_HEADER_CREATOR_INFO; 00346 00347 #define OB_FLAG_NEW_OBJECT 0x01 00348 #define OB_FLAG_KERNEL_OBJECT 0x02 00349 #define OB_FLAG_CREATOR_INFO 0x04 00350 #define OB_FLAG_EXCLUSIVE_OBJECT 0x08 00351 #define OB_FLAG_PERMANENT_OBJECT 0x10 00352 #define OB_FLAG_DEFAULT_SECURITY_QUOTA 0x20 00353 #define OB_FLAG_SINGLE_HANDLE_ENTRY 0x40 00354 00355 #define OBJECT_TO_OBJECT_HEADER( o ) \ 00356 CONTAINING_RECORD( (o), OBJECT_HEADER, Body ) 00357 00358 #define OBJECT_HEADER_TO_EXCLUSIVE_PROCESS( oh ) ((oh->Flags & OB_FLAG_EXCLUSIVE_OBJECT) == 0 ? \ 00359 NULL : (((POBJECT_HEADER_QUOTA_INFO)((PCHAR)(oh) - (oh)->QuotaInfoOffset))->ExclusiveProcess)) 00360 00361 00362 #define OBJECT_HEADER_TO_QUOTA_INFO( oh ) ((POBJECT_HEADER_QUOTA_INFO) \ 00363 ((oh)->QuotaInfoOffset == 0 ? NULL : ((PCHAR)(oh) - (oh)->QuotaInfoOffset))) 00364 00365 #define OBJECT_HEADER_TO_HANDLE_INFO( oh ) ((POBJECT_HEADER_HANDLE_INFO) \ 00366 ((oh)->HandleInfoOffset == 0 ? NULL : ((PCHAR)(oh) - (oh)->HandleInfoOffset))) 00367 00368 #define OBJECT_HEADER_TO_NAME_INFO( oh ) ((POBJECT_HEADER_NAME_INFO) \ 00369 ((oh)->NameInfoOffset == 0 ? NULL : ((PCHAR)(oh) - (oh)->NameInfoOffset))) 00370 00371 #define OBJECT_HEADER_TO_CREATOR_INFO( oh ) ((POBJECT_HEADER_CREATOR_INFO) \ 00372 (((oh)->Flags & OB_FLAG_CREATOR_INFO) == 0 ? NULL : ((PCHAR)(oh) - sizeof(OBJECT_HEADER_CREATOR_INFO)))) 00373 00374 00375 NTKERNELAPI 00376 NTSTATUS 00377 ObCreateObjectType( 00378 IN PUNICODE_STRING TypeName, 00379 IN POBJECT_TYPE_INITIALIZER ObjectTypeInitializer, 00380 IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL, 00381 OUT POBJECT_TYPE *ObjectType 00382 ); 00383 00384 VOID 00385 FASTCALL 00386 ObFreeObjectCreateInfoBuffer( 00387 IN POBJECT_CREATE_INFORMATION ObjectCreateInfo 00388 ); 00389 00390 // begin_nthal 00391 00392 NTKERNELAPI 00393 VOID 00394 ObDeleteCapturedInsertInfo( 00395 IN PVOID Object 00396 ); 00397 00398 NTKERNELAPI 00399 NTSTATUS 00400 ObCreateObject( 00401 IN KPROCESSOR_MODE ProbeMode, 00402 IN POBJECT_TYPE ObjectType, 00403 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, 00404 IN KPROCESSOR_MODE OwnershipMode, 00405 IN OUT PVOID ParseContext OPTIONAL, 00406 IN ULONG ObjectBodySize, 00407 IN ULONG PagedPoolCharge, 00408 IN ULONG NonPagedPoolCharge, 00409 OUT PVOID *Object 00410 ); 00411 00412 00413 NTKERNELAPI 00414 NTSTATUS 00415 ObInsertObject( 00416 IN PVOID Object, 00417 IN PACCESS_STATE PassedAccessState OPTIONAL, 00418 IN ACCESS_MASK DesiredAccess OPTIONAL, 00419 IN ULONG ObjectPointerBias, 00420 OUT PVOID *NewObject OPTIONAL, 00421 OUT PHANDLE Handle 00422 ); 00423 00424 // end_nthal 00425 00426 NTKERNELAPI // ntddk wdm nthal ntifs 00427 NTSTATUS // ntddk wdm nthal ntifs 00428 ObReferenceObjectByHandle( // ntddk wdm nthal ntifs 00429 IN HANDLE Handle, // ntddk wdm nthal ntifs 00430 IN ACCESS_MASK DesiredAccess, // ntddk wdm nthal ntifs 00431 IN POBJECT_TYPE ObjectType OPTIONAL, // ntddk wdm nthal ntifs 00432 IN KPROCESSOR_MODE AccessMode, // ntddk wdm nthal ntifs 00433 OUT PVOID *Object, // ntddk wdm nthal ntifs 00434 OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL // ntddk wdm nthal ntifs 00435 ); // ntddk wdm nthal ntifs 00436 00437 00438 NTKERNELAPI 00439 NTSTATUS 00440 ObOpenObjectByName( 00441 IN POBJECT_ATTRIBUTES ObjectAttributes, 00442 IN POBJECT_TYPE ObjectType, 00443 IN KPROCESSOR_MODE AccessMode, 00444 IN OUT PACCESS_STATE PassedAccessState OPTIONAL, 00445 IN ACCESS_MASK DesiredAccess OPTIONAL, 00446 IN OUT PVOID ParseContext OPTIONAL, 00447 OUT PHANDLE Handle 00448 ); 00449 00450 00451 NTKERNELAPI // ntifs 00452 NTSTATUS // ntifs 00453 ObOpenObjectByPointer( // ntifs 00454 IN PVOID Object, // ntifs 00455 IN ULONG HandleAttributes, // ntifs 00456 IN PACCESS_STATE PassedAccessState OPTIONAL, // ntifs 00457 IN ACCESS_MASK DesiredAccess OPTIONAL, // ntifs 00458 IN POBJECT_TYPE ObjectType OPTIONAL, // ntifs 00459 IN KPROCESSOR_MODE AccessMode, // ntifs 00460 OUT PHANDLE Handle // ntifs 00461 ); // ntifs 00462 00463 NTSTATUS 00464 ObReferenceObjectByName( 00465 IN PUNICODE_STRING ObjectName, 00466 IN ULONG Attributes, 00467 IN PACCESS_STATE PassedAccessState OPTIONAL, 00468 IN ACCESS_MASK DesiredAccess OPTIONAL, 00469 IN POBJECT_TYPE ObjectType, 00470 IN KPROCESSOR_MODE AccessMode, 00471 IN OUT PVOID ParseContext OPTIONAL, 00472 OUT PVOID *Object 00473 ); 00474 00475 NTKERNELAPI // ntifs 00476 VOID // ntifs 00477 ObMakeTemporaryObject( // ntifs 00478 IN PVOID Object // ntifs 00479 ); // ntifs 00480 00481 00482 NTKERNELAPI 00483 BOOLEAN 00484 ObFindHandleForObject( 00485 IN PEPROCESS Process, 00486 IN PVOID Object, 00487 IN POBJECT_TYPE ObjectType OPTIONAL, 00488 IN POBJECT_HANDLE_INFORMATION MatchCriteria OPTIONAL, 00489 OUT PHANDLE Handle 00490 ); 00491 00492 // begin_ntddk begin_wdm begin_nthal begin_ntifs 00493 00494 #define ObDereferenceObject(a) \ 00495 ObfDereferenceObject(a) 00496 00497 // end_wdm end_ntddk end_nthal end_ntifs 00498 00499 #if defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTSRV_) || defined(_NTHAL_) 00500 00501 // begin_wdm begin_ntddk begin_nthal begin_ntifs 00502 #define ObReferenceObject(Object) ObfReferenceObject(Object) 00503 00504 NTKERNELAPI 00505 VOID 00506 FASTCALL 00507 ObfReferenceObject( 00508 IN PVOID Object 00509 ); 00510 00511 // end_wdm end_ntddk end_nthal end_ntifs 00512 #else 00513 00514 #define ObReferenceObject(Object) { \ 00515 POBJECT_HEADER ObjectHeader = OBJECT_TO_OBJECT_HEADER(Object); \ 00516 InterlockedIncrement(&ObjectHeader->PointerCount); \ 00517 } 00518 00519 #endif 00520 00521 // begin_wdm begin_ntddk begin_nthal begin_ntifs 00522 00523 NTKERNELAPI 00524 NTSTATUS 00525 ObReferenceObjectByPointer( 00526 IN PVOID Object, 00527 IN ACCESS_MASK DesiredAccess, 00528 IN POBJECT_TYPE ObjectType, 00529 IN KPROCESSOR_MODE AccessMode 00530 ); 00531 00532 NTKERNELAPI 00533 VOID 00534 FASTCALL 00535 ObfDereferenceObject( 00536 IN PVOID Object 00537 ); 00538 00539 // end_ntddk end_wdm end_nthal end_ntifs 00540 00541 NTSTATUS 00542 ObWaitForSingleObject( 00543 IN HANDLE Handle, 00544 IN BOOLEAN Alertable, 00545 IN PLARGE_INTEGER Timeout OPTIONAL 00546 ); 00547 00548 NTKERNELAPI // ntifs 00549 NTSTATUS // ntifs 00550 ObQueryNameString( // ntifs 00551 IN PVOID Object, // ntifs 00552 OUT POBJECT_NAME_INFORMATION ObjectNameInfo, // ntifs 00553 IN ULONG Length, // ntifs 00554 OUT PULONG ReturnLength // ntifs 00555 ); // ntifs 00556 // ntifs 00557 NTKERNELAPI // ntifs 00558 ULONG // ntifs 00559 ObGetObjectPointerCount( // ntifs 00560 IN PVOID Object // ntifs 00561 ); // ntifs 00562 00563 #if DBG 00564 PUNICODE_STRING 00565 ObGetObjectName( 00566 IN PVOID Object 00567 ); 00568 #endif // DBG 00569 00570 NTSTATUS 00571 ObQueryTypeName( 00572 IN PVOID Object, 00573 PUNICODE_STRING ObjectTypeName, 00574 IN ULONG Length, 00575 OUT PULONG ReturnLength 00576 ); 00577 00578 NTSTATUS 00579 ObQueryTypeInfo( 00580 IN POBJECT_TYPE ObjectType, 00581 OUT POBJECT_TYPE_INFORMATION ObjectTypeInfo, 00582 IN ULONG Length, 00583 OUT PULONG ReturnLength 00584 ); 00585 00586 NTSTATUS 00587 ObDumpObjectByHandle( 00588 IN HANDLE Handle, 00589 IN POB_DUMP_CONTROL Control OPTIONAL 00590 ); 00591 00592 00593 NTSTATUS 00594 ObDumpObjectByPointer( 00595 IN PVOID Object, 00596 IN POB_DUMP_CONTROL Control OPTIONAL 00597 ); 00598 00599 NTSTATUS 00600 ObSetDeviceMap( 00601 IN PEPROCESS TargetProcess, 00602 IN HANDLE DirectoryHandle 00603 ); 00604 00605 NTSTATUS 00606 ObQueryDeviceMapInformation( 00607 IN PEPROCESS TargetProcess, 00608 OUT PPROCESS_DEVICEMAP_INFORMATION DeviceMapInformation 00609 ); 00610 00611 VOID 00612 ObInheritDeviceMap( 00613 IN PEPROCESS NewProcess, 00614 IN PEPROCESS ParentProcess 00615 ); 00616 00617 VOID 00618 ObDereferenceDeviceMap( 00619 IN PEPROCESS Process 00620 ); 00621 00622 // begin_ntsrv begin_ntddk 00623 NTSTATUS 00624 ObGetObjectSecurity( 00625 IN PVOID Object, 00626 OUT PSECURITY_DESCRIPTOR *SecurityDescriptor, 00627 OUT PBOOLEAN MemoryAllocated 00628 ); 00629 00630 VOID 00631 ObReleaseObjectSecurity( 00632 IN PSECURITY_DESCRIPTOR SecurityDescriptor, 00633 IN BOOLEAN MemoryAllocated 00634 ); 00635 // end_ntsrv end_ntddk 00636 00637 NTSTATUS 00638 ObAssignObjectSecurityDescriptor( 00639 IN PVOID Object, 00640 IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL, 00641 IN POOL_TYPE PoolType 00642 ); 00643 00644 NTSTATUS 00645 ObValidateSecurityQuota( 00646 IN PVOID Object, 00647 IN ULONG NewSize 00648 ); 00649 00650 NTKERNELAPI 00651 BOOLEAN 00652 ObCheckCreateObjectAccess( 00653 IN PVOID DirectoryObject, 00654 IN ACCESS_MASK CreateAccess, 00655 IN PACCESS_STATE AccessState OPTIONAL, 00656 IN PUNICODE_STRING ComponentName, 00657 IN BOOLEAN TypeMutexLocked, 00658 IN KPROCESSOR_MODE PreviousMode, 00659 OUT PNTSTATUS AccessStatus 00660 ); 00661 00662 NTKERNELAPI 00663 BOOLEAN 00664 ObCheckObjectAccess( 00665 IN PVOID Object, 00666 IN PACCESS_STATE AccessState, 00667 IN BOOLEAN TypeMutexLocked, 00668 IN KPROCESSOR_MODE AccessMode, 00669 OUT PNTSTATUS AccessStatus 00670 ); 00671 00672 00673 NTKERNELAPI 00674 NTSTATUS 00675 ObAssignSecurity( 00676 IN PACCESS_STATE AccessState, 00677 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL, 00678 IN PVOID Object, 00679 IN POBJECT_TYPE ObjectType 00680 ); 00681 00682 NTSTATUS // ntifs 00683 ObQueryObjectAuditingByHandle( // ntifs 00684 IN HANDLE Handle, // ntifs 00685 OUT PBOOLEAN GenerateOnClose // ntifs 00686 ); // ntifs 00687 00688 NTSTATUS 00689 ObSetSecurityObjectByPointer ( 00690 IN PVOID Object, 00691 IN SECURITY_INFORMATION SecurityInformation, 00692 IN PSECURITY_DESCRIPTOR SecurityDescriptor 00693 ); 00694 00695 #if DEVL 00696 00697 typedef BOOLEAN (*OB_ENUM_OBJECT_TYPE_ROUTINE)( 00698 IN PVOID Object, 00699 IN PUNICODE_STRING ObjectName, 00700 IN ULONG HandleCount, 00701 IN ULONG PointerCount, 00702 IN PVOID Parameter 00703 ); 00704 00705 NTSTATUS 00706 ObEnumerateObjectsByType( 00707 IN POBJECT_TYPE ObjectType, 00708 IN OB_ENUM_OBJECT_TYPE_ROUTINE EnumerationRoutine, 00709 IN PVOID Parameter 00710 ); 00711 00712 NTSTATUS 00713 ObGetHandleInformation( 00714 OUT PSYSTEM_HANDLE_INFORMATION HandleInformation, 00715 IN ULONG Length, 00716 OUT PULONG ReturnLength OPTIONAL 00717 ); 00718 00719 NTSTATUS 00720 ObGetObjectInformation( 00721 IN PCHAR UserModeBufferAddress, 00722 OUT PSYSTEM_OBJECTTYPE_INFORMATION ObjectInformation, 00723 IN ULONG Length, 00724 OUT PULONG ReturnLength OPTIONAL 00725 ); 00726 00727 NTKERNELAPI 00728 NTSTATUS 00729 ObSetSecurityDescriptorInfo( 00730 IN PVOID Object, 00731 IN PSECURITY_INFORMATION SecurityInformation, 00732 IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor, 00733 IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor, 00734 IN POOL_TYPE PoolType, 00735 IN PGENERIC_MAPPING GenericMapping 00736 ); 00737 00738 NTKERNELAPI 00739 NTSTATUS 00740 ObQuerySecurityDescriptorInfo( 00741 IN PSECURITY_INFORMATION SecurityInformation, 00742 OUT PSECURITY_DESCRIPTOR SecurityDescriptor, 00743 IN OUT PULONG Length, 00744 IN PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor 00745 ); 00746 00747 NTSTATUS 00748 ObDeassignSecurity ( 00749 IN OUT PSECURITY_DESCRIPTOR *SecurityDescriptor 00750 ); 00751 00752 #endif // DEVL 00753 00754 #endif // _OB_

Generated on Sat May 15 19:41:04 2004 for test by doxygen 1.3.7