mirror of
https://github.com/reactos/reactos.git
synced 2025-06-11 04:47:22 +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);
|
ASSERT(HandleTable);
|
||||||
|
|
||||||
|
ExAcquireHandleTableLockShared(HandleTable);
|
||||||
HandleTableEntry = ExpLookupHandleTableEntry(HandleTable,
|
HandleTableEntry = ExpLookupHandleTableEntry(HandleTable,
|
||||||
Handle);
|
Handle);
|
||||||
if (HandleTableEntry != NULL && ExLockHandleTableEntry(HandleTable, HandleTableEntry))
|
if (HandleTableEntry != NULL && ExLockHandleTableEntry(HandleTable, HandleTableEntry))
|
||||||
{
|
{
|
||||||
DPRINT("ExMapHandleToPointer HT:0x%p Entry:0x%p locked\n", HandleTable, HandleTableEntry);
|
DPRINT("ExMapHandleToPointer HT:0x%p Entry:0x%p locked\n", HandleTable, HandleTableEntry);
|
||||||
|
ExReleaseHandleTableLock(HandleTable);
|
||||||
return HandleTableEntry;
|
return HandleTableEntry;
|
||||||
}
|
}
|
||||||
|
ExReleaseHandleTableLock(HandleTable);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -936,12 +938,14 @@ ExChangeHandle(IN PHANDLE_TABLE HandleTable,
|
||||||
ASSERT(ChangeHandleCallback);
|
ASSERT(ChangeHandleCallback);
|
||||||
|
|
||||||
KeEnterCriticalRegion();
|
KeEnterCriticalRegion();
|
||||||
|
ExAcquireHandleTableLockShared(HandleTable);
|
||||||
|
|
||||||
HandleTableEntry = ExpLookupHandleTableEntry(HandleTable,
|
HandleTableEntry = ExpLookupHandleTableEntry(HandleTable,
|
||||||
Handle);
|
Handle);
|
||||||
|
|
||||||
if(HandleTableEntry != NULL && ExLockHandleTableEntry(HandleTable, HandleTableEntry))
|
if(HandleTableEntry != NULL && ExLockHandleTableEntry(HandleTable, HandleTableEntry))
|
||||||
{
|
{
|
||||||
|
ExReleaseHandleTableLock(HandleTable);
|
||||||
Ret = ChangeHandleCallback(HandleTable,
|
Ret = ChangeHandleCallback(HandleTable,
|
||||||
HandleTableEntry,
|
HandleTableEntry,
|
||||||
NULL);
|
NULL);
|
||||||
|
@ -949,7 +953,10 @@ ExChangeHandle(IN PHANDLE_TABLE HandleTable,
|
||||||
ExUnlockHandleTableEntry(HandleTable,
|
ExUnlockHandleTableEntry(HandleTable,
|
||||||
HandleTableEntry);
|
HandleTableEntry);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ExReleaseHandleTableLock(HandleTable);
|
||||||
|
}
|
||||||
KeLeaveCriticalRegion();
|
KeLeaveCriticalRegion();
|
||||||
|
|
||||||
return Ret;
|
return Ret;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue