ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

object.h
Go to the documentation of this file.
00001 #pragma once
00002 
00003 typedef struct _USER_REFERENCE_ENTRY
00004 {
00005    SINGLE_LIST_ENTRY Entry;
00006    PVOID obj;
00007 } USER_REFERENCE_ENTRY, *PUSER_REFERENCE_ENTRY;
00008 
00009 #define USER_ASSERT(exp,file,line) \
00010     if (!(exp)) {RtlAssert(#exp,(PVOID)file,line,"");}
00011 
00012 static __inline VOID
00013 UserAssertLastRef(PVOID obj, const char *file, int line)
00014 {
00015     PTHREADINFO W32Thread;
00016     PSINGLE_LIST_ENTRY ReferenceEntry;
00017     PUSER_REFERENCE_ENTRY UserReferenceEntry;
00018 
00019     USER_ASSERT(obj != NULL, file, line);
00020     W32Thread = PsGetCurrentThreadWin32Thread();
00021     USER_ASSERT(W32Thread != NULL, file, line);
00022     ReferenceEntry = W32Thread->ReferencesList.Next;
00023     USER_ASSERT(ReferenceEntry != NULL, file, line);
00024     UserReferenceEntry = CONTAINING_RECORD(ReferenceEntry, USER_REFERENCE_ENTRY, Entry);
00025     USER_ASSERT(UserReferenceEntry != NULL, file, line);
00026     USER_ASSERT(obj == UserReferenceEntry->obj, file, line);
00027 }
00028 #define ASSERT_LAST_REF(_obj_) UserAssertLastRef(_obj,__FILE__,__LINE__)
00029 
00030 #undef USER_ASSERT
00031 
00032 extern PUSER_HANDLE_TABLE gHandleTable;
00033 VOID FASTCALL UserReferenceObject(PVOID obj);
00034 PVOID FASTCALL UserReferenceObjectByHandle(HANDLE handle, USER_OBJECT_TYPE type);
00035 BOOL FASTCALL UserDereferenceObject(PVOID obj);
00036 PVOID FASTCALL UserCreateObject(PUSER_HANDLE_TABLE ht, struct _DESKTOP* pDesktop, HANDLE* h,USER_OBJECT_TYPE type , ULONG size);
00037 BOOL FASTCALL UserDeleteObject(HANDLE h, USER_OBJECT_TYPE type );
00038 PVOID UserGetObject(PUSER_HANDLE_TABLE ht, HANDLE handle, USER_OBJECT_TYPE type );
00039 BOOL FASTCALL UserCreateHandleTable(VOID);
00040 
00041 static __inline VOID
00042 UserRefObjectCo(PVOID obj, PUSER_REFERENCE_ENTRY UserReferenceEntry)
00043 {
00044     PTHREADINFO W32Thread;
00045 
00046     W32Thread = PsGetCurrentThreadWin32Thread();
00047     ASSERT(W32Thread != NULL);
00048     ASSERT(UserReferenceEntry != NULL);
00049     UserReferenceEntry->obj = obj;
00050     UserReferenceObject(obj);
00051     PushEntryList(&W32Thread->ReferencesList, &UserReferenceEntry->Entry);
00052 }
00053 
00054 static __inline VOID
00055 UserDerefObjectCo(PVOID obj)
00056 {
00057     PTHREADINFO W32Thread;
00058     PSINGLE_LIST_ENTRY ReferenceEntry;
00059     PUSER_REFERENCE_ENTRY UserReferenceEntry;
00060 
00061     ASSERT(obj != NULL);
00062     W32Thread = PsGetCurrentThreadWin32Thread();
00063     ASSERT(W32Thread != NULL);
00064     ReferenceEntry = PopEntryList(&W32Thread->ReferencesList);
00065     ASSERT(ReferenceEntry != NULL);
00066     UserReferenceEntry = CONTAINING_RECORD(ReferenceEntry, USER_REFERENCE_ENTRY, Entry);
00067     ASSERT(UserReferenceEntry != NULL);
00068 
00069     ASSERT(obj == UserReferenceEntry->obj);
00070     UserDereferenceObject(obj);
00071 }
00072 
00073 /* EOF */

Generated on Sun May 27 2012 04:38:34 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.