sys: fileinfo: call MmCanFileBeTruncated only when truncating (allows file mappings to be created)

sys: util.c: FspGetMdlAddress()
This commit is contained in:
Bill Zissimopoulos
2016-03-16 16:17:22 -07:00
parent fc7c709e5f
commit 26d2d51117
3 changed files with 52 additions and 12 deletions

View File

@ -539,11 +539,21 @@ static VOID FspQueueDelayedWorkItemDPC(PKDPC Dpc,
ExQueueWorkItem(&DelayedWorkItem->WorkQueueItem, DelayedWorkQueue);
}
static inline PVOID FspGetMdlAddress(PMDL Mdl)
{
PVOID VirtualAddress = MmGetMdlVirtualAddress(Mdl);
if (0 == VirtualAddress)
VirtualAddress = MmGetSystemAddressForMdlSafe(Mdl, NormalPagePriority);
return VirtualAddress;
}
BOOLEAN FspSafeMdlCheck(PMDL Mdl)
{
PAGED_CODE();
PVOID VirtualAddress = MmGetMdlVirtualAddress(Mdl);
PVOID VirtualAddress = FspGetMdlAddress(Mdl);
ULONG ByteCount = MmGetMdlByteCount(Mdl);
return 0 == BYTE_OFFSET(VirtualAddress) && 0 == BYTE_OFFSET(ByteCount);
@ -554,7 +564,7 @@ NTSTATUS FspSafeMdlCreate(PMDL UserMdl, LOCK_OPERATION Operation, FSP_SAFE_MDL *
PAGED_CODE();
NTSTATUS Result;
PVOID VirtualAddress = MmGetMdlVirtualAddress(UserMdl);
PVOID VirtualAddress = FspGetMdlAddress(UserMdl);
ULONG ByteCount = MmGetMdlByteCount(UserMdl);
ULONG PageCount = ADDRESS_AND_SIZE_TO_SPAN_PAGES(VirtualAddress, ByteCount);
FSP_SAFE_MDL *SafeMdl;
@ -696,7 +706,7 @@ VOID FspSafeMdlCopyBack(FSP_SAFE_MDL *SafeMdl)
if (IoReadAccess == SafeMdl->Operation)
return;
PVOID VirtualAddress = MmGetMdlVirtualAddress(SafeMdl->UserMdl);
PVOID VirtualAddress = FspGetMdlAddress(SafeMdl->UserMdl);
ULONG ByteCount = MmGetMdlByteCount(SafeMdl->UserMdl);
ULONG PageCount = ADDRESS_AND_SIZE_TO_SPAN_PAGES(VirtualAddress, ByteCount);
ULONG ByteOffsetBgn0, ByteOffsetEnd0, ByteOffsetEnd1;