Lock the handle table if we trying to get a pointer from a handle.

svn path=/trunk/; revision=16758
This commit is contained in:
Hartmut Birr 2005-07-26 19:46:07 +00:00
parent 2c31fcac60
commit 9c8f710c8a

View file

@ -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;