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