00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
#ifndef _OB_
00024
#define _OB_
00025
00026
00027
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
00051
00052
00053
00054
00055 typedef struct _OBJECT_HANDLE_INFORMATION {
00056 ULONG
HandleAttributes;
00057 ACCESS_MASK
GrantedAccess;
00058 }
OBJECT_HANDLE_INFORMATION, *
POBJECT_HANDLE_INFORMATION;
00059
00060
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
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
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;
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
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
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
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;
00235 }
OBJECT_SYMBOLIC_LINK, *
POBJECT_SYMBOLIC_LINK;
00236
00237
00238
00239
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
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
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
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
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
00425
00426
NTKERNELAPI
00427
NTSTATUS
00428
ObReferenceObjectByHandle(
00429 IN HANDLE Handle,
00430 IN ACCESS_MASK DesiredAccess,
00431 IN POBJECT_TYPE ObjectType OPTIONAL,
00432 IN KPROCESSOR_MODE AccessMode,
00433 OUT PVOID *Object,
00434 OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL
00435 );
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
00452
NTSTATUS
00453
ObOpenObjectByPointer(
00454 IN PVOID Object,
00455 IN ULONG HandleAttributes,
00456 IN
PACCESS_STATE PassedAccessState OPTIONAL,
00457 IN ACCESS_MASK DesiredAccess OPTIONAL,
00458 IN POBJECT_TYPE ObjectType OPTIONAL,
00459 IN KPROCESSOR_MODE AccessMode,
00460 OUT PHANDLE Handle
00461 );
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
00476
VOID
00477
ObMakeTemporaryObject(
00478 IN PVOID Object
00479 );
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
00493
00494 #define ObDereferenceObject(a) \
00495
ObfDereferenceObject(a)
00496
00497
00498
00499
#if defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTSRV_) || defined(_NTHAL_)
00500
00501
00502
#define ObReferenceObject(Object) ObfReferenceObject(Object)
00503
00504
NTKERNELAPI
00505
VOID
00506
FASTCALL
00507
ObfReferenceObject(
00508 IN PVOID Object
00509 );
00510
00511
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
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
00540
00541
NTSTATUS
00542
ObWaitForSingleObject(
00543 IN HANDLE Handle,
00544 IN BOOLEAN Alertable,
00545 IN PLARGE_INTEGER Timeout OPTIONAL
00546 );
00547
00548
NTKERNELAPI
00549
NTSTATUS
00550
ObQueryNameString(
00551 IN PVOID Object,
00552 OUT POBJECT_NAME_INFORMATION ObjectNameInfo,
00553 IN ULONG Length,
00554 OUT PULONG ReturnLength
00555 );
00556
00557
NTKERNELAPI
00558 ULONG
00559
ObGetObjectPointerCount(
00560 IN PVOID Object
00561 );
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
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
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
00683
ObQueryObjectAuditingByHandle(
00684 IN HANDLE Handle,
00685 OUT PBOOLEAN GenerateOnClose
00686 );
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_