mirror of
https://github.com/reactos/reactos.git
synced 2025-06-05 17:30:32 +00:00
Lock the handle table if we trying to get a pointer from a handle.
svn path=/trunk/; revision=16758
This commit is contained in:
parent
2c31fcac60
commit
9c8f710c8a
1 changed files with 9 additions and 2 deletions
|
@ -910,14 +910,16 @@ ExMapHandleToPointer(IN PHANDLE_TABLE HandleTable,
|
|||
|
||||
ASSERT(HandleTable);
|
||||
|
||||
ExAcquireHandleTableLockShared(HandleTable);
|
||||
HandleTableEntry = ExpLookupHandleTableEntry(HandleTable,
|
||||
Handle);
|
||||
if (HandleTableEntry != NULL && ExLockHandleTableEntry(HandleTable, HandleTableEntry))
|
||||
{
|
||||
DPRINT("ExMapHandleToPointer HT:0x%p Entry:0x%p locked\n", HandleTable, HandleTableEntry);
|
||||
ExReleaseHandleTableLock(HandleTable);
|
||||
return HandleTableEntry;
|
||||
}
|
||||
|
||||
ExReleaseHandleTableLock(HandleTable);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -936,12 +938,14 @@ ExChangeHandle(IN PHANDLE_TABLE HandleTable,
|
|||
ASSERT(ChangeHandleCallback);
|
||||
|
||||
KeEnterCriticalRegion();
|
||||
ExAcquireHandleTableLockShared(HandleTable);
|
||||
|
||||
HandleTableEntry = ExpLookupHandleTableEntry(HandleTable,
|
||||
Handle);
|
||||
|
||||
if(HandleTableEntry != NULL && ExLockHandleTableEntry(HandleTable, HandleTableEntry))
|
||||
{
|
||||
ExReleaseHandleTableLock(HandleTable);
|
||||
Ret = ChangeHandleCallback(HandleTable,
|
||||
HandleTableEntry,
|
||||
NULL);
|
||||
|
@ -949,7 +953,10 @@ ExChangeHandle(IN PHANDLE_TABLE HandleTable,
|
|||
ExUnlockHandleTableEntry(HandleTable,
|
||||
HandleTableEntry);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
ExReleaseHandleTableLock(HandleTable);
|
||||
}
|
||||
KeLeaveCriticalRegion();
|
||||
|
||||
return Ret;
|
||||
|
|
Loading…
Reference in a new issue