Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenobject.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
1.7.6.1
|