mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 07:13:01 +00:00
- Wrap MmProbeAndLockPages invocations into SEH.
See issue #2121 for more details. svn path=/trunk/; revision=32054
This commit is contained in:
parent
07c489c7d2
commit
fca1165c23
1 changed files with 44 additions and 9 deletions
|
@ -1555,9 +1555,20 @@ NtQueryDirectoryFile(IN HANDLE FileHandle,
|
||||||
}
|
}
|
||||||
else if (DeviceObject->Flags & DO_DIRECT_IO)
|
else if (DeviceObject->Flags & DO_DIRECT_IO)
|
||||||
{
|
{
|
||||||
/* Allocate an MDL */
|
_SEH_TRY
|
||||||
Mdl = IoAllocateMdl(FileInformation, Length, FALSE, TRUE, Irp);
|
{
|
||||||
MmProbeAndLockPages(Mdl, PreviousMode, IoWriteAccess);
|
/* Allocate an MDL */
|
||||||
|
Mdl = IoAllocateMdl(FileInformation, Length, FALSE, TRUE, Irp);
|
||||||
|
MmProbeAndLockPages(Mdl, PreviousMode, IoWriteAccess);
|
||||||
|
}
|
||||||
|
_SEH_HANDLE
|
||||||
|
{
|
||||||
|
/* Allocating failed, clean up */
|
||||||
|
IopCleanupAfterException(FileObject, Irp, Event, NULL);
|
||||||
|
Status = _SEH_GetExceptionCode();
|
||||||
|
_SEH_YIELD(return Status);
|
||||||
|
}
|
||||||
|
_SEH_END;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2119,9 +2130,21 @@ NtReadFile(IN HANDLE FileHandle,
|
||||||
/* Check if we have a buffer length */
|
/* Check if we have a buffer length */
|
||||||
if (Length)
|
if (Length)
|
||||||
{
|
{
|
||||||
/* Allocate an MDL */
|
_SEH_TRY
|
||||||
Mdl = IoAllocateMdl(Buffer, Length, FALSE, TRUE, Irp);
|
{
|
||||||
MmProbeAndLockPages(Mdl, PreviousMode, IoWriteAccess);
|
/* Allocate an MDL */
|
||||||
|
Mdl = IoAllocateMdl(Buffer, Length, FALSE, TRUE, Irp);
|
||||||
|
MmProbeAndLockPages(Mdl, PreviousMode, IoWriteAccess);
|
||||||
|
}
|
||||||
|
_SEH_HANDLE
|
||||||
|
{
|
||||||
|
/* Allocating failed, clean up */
|
||||||
|
IopCleanupAfterException(FileObject, Irp, Event, NULL);
|
||||||
|
Status = _SEH_GetExceptionCode();
|
||||||
|
_SEH_YIELD(return Status);
|
||||||
|
}
|
||||||
|
_SEH_END;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* No allocation flags */
|
/* No allocation flags */
|
||||||
|
@ -2950,6 +2973,7 @@ NtWriteFile(IN HANDLE FileHandle,
|
||||||
/* Allocating failed, clean up */
|
/* Allocating failed, clean up */
|
||||||
IopCleanupAfterException(FileObject, Irp, Event, NULL);
|
IopCleanupAfterException(FileObject, Irp, Event, NULL);
|
||||||
Status = _SEH_GetExceptionCode();
|
Status = _SEH_GetExceptionCode();
|
||||||
|
_SEH_YIELD(return Status);
|
||||||
}
|
}
|
||||||
_SEH_END;
|
_SEH_END;
|
||||||
|
|
||||||
|
@ -2967,9 +2991,20 @@ NtWriteFile(IN HANDLE FileHandle,
|
||||||
/* Check if we have a buffer length */
|
/* Check if we have a buffer length */
|
||||||
if (Length)
|
if (Length)
|
||||||
{
|
{
|
||||||
/* Allocate an MDL */
|
_SEH_TRY
|
||||||
Mdl = IoAllocateMdl(Buffer, Length, FALSE, TRUE, Irp);
|
{
|
||||||
MmProbeAndLockPages(Mdl, PreviousMode, IoReadAccess);
|
/* Allocate an MDL */
|
||||||
|
Mdl = IoAllocateMdl(Buffer, Length, FALSE, TRUE, Irp);
|
||||||
|
MmProbeAndLockPages(Mdl, PreviousMode, IoReadAccess);
|
||||||
|
}
|
||||||
|
_SEH_HANDLE
|
||||||
|
{
|
||||||
|
/* Allocating failed, clean up */
|
||||||
|
IopCleanupAfterException(FileObject, Irp, Event, NULL);
|
||||||
|
Status = _SEH_GetExceptionCode();
|
||||||
|
_SEH_YIELD(return Status);
|
||||||
|
}
|
||||||
|
_SEH_END;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* No allocation flags */
|
/* No allocation flags */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue