2010-02-26 11:43:19 +00:00
|
|
|
#pragma once
|
2001-06-12 17:51:51 +00:00
|
|
|
|
2005-09-07 20:59:26 +00:00
|
|
|
typedef struct _USER_REFERENCE_ENTRY
|
2001-06-12 17:51:51 +00:00
|
|
|
{
|
2005-09-07 20:59:26 +00:00
|
|
|
SINGLE_LIST_ENTRY Entry;
|
|
|
|
PVOID obj;
|
|
|
|
} USER_REFERENCE_ENTRY, *PUSER_REFERENCE_ENTRY;
|
|
|
|
|
2008-02-13 00:46:23 +00:00
|
|
|
extern PUSER_HANDLE_TABLE gHandleTable;
|
|
|
|
VOID FASTCALL UserReferenceObject(PVOID obj);
|
2012-12-29 19:14:30 +00:00
|
|
|
PVOID FASTCALL UserReferenceObjectByHandle(HANDLE handle, HANDLE_TYPE type);
|
2008-02-13 00:46:23 +00:00
|
|
|
BOOL FASTCALL UserDereferenceObject(PVOID obj);
|
2012-12-29 19:14:30 +00:00
|
|
|
PVOID FASTCALL UserCreateObject(PUSER_HANDLE_TABLE ht, struct _DESKTOP* pDesktop, PTHREADINFO pti, HANDLE* h,HANDLE_TYPE type , ULONG size);
|
|
|
|
BOOL FASTCALL UserDeleteObject(HANDLE h, HANDLE_TYPE type );
|
|
|
|
PVOID UserGetObject(PUSER_HANDLE_TABLE ht, HANDLE handle, HANDLE_TYPE type );
|
|
|
|
PVOID UserGetObjectNoErr(PUSER_HANDLE_TABLE, HANDLE, HANDLE_TYPE);
|
2009-08-24 20:09:58 +00:00
|
|
|
BOOL FASTCALL UserCreateHandleTable(VOID);
|
2012-06-02 03:34:04 +00:00
|
|
|
BOOL FASTCALL UserObjectInDestroy(HANDLE);
|
2012-10-27 16:39:18 +00:00
|
|
|
void DbgUserDumpHandleTable();
|
2014-03-14 02:39:18 +00:00
|
|
|
PVOID FASTCALL ValidateHandle(HANDLE handle, HANDLE_TYPE type);
|
2014-09-21 17:44:40 +00:00
|
|
|
BOOLEAN UserDestroyObjectsForOwner(PUSER_HANDLE_TABLE Table, PVOID Owner);
|
2016-09-28 16:51:53 +00:00
|
|
|
BOOL FASTCALL UserMarkObjectDestroy(PVOID);
|
2022-04-17 23:23:18 +00:00
|
|
|
PVOID FASTCALL UserAssignmentLock(PVOID *ppvObj, PVOID pvNew);
|
|
|
|
PVOID FASTCALL UserAssignmentUnlock(PVOID *ppvObj);
|
2005-09-07 20:59:26 +00:00
|
|
|
|
2007-01-21 17:23:23 +00:00
|
|
|
static __inline VOID
|
|
|
|
UserRefObjectCo(PVOID obj, PUSER_REFERENCE_ENTRY UserReferenceEntry)
|
|
|
|
{
|
2008-10-16 17:52:38 +00:00
|
|
|
PTHREADINFO W32Thread;
|
2007-01-21 17:23:23 +00:00
|
|
|
|
|
|
|
W32Thread = PsGetCurrentThreadWin32Thread();
|
|
|
|
ASSERT(W32Thread != NULL);
|
|
|
|
ASSERT(UserReferenceEntry != NULL);
|
|
|
|
UserReferenceEntry->obj = obj;
|
2008-02-13 00:46:23 +00:00
|
|
|
UserReferenceObject(obj);
|
2007-01-21 17:23:23 +00:00
|
|
|
PushEntryList(&W32Thread->ReferencesList, &UserReferenceEntry->Entry);
|
|
|
|
}
|
|
|
|
|
|
|
|
static __inline VOID
|
|
|
|
UserDerefObjectCo(PVOID obj)
|
|
|
|
{
|
2008-10-16 17:52:38 +00:00
|
|
|
PTHREADINFO W32Thread;
|
2007-01-21 17:23:23 +00:00
|
|
|
PSINGLE_LIST_ENTRY ReferenceEntry;
|
|
|
|
PUSER_REFERENCE_ENTRY UserReferenceEntry;
|
|
|
|
|
|
|
|
ASSERT(obj != NULL);
|
|
|
|
W32Thread = PsGetCurrentThreadWin32Thread();
|
|
|
|
ASSERT(W32Thread != NULL);
|
|
|
|
ReferenceEntry = PopEntryList(&W32Thread->ReferencesList);
|
|
|
|
ASSERT(ReferenceEntry != NULL);
|
|
|
|
UserReferenceEntry = CONTAINING_RECORD(ReferenceEntry, USER_REFERENCE_ENTRY, Entry);
|
|
|
|
ASSERT(UserReferenceEntry != NULL);
|
|
|
|
|
|
|
|
ASSERT(obj == UserReferenceEntry->obj);
|
2008-02-13 00:46:23 +00:00
|
|
|
UserDereferenceObject(obj);
|
2005-09-07 20:59:26 +00:00
|
|
|
}
|
2003-05-18 17:16:18 +00:00
|
|
|
|
2014-10-21 19:57:03 +00:00
|
|
|
void FreeProcMarkObject(_In_ PVOID Object);
|
|
|
|
|
2001-06-12 17:51:51 +00:00
|
|
|
/* EOF */
|