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

tob.c File Reference

#include "obp.h"

Go to the source code of this file.

Classes

struct  _OBJECTTYPEA
struct  _OBJECTTYPEB

Typedefs

typedef _OBJECTTYPEA OBJECTTYPEA
typedef _OBJECTTYPEAPOBJECTTYPEA
typedef _OBJECTTYPEB OBJECTTYPEB
typedef _OBJECTTYPEBPOBJECTTYPEB

Functions

VOID DumpAProc (IN PVOID Object, IN POB_DUMP_CONTROL Control OPTIONAL)
VOID OpenAProc (IN OB_OPEN_REASON OpenReason, IN PEPROCESS Process OPTIONAL, IN PVOID Object, IN ACCESS_MASK GrantedAccess, IN ULONG HandleCount)
VOID CloseAProc (IN PEPROCESS Process OPTIONAL, IN PVOID Object, IN ACCESS_MASK GrantedAccess, IN ULONG ProcessHandleCount, IN ULONG SystemHandleCount)
VOID DeleteAProc (IN PVOID Object)
NTSTATUS ParseAProc (IN PVOID ParseObject, IN ULONG DesiredAccess, IN KPROCESSOR_MODE AccessMode, IN ULONG Attributes, IN OUT PSTRING CompleteName, IN OUT PSTRING RemainingName, IN OUT PVOID Context OPTIONAL, OUT PVOID *Object)
VOID DumpBProc (IN PVOID Object, IN POB_DUMP_CONTROL Control OPTIONAL)
VOID DeleteBProc (IN PVOID Object)
BOOLEAN obtest (void)
int _CDECL main (int argc, char *argv[])

Variables

GENERIC_MAPPING MyGenericMapping
OBJECT_ATTRIBUTES DirectoryObjA
OBJECT_ATTRIBUTES ObjectAObjA
OBJECT_ATTRIBUTES ObjectBObjA
STRING DirectoryName
STRING ObjectAName
STRING ObjectBName
STRING ObjectAPathName
STRING ObjectBPathName
STRING ObjectTypeAName
STRING ObjectTypeBName
POBJECT_TYPE ObjectTypeA
POBJECT_TYPE ObjectTypeB
PVOID ObjectBodyA
PVOID ObjectBodyB
PVOID ObjectBodyA1
PVOID ObjectBodyA2
POBJECTTYPEA ObjectA
POBJECTTYPEB ObjectB
HANDLE DirectoryHandle
HANDLE ObjectHandleA1
HANDLE ObjectHandleB1
HANDLE ObjectHandleA2
HANDLE ObjectHandleB2
char * OpenReasonStrings []


Typedef Documentation

typedef struct _OBJECTTYPEA OBJECTTYPEA
 

Referenced by obtest().

typedef struct _OBJECTTYPEB OBJECTTYPEB
 

typedef struct _OBJECTTYPEA * POBJECTTYPEA
 

Referenced by DumpAProc(), and obtest().

typedef struct _OBJECTTYPEB * POBJECTTYPEB
 

Referenced by DumpBProc(), and obtest().


Function Documentation

VOID CloseAProc IN PEPROCESS Process  OPTIONAL,
IN PVOID  Object,
IN ACCESS_MASK  GrantedAccess,
IN ULONG  ProcessHandleCount,
IN ULONG  SystemHandleCount
 

Definition at line 110 of file tob.c.

References DbgPrint.

Referenced by obtest().

00117 { 00118 DbgPrint( "CloseAProc: Process: %lx \n", Process ); 00119 DbgPrint( " Object: %lx Access: %lx ProcessHandleCount: %lu SystemHandleCount: %lu\n", 00120 Object, GrantedAccess, ProcessHandleCount, SystemHandleCount ); 00121 }

VOID DeleteAProc IN PVOID  Object  ) 
 

Definition at line 125 of file tob.c.

References DbgPrint.

Referenced by obtest().

00128 { 00129 DbgPrint( "DeleteAProc: %lx\n", Object ); 00130 }

VOID DeleteBProc IN PVOID  Object  ) 
 

Definition at line 178 of file tob.c.

References DbgPrint.

Referenced by obtest().

00181 { 00182 DbgPrint( "DeleteBProc: %lx\n", Object ); 00183 }

VOID DumpAProc IN PVOID  Object,
IN POB_DUMP_CONTROL Control  OPTIONAL
 

Definition at line 71 of file tob.c.

References DbgPrint, POBJECTTYPEA, _OBJECTTYPEA::Stuff, and _OBJECTTYPEA::TypeALength.

Referenced by obtest().

00075 { 00076 POBJECTTYPEA p = (POBJECTTYPEA)Object; 00077 ULONG i; 00078 00079 DbgPrint( "DumpAProc: %lx\n", p ); 00080 DbgPrint( " Length: %ld\n", p->TypeALength ); 00081 for (i=0; i<4; i++) { 00082 DbgPrint( " Stuff[%ld]: %ld\n", i, p->Stuff[i] ); 00083 } 00084 }

VOID DumpBProc IN PVOID  Object,
IN POB_DUMP_CONTROL Control  OPTIONAL
 

Definition at line 162 of file tob.c.

References DbgPrint, POBJECTTYPEB, _OBJECTTYPEB::Stuff, and _OBJECTTYPEB::TypeBLength.

Referenced by obtest().

00166 { 00167 POBJECTTYPEB p = (POBJECTTYPEB)Object; 00168 ULONG i; 00169 00170 DbgPrint( "DumpBProc: %lx\n", p ); 00171 DbgPrint( " Length: %ld\n", p->TypeBLength ); 00172 for (i=0; i<16; i++) { 00173 DbgPrint( " Stuff[%ld]: %ld\n", i, p->Stuff[i] ); 00174 } 00175 }

int _CDECL main int  argc,
char *  argv[]
 

Definition at line 597 of file tob.c.

References DbgPrint, IoInitIncludeDevices, KiSystemStartup(), MmNumberOfPhysicalPages, NULL, and TestFunction.

00601 { 00602 #ifdef SIMULATOR 00603 extern ULONG MmNumberOfPhysicalPages; 00604 char *s; 00605 00606 while (--argc) { 00607 s = *++argv; 00608 if (*s == '-') { 00609 s++; 00610 if (*s >= '0' && *s <= '9') { 00611 MmNumberOfPhysicalPages = atol( s ); 00612 DbgPrint( "INIT: Configured with %d pages of physical memory.\n", 00613 MmNumberOfPhysicalPages 00614 ); 00615 } 00616 else 00617 if (!strcmp( s, "SCR" )) { 00618 IoInitIncludeDevices |= IOINIT_SCREEN; 00619 DbgPrint( "INIT: Configured with Screen device driver.\n" ); 00620 } 00621 else 00622 if (!strcmp( s, "MOU" )) { 00623 IoInitIncludeDevices |= IOINIT_MOUSE; 00624 DbgPrint( "INIT: Configured with Mouse device driver.\n" ); 00625 } 00626 else 00627 if (!strcmp( s, "KBD" )) { 00628 IoInitIncludeDevices |= IOINIT_KEYBOARD; 00629 DbgPrint( "INIT: Configured with Keyboard device driver.\n" ); 00630 } 00631 else 00632 if (!strcmp( s, "RAW" )) { 00633 IoInitIncludeDevices |= IOINIT_RAWFS; 00634 DbgPrint( "INIT: Configured with RAW File System driver.\n" ); 00635 } 00636 else 00637 if (!strcmp( s, "FAT" )) { 00638 IoInitIncludeDevices |= IOINIT_FATFS; 00639 DbgPrint( "INIT: Configured with FAT File System driver.\n" ); 00640 } 00641 else 00642 if (!strcmp( s, "SVR" )) { 00643 IoInitIncludeDevices |= IOINIT_DDFS | 00644 IOINIT_FATFS | 00645 IOINIT_SERVER_FSD | 00646 IOINIT_SERVER_LOOPBACK | 00647 IOINIT_NBF; 00648 if ( MmNumberOfPhysicalPages < 512 ) { 00649 MmNumberOfPhysicalPages = 512; 00650 } 00651 DbgPrint( "INIT: Configured for LAN Manager server.\n" ); 00652 } 00653 else { 00654 DbgPrint( "INIT: Invalid switch - %s\n", s ); 00655 } 00656 } 00657 else { 00658 break; 00659 } 00660 } 00661 00662 #endif // SIMULATOR 00663 TestFunction = NULL; 00664 KiSystemStartup(); 00665 return( 0 ); 00666 }

BOOLEAN obtest void   ) 
 

Definition at line 187 of file tob.c.

References CloseAProc(), DbgPrint, DeleteAProc(), DeleteBProc(), DirectoryHandle, DirectoryName, DirectoryObjA, DumpAProc(), DumpBProc(), _OBJECTTYPEA::Event, FALSE, KeInitializeEvent, KeInitializeSemaphore(), KernelMode, L, MyGenericMapping, NonPagedPool, NtClose(), NtCreateDirectoryObject(), NTSTATUS(), NtWaitForMultipleObjects(), NtWaitForSingleObject(), NULL, ObCreateObject(), ObCreateObjectType(), ObDereferenceObject, ObInsertObject(), ObjectA, ObjectAName, ObjectAObjA, ObjectAPathName, ObjectB, ObjectBName, ObjectBObjA, ObjectBodyA, ObjectBodyA1, ObjectBodyA2, ObjectBodyB, ObjectBPathName, ObjectHandleA1, ObjectHandleA2, ObjectHandleB1, ObjectHandleB2, OBJECTTYPEA, ObjectTypeA, ObjectTypeAName, ObjectTypeB, ObjectTypeBName, ObOpenObjectByName(), ObOpenObjectByPointer(), ObpGetObjectTable, ObReferenceObjectByHandle(), ObReferenceObjectByName(), ObReferenceObjectByPointer(), OpenAProc(), ParseAProc(), POBJECTTYPEA, POBJECTTYPEB, RtlInitString(), _OBJECTTYPEB::Semaphore, Status, _OBJECTTYPEB::Stuff, _OBJECTTYPEA::Stuff, TestFunction, TRUE, _OBJECTTYPEA::TypeALength, and _OBJECTTYPEB::TypeBLength.

00188 { 00189 ULONG i; 00190 HANDLE Handles[ 2 ]; 00191 NTSTATUS Status; 00192 OBJECT_TYPE_INITIALIZER ObjectTypeInitializer; 00193 00194 ObpDumpObjectTable( ObpGetObjectTable(), NULL ); 00195 00196 RtlInitString( &ObjectTypeAName, "ObjectTypeA" ); 00197 RtlInitString( &ObjectTypeBName, "ObjectTypeB" ); 00198 00199 RtlZeroMemory( &ObjectTypeInitializer, sizeof( ObjectTypeInitializer ) ); 00200 ObjectTypeInitializer.Length = sizeof( ObjectTypeInitializer ); 00201 ObjectTypeInitializer.ValidAccessMask = -1; 00202 00203 ObjectTypeInitializer.PoolType = NonPagedPool; 00204 ObjectTypeInitializer.MaintainHandleCount = TRUE; 00205 ObjectTypeInitializer.DumpProcedure = DumpAProc; 00206 ObjectTypeInitializer.OpenProcedure = OpenAProc; 00207 ObjectTypeInitializer.CloseProcedure = CloseAProc; 00208 ObjectTypeInitializer.DeleteProcedure = DeleteAProc; 00209 ObjectTypeInitializer.ParseProcedure = ParseAProc; 00210 ObCreateObjectType( 00211 &ObjectTypeAName, 00212 &ObjectTypeInitializer, 00213 (PSECURITY_DESCRIPTOR)NULL, 00214 &ObjectTypeA 00215 ); 00216 00217 ObjectTypeInitializer.PoolType = NonPagedPool; 00218 ObjectTypeInitializer.MaintainHandleCount = FALSE; 00219 ObjectTypeInitializer.GenericMapping = MyGenericMapping; 00220 ObjectTypeInitializer.DumpProcedure = DumpBProc; 00221 ObjectTypeInitializer.OpenProcedure = NULL; 00222 ObjectTypeInitializer.CloseProcedure = NULL; 00223 ObjectTypeInitializer.DeleteProcedure = DeleteBProc; 00224 ObjectTypeInitializer.ParseProcedure = NULL; 00225 ObCreateObjectType( 00226 &ObjectTypeBName, 00227 &ObjectTypeInitializer, 00228 (PSECURITY_DESCRIPTOR)NULL, 00229 &ObjectTypeB 00230 ); 00231 00232 ObpDumpTypes( NULL ); 00233 00234 RtlInitString( &DirectoryName, "\\MyObjects" ); 00235 InitializeObjectAttributes( &DirectoryObjA, 00236 &DirectoryName, 00237 OBJ_PERMANENT | 00238 OBJ_CASE_INSENSITIVE, 00239 NULL, 00240 NULL 00241 ); 00242 NtCreateDirectoryObject( &DirectoryHandle, 00243 0, 00244 &DirectoryObjA 00245 ); 00246 NtClose( DirectoryHandle ); 00247 00248 RtlInitString( &ObjectAName, "\\myobjects\\ObjectA" ); 00249 InitializeObjectAttributes( &ObjectAObjA, 00250 &ObjectAName, 00251 OBJ_CASE_INSENSITIVE, 00252 NULL, 00253 NULL 00254 ); 00255 00256 RtlInitString( &ObjectBName, "\\myobjects\\ObjectB" ); 00257 InitializeObjectAttributes( &ObjectBObjA, 00258 &ObjectBName, 00259 OBJ_CASE_INSENSITIVE, 00260 NULL, 00261 NULL 00262 ); 00263 00264 Status = ObCreateObject( 00265 KernelMode, 00266 ObjectTypeA, 00267 &ObjectAObjA, 00268 KernelMode, 00269 NULL, 00270 (ULONG)sizeof( OBJECTTYPEA ), 00271 0L, 00272 0L, 00273 (PVOID *)&ObjectBodyA 00274 ); 00275 00276 ObjectA = (POBJECTTYPEA)ObjectBodyA; 00277 ObjectA->TypeALength = sizeof( *ObjectA ); 00278 for (i=0; i<4; i++) { 00279 ObjectA->Stuff[i] = i+1; 00280 } 00281 KeInitializeEvent( &ObjectA->Event, NotificationEvent, TRUE ); 00282 00283 Status = ObCreateObject( 00284 KernelMode, 00285 ObjectTypeB, 00286 &ObjectBObjA, 00287 KernelMode, 00288 NULL, 00289 (ULONG)sizeof( OBJECTTYPEB ), 00290 0L, 00291 0L, 00292 (PVOID *)&ObjectBodyB 00293 ); 00294 00295 ObjectB = (POBJECTTYPEB)ObjectBodyB; 00296 ObjectB->TypeBLength = sizeof( *ObjectB ); 00297 for (i=0; i<16; i++) { 00298 ObjectB->Stuff[i] = i+1; 00299 } 00300 KeInitializeSemaphore ( &ObjectB->Semaphore, 2L, 2L ); 00301 00302 Status = ObInsertObject( 00303 ObjectBodyA, 00304 SYNCHRONIZE | 0x3, 00305 NULL, 00306 1, 00307 &ObjectBodyA, 00308 &ObjectHandleA1 00309 ); 00310 00311 DbgPrint( "Status: %lx ObjectBodyA: %lx ObjectHandleA1: %lx\n", 00312 Status, ObjectBodyA, ObjectHandleA1 00313 ); 00314 00315 Status = ObInsertObject( 00316 ObjectBodyB, 00317 SYNCHRONIZE | 0x1, 00318 NULL, 00319 1, 00320 &ObjectBodyB, 00321 &ObjectHandleB1 00322 ); 00323 00324 DbgPrint( "Status: %lx ObjectBodyB: %lx ObjectHandleB1: %lx\n", 00325 Status, ObjectBodyB, ObjectHandleB1 00326 ); 00327 00328 ObpDumpObjectTable( ObpGetObjectTable(), NULL ); 00329 00330 RtlInitString( &ObjectAName, "\\MyObjects\\ObjectA" ); 00331 InitializeObjectAttributes( &ObjectAObjA, 00332 &ObjectAName, 00333 OBJ_OPENIF, 00334 NULL, 00335 NULL 00336 ); 00337 00338 Status = ObCreateObject( 00339 KernelMode, 00340 ObjectTypeA, 00341 &ObjectAObjA, 00342 KernelMode, 00343 NULL, 00344 (ULONG)sizeof( OBJECTTYPEA ), 00345 0L, 00346 0L, 00347 (PVOID *)&ObjectBodyA1 00348 ); 00349 00350 00351 Status = ObInsertObject( 00352 ObjectBodyA1, 00353 SYNCHRONIZE | 0x3, 00354 NULL, 00355 1, 00356 &ObjectBodyA2, 00357 &ObjectHandleA2 00358 ); 00359 00360 DbgPrint( "Status: %lx ObjectBodyA1: %lx ObjectBodyA2: %lx ObjectHandleA2: %lx\n", 00361 Status, ObjectBodyA1, ObjectBodyA2, ObjectHandleA2 00362 ); 00363 00364 ObpDumpObjectTable( ObpGetObjectTable(), NULL ); 00365 NtClose( ObjectHandleA2 ); 00366 ObDereferenceObject( ObjectBodyA2 ); // ObInsertObject,ObjectPointerBias 00367 00368 NtWaitForSingleObject( ObjectHandleB1, TRUE, NULL ); 00369 Handles[ 0 ] = ObjectHandleA1; 00370 Handles[ 1 ] = ObjectHandleB1; 00371 NtWaitForMultipleObjects( 2, Handles, WaitAny, TRUE, NULL ); 00372 00373 ObReferenceObjectByHandle( 00374 ObjectHandleA1, 00375 0L, 00376 ObjectTypeA, 00377 KernelMode, 00378 &ObjectBodyA, 00379 NULL 00380 ); 00381 00382 ObReferenceObjectByHandle( 00383 ObjectHandleB1, 00384 0L, 00385 ObjectTypeB, 00386 KernelMode, 00387 &ObjectBodyB, 00388 NULL 00389 ); 00390 DbgPrint( "Reference Handle %lx = %lx\n", ObjectHandleA1, ObjectBodyA ); 00391 00392 DbgPrint( "Reference Handle %lx = %lx\n", ObjectHandleB1, ObjectBodyB ); 00393 00394 ObpDumpObjectTable( ObpGetObjectTable(), NULL ); 00395 00396 ObReferenceObjectByPointer( 00397 ObjectBodyA, 00398 0L, 00399 ObjectTypeA, 00400 KernelMode 00401 ); 00402 00403 ObReferenceObjectByPointer( 00404 ObjectBodyB, 00405 0L, 00406 ObjectTypeB, 00407 KernelMode 00408 ); 00409 00410 ObpDumpObjectTable( ObpGetObjectTable(), NULL ); 00411 00412 RtlInitString( &ObjectAPathName, "\\MyObjects\\ObjectA" ); 00413 RtlInitString( &ObjectBPathName, "\\MyObjects\\ObjectB" ); 00414 ObReferenceObjectByName( 00415 &ObjectAPathName, 00416 OBJ_CASE_INSENSITIVE, 00417 0L, 00418 ObjectTypeA, 00419 KernelMode, 00420 NULL, 00421 &ObjectBodyA 00422 ); 00423 00424 ObReferenceObjectByName( 00425 &ObjectBPathName, 00426 OBJ_CASE_INSENSITIVE, 00427 0L, 00428 ObjectTypeB, 00429 KernelMode, 00430 NULL, 00431 &ObjectBodyB 00432 ); 00433 00434 DbgPrint( "Reference Name %s = %lx\n", ObjectAPathName.Buffer, 00435 ObjectBodyA ); 00436 00437 DbgPrint( "Reference Name %s = %lx\n", ObjectBPathName.Buffer, 00438 ObjectBodyB ); 00439 00440 ObpDumpObjectTable( ObpGetObjectTable(), NULL ); 00441 00442 ObDereferenceObject( ObjectBodyA ); // ObInsertObject,ObjectPointerBias 00443 ObDereferenceObject( ObjectBodyB ); 00444 00445 ObDereferenceObject( ObjectBodyA ); // ObReferenceObjectByHandle 00446 ObDereferenceObject( ObjectBodyB ); 00447 00448 ObDereferenceObject( ObjectBodyA ); // ObReferenceObjectByPointer 00449 ObDereferenceObject( ObjectBodyB ); 00450 00451 ObDereferenceObject( ObjectBodyA ); // ObReferenceObjectByName 00452 ObDereferenceObject( ObjectBodyB ); 00453 00454 ObpDumpObjectTable( ObpGetObjectTable(), NULL ); 00455 00456 InitializeObjectAttributes( &ObjectAObjA, 00457 &ObjectAPathName, 00458 OBJ_CASE_INSENSITIVE, 00459 NULL, 00460 NULL 00461 ); 00462 ObOpenObjectByName( 00463 &ObjectAObjA, 00464 0L, 00465 NULL, 00466 ObjectTypeA, 00467 KernelMode, 00468 NULL, 00469 &ObjectHandleA2 00470 ); 00471 00472 InitializeObjectAttributes( &ObjectBObjA, 00473 &ObjectBPathName, 00474 OBJ_CASE_INSENSITIVE, 00475 NULL, 00476 NULL 00477 ); 00478 ObOpenObjectByName( 00479 &ObjectBObjA, 00480 0L, 00481 NULL, 00482 ObjectTypeB, 00483 KernelMode, 00484 NULL, 00485 &ObjectHandleB2 00486 ); 00487 00488 DbgPrint( "Open Object Name %s = %lx\n", ObjectAPathName.Buffer, 00489 ObjectHandleA2 ); 00490 00491 DbgPrint( "Open Object Name %s = %lx\n", ObjectBPathName.Buffer, 00492 ObjectHandleB2 ); 00493 00494 ObpDumpObjectTable( ObpGetObjectTable(), NULL ); 00495 00496 NtClose( ObjectHandleA1 ); 00497 NtClose( ObjectHandleB1 ); 00498 00499 ObpDumpObjectTable( ObpGetObjectTable(), NULL ); 00500 00501 ObReferenceObjectByHandle( 00502 ObjectHandleA2, 00503 0L, 00504 ObjectTypeA, 00505 KernelMode, 00506 &ObjectBodyA, 00507 NULL 00508 ); 00509 00510 ObReferenceObjectByHandle( 00511 ObjectHandleB2, 00512 0L, 00513 ObjectTypeB, 00514 KernelMode, 00515 &ObjectBodyB, 00516 NULL 00517 ); 00518 DbgPrint( "Reference Handle %lx = %lx\n", ObjectHandleA2, ObjectBodyA ); 00519 00520 DbgPrint( "Reference Handle %lx = %lx\n", ObjectHandleB2, ObjectBodyB ); 00521 00522 ObpDumpObjectTable( ObpGetObjectTable(), NULL ); 00523 00524 ObOpenObjectByPointer( 00525 ObjectBodyA, 00526 OBJ_CASE_INSENSITIVE, 00527 0L, 00528 NULL, 00529 ObjectTypeA, 00530 KernelMode, 00531 &ObjectHandleA1 00532 ); 00533 00534 ObOpenObjectByPointer( 00535 ObjectBodyB, 00536 OBJ_CASE_INSENSITIVE, 00537 0L, 00538 NULL, 00539 ObjectTypeB, 00540 KernelMode, 00541 &ObjectHandleB1 00542 ); 00543 00544 DbgPrint( "Open Object Pointer %lx = %lx\n", ObjectBodyA, 00545 ObjectHandleA1 ); 00546 00547 DbgPrint( "Open Object Pointer %lx = %lx\n", ObjectBodyB, 00548 ObjectHandleB1 ); 00549 00550 ObpDumpObjectTable( ObpGetObjectTable(), NULL ); 00551 00552 ObReferenceObjectByHandle( 00553 ObjectHandleA1, 00554 0L, 00555 ObjectTypeA, 00556 KernelMode, 00557 &ObjectBodyA, 00558 NULL 00559 ); 00560 00561 ObReferenceObjectByHandle( 00562 ObjectHandleB1, 00563 0L, 00564 ObjectTypeB, 00565 KernelMode, 00566 &ObjectBodyB, 00567 NULL 00568 ); 00569 DbgPrint( "Reference Handle %lx = %lx\n", ObjectHandleA1, ObjectBodyA ); 00570 00571 DbgPrint( "Reference Handle %lx = %lx\n", ObjectHandleB1, ObjectBodyB ); 00572 00573 ObpDumpObjectTable( ObpGetObjectTable(), NULL ); 00574 00575 ObDereferenceObject( ObjectBodyA ); // ObReferenceObjectByHandle 00576 ObDereferenceObject( ObjectBodyB ); 00577 00578 ObDereferenceObject( ObjectBodyA ); // ObReferenceObjectByHandle 00579 ObDereferenceObject( ObjectBodyB ); 00580 00581 NtClose( ObjectHandleA1 ); 00582 NtClose( ObjectHandleB1 ); 00583 00584 NtClose( ObjectHandleA2 ); 00585 NtClose( ObjectHandleB2 ); 00586 00587 ObpDumpObjectTable( ObpGetObjectTable(), NULL ); 00588 00589 TestFunction = NULL; 00590 00591 return( TRUE ); 00592 }

VOID OpenAProc IN OB_OPEN_REASON  OpenReason,
IN PEPROCESS Process  OPTIONAL,
IN PVOID  Object,
IN ACCESS_MASK  GrantedAccess,
IN ULONG  HandleCount
 

Definition at line 94 of file tob.c.

References DbgPrint, and OpenReasonStrings.

Referenced by obtest().

00101 { 00102 DbgPrint( "OpenAProc: OpenReason = %s Process: %lx \n", 00103 OpenReasonStrings[ OpenReason ], Process ); 00104 DbgPrint( " Object: %lx Access: %lx Count: %lu\n", 00105 Object, GrantedAccess, HandleCount ); 00106 }

NTSTATUS ParseAProc IN PVOID  ParseObject,
IN ULONG  DesiredAccess,
IN KPROCESSOR_MODE  AccessMode,
IN ULONG  Attributes,
IN OUT PSTRING  CompleteName,
IN OUT PSTRING  RemainingName,
IN OUT PVOID Context  OPTIONAL,
OUT PVOID *  Object
 

Definition at line 133 of file tob.c.

References DbgPrint, ObjectTypeA, and ObReferenceObjectByPointer().

Referenced by obtest().

00143 { 00144 DbgPrint( "ParseAProc: %lx\n", ParseObject ); 00145 DbgPrint( " CompleteName: %.*s\n", CompleteName->Length, 00146 CompleteName->Buffer ); 00147 DbgPrint( " RemainingName: %.*s\n", RemainingName->Length, 00148 RemainingName->Buffer ); 00149 ObReferenceObjectByPointer( 00150 ParseObject, 00151 DesiredAccess, 00152 ObjectTypeA, 00153 AccessMode 00154 ); 00155 00156 *Object = ParseObject; 00157 return( STATUS_SUCCESS ); 00158 }


Variable Documentation

HANDLE DirectoryHandle
 

Definition at line 63 of file tob.c.

Referenced by IopDeleteSessionSymLinks(), NtCreateDirectoryObject(), NtOpenDirectoryObject(), NtQueryDirectoryObject(), NtSetInformationProcess(), ObpCreateDosDevicesDirectory(), ObSetDeviceMap(), obtest(), TestChild(), and TestParent().

STRING DirectoryName
 

Definition at line 48 of file tob.c.

Referenced by obtest(), SeCreateObjectAuditAlarm(), TestChild(), and TestParent().

OBJECT_ATTRIBUTES DirectoryObjA
 

Definition at line 45 of file tob.c.

Referenced by obtest().

GENERIC_MAPPING MyGenericMapping
 

Initial value:

{ STANDARD_RIGHTS_READ, STANDARD_RIGHTS_WRITE, STANDARD_RIGHTS_EXECUTE, STANDARD_RIGHTS_READ | STANDARD_RIGHTS_WRITE | STANDARD_RIGHTS_EXECUTE }

Definition at line 23 of file tob.c.

Referenced by obtest().

POBJECTTYPEA ObjectA
 

Definition at line 61 of file tob.c.

Referenced by obtest().

STRING ObjectAName
 

Definition at line 49 of file tob.c.

Referenced by obtest().

OBJECT_ATTRIBUTES ObjectAObjA
 

Definition at line 46 of file tob.c.

Referenced by obtest().

STRING ObjectAPathName
 

Definition at line 51 of file tob.c.

Referenced by obtest().

POBJECTTYPEB ObjectB
 

Definition at line 62 of file tob.c.

Referenced by obtest().

STRING ObjectBName
 

Definition at line 50 of file tob.c.

Referenced by obtest().

OBJECT_ATTRIBUTES ObjectBObjA
 

Definition at line 47 of file tob.c.

Referenced by obtest().

PVOID ObjectBodyA
 

Definition at line 57 of file tob.c.

Referenced by obtest().

PVOID ObjectBodyA1
 

Definition at line 59 of file tob.c.

Referenced by obtest().

PVOID ObjectBodyA2
 

Definition at line 60 of file tob.c.

Referenced by obtest().

PVOID ObjectBodyB
 

Definition at line 58 of file tob.c.

Referenced by obtest().

STRING ObjectBPathName
 

Definition at line 52 of file tob.c.

Referenced by obtest().

HANDLE ObjectHandleA1
 

Definition at line 64 of file tob.c.

Referenced by obtest().

HANDLE ObjectHandleA2
 

Definition at line 66 of file tob.c.

Referenced by obtest().

HANDLE ObjectHandleB1
 

Definition at line 65 of file tob.c.

Referenced by obtest().

HANDLE ObjectHandleB2
 

Definition at line 67 of file tob.c.

Referenced by obtest().

POBJECT_TYPE ObjectTypeA
 

Definition at line 55 of file tob.c.

Referenced by obtest(), and ParseAProc().

STRING ObjectTypeAName
 

Definition at line 53 of file tob.c.

Referenced by obtest().

POBJECT_TYPE ObjectTypeB
 

Definition at line 56 of file tob.c.

Referenced by obtest().

STRING ObjectTypeBName
 

Definition at line 54 of file tob.c.

Referenced by obtest().

char* OpenReasonStrings[]
 

Initial value:

{ "ObCreateHandle", "ObOpenHandle", "ObDuplicateHandle", "ObInheritHandle" }

Definition at line 86 of file tob.c.

Referenced by OpenAProc().


Generated on Sat May 15 19:45:47 2004 for test by doxygen 1.3.7