mirror of
https://github.com/winfsp/winfsp.git
synced 2025-07-03 17:32:57 -05:00
sys: fileinfo: call MmCanFileBeTruncated only when truncating (allows file mappings to be created)
sys: util.c: FspGetMdlAddress()
This commit is contained in:
@ -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;
|
||||
|
Reference in New Issue
Block a user