[NTOSKRNL] On session last reference removal, dereference LUID device map

This commit is contained in:
Pierre Schweitzer 2019-06-10 12:30:49 +02:00
parent ad80715b1a
commit 5ecc05003d
No known key found for this signature in database
GPG key ID: 7545556C3D585B0B

View file

@ -392,7 +392,7 @@ SepRmReferenceLogonSession(
if (RtlEqualLuid(&CurrentSession->LogonId, LogonLuid))
{
/* Reference the session */
CurrentSession->ReferenceCount += 1;
++CurrentSession->ReferenceCount;
DPRINT("ReferenceCount: %lu\n", CurrentSession->ReferenceCount);
/* Release the database lock */
@ -409,10 +409,21 @@ SepRmReferenceLogonSession(
}
NTSTATUS
SepCleanupLUIDDeviceMapDirectory(
PLUID LogonLuid)
{
UNIMPLEMENTED;
return STATUS_NOT_IMPLEMENTED;
}
NTSTATUS
SepRmDereferenceLogonSession(
PLUID LogonLuid)
{
ULONG RefCount;
PDEVICE_MAP DeviceMap;
PSEP_LOGON_SESSION_REFERENCES CurrentSession;
DPRINT("SepRmDereferenceLogonSession(%08lx:%08lx)\n",
@ -430,12 +441,25 @@ SepRmDereferenceLogonSession(
if (RtlEqualLuid(&CurrentSession->LogonId, LogonLuid))
{
/* Dereference the session */
CurrentSession->ReferenceCount -= 1;
RefCount = --CurrentSession->ReferenceCount;
DPRINT("ReferenceCount: %lu\n", CurrentSession->ReferenceCount);
/* Release the database lock */
KeReleaseGuardedMutex(&SepRmDbLock);
/* We're done with the session */
if (RefCount == 0)
{
/* Get rid of the LUID device map */
DeviceMap = CurrentSession->pDeviceMap;
if (DeviceMap != NULL)
{
CurrentSession->pDeviceMap = NULL;
SepCleanupLUIDDeviceMapDirectory(LogonLuid);
ObfDereferenceDeviceMap(DeviceMap);
}
}
return STATUS_SUCCESS;
}
}