[NTOSKRNL] Implement IopVerifyDeviceObjectOnStack()

This commit is contained in:
Pierre Schweitzer 2018-10-05 10:36:52 +02:00
parent 1820aa8fe6
commit 161b6728ef
No known key found for this signature in database
GPG key ID: 7545556C3D585B0B

View file

@ -687,6 +687,40 @@ IopGetRelatedTargetDevice(IN PFILE_OBJECT FileObject,
return Status;
}
BOOLEAN
NTAPI
IopVerifyDeviceObjectOnStack(IN PDEVICE_OBJECT BaseDeviceObject,
IN PDEVICE_OBJECT TopDeviceObjectHint)
{
KIRQL OldIrql;
BOOLEAN Result;
PDEVICE_OBJECT LoopObject;
ASSERT(BaseDeviceObject != NULL);
Result = FALSE;
/* Simply loop on the device stack and try to find our hint */
OldIrql = KeAcquireQueuedSpinLock(LockQueueIoDatabaseLock);
for (LoopObject = BaseDeviceObject; ; LoopObject = LoopObject->AttachedDevice)
{
/* It was found, it's a success */
if (LoopObject == TopDeviceObjectHint)
{
Result = TRUE;
break;
}
/* End of the stack, that's a failure - default */
if (LoopObject == NULL)
{
break;
}
}
KeReleaseQueuedSpinLock(LockQueueIoDatabaseLock, OldIrql);
return Result;
}
/* PUBLIC FUNCTIONS ***********************************************************/
/*