mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-23 00:43:00 -05:00
sys: FspFileNodeSetOwner(), FspFileNodeReleaseOwner()
This commit is contained in:
parent
b2e6ec0f44
commit
7b5a7cd2f0
@ -405,7 +405,7 @@ NTSTATUS FspFsvolCreatePrepare(
|
|||||||
FileObject = FspIopRequestContext(Request, RequestFileObject);
|
FileObject = FspIopRequestContext(Request, RequestFileObject);
|
||||||
|
|
||||||
/* lock the FileNode for overwriting */
|
/* lock the FileNode for overwriting */
|
||||||
Success = DEBUGRANDTEST(90, TRUE) && FspFileNodeTryAcquireExclusive(FileNode, Both);
|
Success = DEBUGRANDTEST(90, TRUE) && FspFileNodeTryAcquireExclusive(FileNode, Full);
|
||||||
if (!Success)
|
if (!Success)
|
||||||
{
|
{
|
||||||
FspIopRetryPrepareIrp(Irp, &Result);
|
FspIopRetryPrepareIrp(Irp, &Result);
|
||||||
@ -417,7 +417,7 @@ NTSTATUS FspFsvolCreatePrepare(
|
|||||||
Success = MmCanFileBeTruncated(&FileNode->NonPaged->SectionObjectPointers, &Zero);
|
Success = MmCanFileBeTruncated(&FileNode->NonPaged->SectionObjectPointers, &Zero);
|
||||||
if (!Success)
|
if (!Success)
|
||||||
{
|
{
|
||||||
FspFileNodeRelease(FileNode, Both);
|
FspFileNodeRelease(FileNode, Full);
|
||||||
|
|
||||||
return STATUS_USER_MAPPED_FILE;
|
return STATUS_USER_MAPPED_FILE;
|
||||||
}
|
}
|
||||||
@ -652,7 +652,7 @@ NTSTATUS FspFsvolCreateComplete(
|
|||||||
Response->Rsp.Overwrite.FileInfo.AllocationSize,
|
Response->Rsp.Overwrite.FileInfo.AllocationSize,
|
||||||
Response->Rsp.Overwrite.FileInfo.FileSize);
|
Response->Rsp.Overwrite.FileInfo.FileSize);
|
||||||
|
|
||||||
FspFileNodeRelease(FileNode, Both);
|
FspFileNodeRelease(FileNode, Full);
|
||||||
|
|
||||||
/* SUCCESS! */
|
/* SUCCESS! */
|
||||||
FspFileNodeSetFileInfo(FileNode, &Response->Rsp.Overwrite.FileInfo);
|
FspFileNodeSetFileInfo(FileNode, &Response->Rsp.Overwrite.FileInfo);
|
||||||
@ -687,7 +687,7 @@ static NTSTATUS FspFsvolCreateTryOpen(PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Re
|
|||||||
FSP_FSCTL_TRANSACT_REQ *Request = FspIrpRequest(Irp);
|
FSP_FSCTL_TRANSACT_REQ *Request = FspIrpRequest(Irp);
|
||||||
BOOLEAN Success;
|
BOOLEAN Success;
|
||||||
|
|
||||||
Success = DEBUGRANDTEST(90, TRUE) && FspFileNodeTryAcquireExclusive(FileNode, Both);
|
Success = DEBUGRANDTEST(90, TRUE) && FspFileNodeTryAcquireExclusive(FileNode, Full);
|
||||||
if (!Success)
|
if (!Success)
|
||||||
{
|
{
|
||||||
/* repost the IRP to retry later */
|
/* repost the IRP to retry later */
|
||||||
@ -720,7 +720,7 @@ static NTSTATUS FspFsvolCreateTryOpen(PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Re
|
|||||||
{
|
{
|
||||||
Success = MmFlushImageSection(&FileNode->NonPaged->SectionObjectPointers,
|
Success = MmFlushImageSection(&FileNode->NonPaged->SectionObjectPointers,
|
||||||
MmFlushForWrite);
|
MmFlushForWrite);
|
||||||
FspFileNodeRelease(FileNode, Both);
|
FspFileNodeRelease(FileNode, Full);
|
||||||
if (!Success)
|
if (!Success)
|
||||||
{
|
{
|
||||||
PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp);
|
PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp);
|
||||||
@ -736,7 +736,7 @@ static NTSTATUS FspFsvolCreateTryOpen(PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Re
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
FspFileNodeRelease(FileNode, Both);
|
FspFileNodeRelease(FileNode, Full);
|
||||||
|
|
||||||
/* SUCCESS! */
|
/* SUCCESS! */
|
||||||
FspFileNodeSetFileInfo(FileNode, &Response->Rsp.Create.Opened.FileInfo);
|
FspFileNodeSetFileInfo(FileNode, &Response->Rsp.Create.Opened.FileInfo);
|
||||||
@ -854,7 +854,7 @@ static VOID FspFsvolCreateOverwriteRequestFini(PVOID Context[3])
|
|||||||
if (RequestPending == State)
|
if (RequestPending == State)
|
||||||
FspFsvolCreatePostClose(FileDesc);
|
FspFsvolCreatePostClose(FileDesc);
|
||||||
else if (RequestProcessing == State)
|
else if (RequestProcessing == State)
|
||||||
FspFileNodeRelease(FileDesc->FileNode, Both);
|
FspFileNodeRelease(FileDesc->FileNode, Full);
|
||||||
|
|
||||||
FspFileNodeClose(FileDesc->FileNode, FileObject, 0);
|
FspFileNodeClose(FileDesc->FileNode, FileObject, 0);
|
||||||
FspFileNodeDereference(FileDesc->FileNode);
|
FspFileNodeDereference(FileDesc->FileNode);
|
||||||
|
@ -547,7 +547,7 @@ enum
|
|||||||
{
|
{
|
||||||
FspFileNodeAcquireMain = 1,
|
FspFileNodeAcquireMain = 1,
|
||||||
FspFileNodeAcquirePgio = 2,
|
FspFileNodeAcquirePgio = 2,
|
||||||
FspFileNodeAcquireBoth = 3,
|
FspFileNodeAcquireFull = 3,
|
||||||
};
|
};
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@ -614,7 +614,9 @@ VOID FspFileNodeAcquireSharedF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
|||||||
BOOLEAN FspFileNodeTryAcquireSharedF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
BOOLEAN FspFileNodeTryAcquireSharedF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
||||||
VOID FspFileNodeAcquireExclusiveF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
VOID FspFileNodeAcquireExclusiveF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
||||||
BOOLEAN FspFileNodeTryAcquireExclusiveF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
BOOLEAN FspFileNodeTryAcquireExclusiveF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
||||||
|
VOID FspFileNodeSetOwnerF(FSP_FILE_NODE *FileNode, ULONG Flags, PVOID Owner);
|
||||||
VOID FspFileNodeReleaseF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
VOID FspFileNodeReleaseF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
||||||
|
VOID FspFileNodeReleaseOwnerF(FSP_FILE_NODE *FileNode, ULONG Flags, PVOID Owner);
|
||||||
FSP_FILE_NODE *FspFileNodeOpen(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
|
FSP_FILE_NODE *FspFileNodeOpen(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
|
||||||
UINT32 GrantedAccess, UINT32 ShareAccess, BOOLEAN DeleteOnClose, NTSTATUS *PResult);
|
UINT32 GrantedAccess, UINT32 ShareAccess, BOOLEAN DeleteOnClose, NTSTATUS *PResult);
|
||||||
VOID FspFileNodeClose(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
|
VOID FspFileNodeClose(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
|
||||||
@ -630,7 +632,9 @@ VOID FspFileObjectSetSizes(PFILE_OBJECT FileObject,
|
|||||||
#define FspFileNodeTryAcquireShared(N,F) FspFileNodeTryAcquireSharedF(N, FspFileNodeAcquire ## F)
|
#define FspFileNodeTryAcquireShared(N,F) FspFileNodeTryAcquireSharedF(N, FspFileNodeAcquire ## F)
|
||||||
#define FspFileNodeAcquireExclusive(N,F) FspFileNodeAcquireExclusiveF(N, FspFileNodeAcquire ## F)
|
#define FspFileNodeAcquireExclusive(N,F) FspFileNodeAcquireExclusiveF(N, FspFileNodeAcquire ## F)
|
||||||
#define FspFileNodeTryAcquireExclusive(N,F) FspFileNodeTryAcquireExclusiveF(N, FspFileNodeAcquire ## F)
|
#define FspFileNodeTryAcquireExclusive(N,F) FspFileNodeTryAcquireExclusiveF(N, FspFileNodeAcquire ## F)
|
||||||
|
#define FspFileNodeSetOwner(N,F,P) FspFileNodeSetOwnerF(N, FspFileNodeAcquire ## F, P)
|
||||||
#define FspFileNodeRelease(N,F) FspFileNodeReleaseF(N, FspFileNodeAcquire ## F)
|
#define FspFileNodeRelease(N,F) FspFileNodeReleaseF(N, FspFileNodeAcquire ## F)
|
||||||
|
#define FspFileNodeReleaseOwner(N,F,P) FspFileNodeReleaseOwnerF(N, FspFileNodeAcquire ## F, P)
|
||||||
|
|
||||||
/* debug */
|
/* debug */
|
||||||
#if DBG
|
#if DBG
|
||||||
|
@ -13,7 +13,9 @@ VOID FspFileNodeAcquireSharedF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
|||||||
BOOLEAN FspFileNodeTryAcquireSharedF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
BOOLEAN FspFileNodeTryAcquireSharedF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
||||||
VOID FspFileNodeAcquireExclusiveF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
VOID FspFileNodeAcquireExclusiveF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
||||||
BOOLEAN FspFileNodeTryAcquireExclusiveF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
BOOLEAN FspFileNodeTryAcquireExclusiveF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
||||||
|
VOID FspFileNodeSetOwnerF(FSP_FILE_NODE *FileNode, ULONG Flags, PVOID Owner);
|
||||||
VOID FspFileNodeReleaseF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
VOID FspFileNodeReleaseF(FSP_FILE_NODE *FileNode, ULONG Flags);
|
||||||
|
VOID FspFileNodeReleaseOwnerF(FSP_FILE_NODE *FileNode, ULONG Flags, PVOID Owner);
|
||||||
FSP_FILE_NODE *FspFileNodeOpen(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
|
FSP_FILE_NODE *FspFileNodeOpen(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
|
||||||
UINT32 GrantedAccess, UINT32 ShareAccess, BOOLEAN DeleteOnClose, NTSTATUS *PResult);
|
UINT32 GrantedAccess, UINT32 ShareAccess, BOOLEAN DeleteOnClose, NTSTATUS *PResult);
|
||||||
VOID FspFileNodeClose(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
|
VOID FspFileNodeClose(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
|
||||||
@ -33,7 +35,9 @@ VOID FspFileObjectSetSizes(PFILE_OBJECT FileObject,
|
|||||||
#pragma alloc_text(PAGE, FspFileNodeTryAcquireSharedF)
|
#pragma alloc_text(PAGE, FspFileNodeTryAcquireSharedF)
|
||||||
#pragma alloc_text(PAGE, FspFileNodeAcquireExclusiveF)
|
#pragma alloc_text(PAGE, FspFileNodeAcquireExclusiveF)
|
||||||
#pragma alloc_text(PAGE, FspFileNodeTryAcquireExclusiveF)
|
#pragma alloc_text(PAGE, FspFileNodeTryAcquireExclusiveF)
|
||||||
|
#pragma alloc_text(PAGE, FspFileNodeSetOwnerF)
|
||||||
#pragma alloc_text(PAGE, FspFileNodeReleaseF)
|
#pragma alloc_text(PAGE, FspFileNodeReleaseF)
|
||||||
|
#pragma alloc_text(PAGE, FspFileNodeReleaseOwnerF)
|
||||||
#pragma alloc_text(PAGE, FspFileNodeOpen)
|
#pragma alloc_text(PAGE, FspFileNodeOpen)
|
||||||
#pragma alloc_text(PAGE, FspFileNodeClose)
|
#pragma alloc_text(PAGE, FspFileNodeClose)
|
||||||
#pragma alloc_text(PAGE, FspFileNodeGetFileInfo)
|
#pragma alloc_text(PAGE, FspFileNodeGetFileInfo)
|
||||||
@ -179,6 +183,19 @@ BOOLEAN FspFileNodeTryAcquireExclusiveF(FSP_FILE_NODE *FileNode, ULONG Flags)
|
|||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID FspFileNodeSetOwnerF(FSP_FILE_NODE *FileNode, ULONG Flags, PVOID Owner)
|
||||||
|
{
|
||||||
|
PAGED_CODE();
|
||||||
|
|
||||||
|
Owner = (PVOID)((UINT_PTR)Owner | 3);
|
||||||
|
|
||||||
|
if (Flags & FspFileNodeAcquireMain)
|
||||||
|
ExSetResourceOwnerPointer(FileNode->Header.Resource, Owner);
|
||||||
|
|
||||||
|
if (Flags & FspFileNodeAcquirePgio)
|
||||||
|
ExSetResourceOwnerPointer(FileNode->Header.PagingIoResource, Owner);
|
||||||
|
}
|
||||||
|
|
||||||
VOID FspFileNodeReleaseF(FSP_FILE_NODE *FileNode, ULONG Flags)
|
VOID FspFileNodeReleaseF(FSP_FILE_NODE *FileNode, ULONG Flags)
|
||||||
{
|
{
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
@ -190,6 +207,29 @@ VOID FspFileNodeReleaseF(FSP_FILE_NODE *FileNode, ULONG Flags)
|
|||||||
ExReleaseResourceLite(FileNode->Header.Resource);
|
ExReleaseResourceLite(FileNode->Header.Resource);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID FspFileNodeReleaseOwnerF(FSP_FILE_NODE *FileNode, ULONG Flags, PVOID Owner)
|
||||||
|
{
|
||||||
|
PAGED_CODE();
|
||||||
|
|
||||||
|
Owner = (PVOID)((UINT_PTR)Owner | 3);
|
||||||
|
|
||||||
|
if (Flags & FspFileNodeAcquirePgio)
|
||||||
|
{
|
||||||
|
if (ExIsResourceAcquiredLite(FileNode->Header.PagingIoResource))
|
||||||
|
ExReleaseResourceLite(FileNode->Header.PagingIoResource);
|
||||||
|
else
|
||||||
|
ExReleaseResourceForThreadLite(FileNode->Header.PagingIoResource, (ERESOURCE_THREAD)Owner);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Flags & FspFileNodeAcquireMain)
|
||||||
|
{
|
||||||
|
if (ExIsResourceAcquiredLite(FileNode->Header.Resource))
|
||||||
|
ExReleaseResourceLite(FileNode->Header.Resource);
|
||||||
|
else
|
||||||
|
ExReleaseResourceForThreadLite(FileNode->Header.Resource, (ERESOURCE_THREAD)Owner);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
FSP_FILE_NODE *FspFileNodeOpen(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
|
FSP_FILE_NODE *FspFileNodeOpen(FSP_FILE_NODE *FileNode, PFILE_OBJECT FileObject,
|
||||||
UINT32 GrantedAccess, UINT32 ShareAccess, BOOLEAN DeleteOnClose, NTSTATUS *PResult)
|
UINT32 GrantedAccess, UINT32 ShareAccess, BOOLEAN DeleteOnClose, NTSTATUS *PResult)
|
||||||
{
|
{
|
||||||
|
@ -105,13 +105,13 @@ static NTSTATUS FspFsvolQueryAllInformation(PFILE_OBJECT FileObject,
|
|||||||
return FSP_STATUS_IOQ_POST;
|
return FSP_STATUS_IOQ_POST;
|
||||||
FileInfo = &FileInfoBuf;
|
FileInfo = &FileInfoBuf;
|
||||||
|
|
||||||
FspFileNodeAcquireShared(FileNode, Both);
|
FspFileNodeAcquireShared(FileNode, Full);
|
||||||
}
|
}
|
||||||
else if (0 == Response)
|
else if (0 == Response)
|
||||||
{
|
{
|
||||||
FspFileNodeAcquireShared(FileNode, Both);
|
FspFileNodeAcquireShared(FileNode, Full);
|
||||||
FspIopRequestContext(Request, RequestFileNode) = FileNode;
|
FspIopRequestContext(Request, RequestFileNode) = FileNode;
|
||||||
FspIopRequestContext(Request, RequestAcquireFlags) = (PVOID)FspFileNodeAcquireBoth;
|
FspIopRequestContext(Request, RequestAcquireFlags) = (PVOID)FspFileNodeAcquireFull;
|
||||||
|
|
||||||
return FSP_STATUS_IOQ_POST;
|
return FSP_STATUS_IOQ_POST;
|
||||||
}
|
}
|
||||||
@ -300,13 +300,13 @@ static NTSTATUS FspFsvolQueryNetworkOpenInformation(PFILE_OBJECT FileObject,
|
|||||||
return FSP_STATUS_IOQ_POST;
|
return FSP_STATUS_IOQ_POST;
|
||||||
FileInfo = &FileInfoBuf;
|
FileInfo = &FileInfoBuf;
|
||||||
|
|
||||||
FspFileNodeAcquireShared(FileNode, Both);
|
FspFileNodeAcquireShared(FileNode, Full);
|
||||||
}
|
}
|
||||||
else if (0 == Response)
|
else if (0 == Response)
|
||||||
{
|
{
|
||||||
FspFileNodeAcquireShared(FileNode, Both);
|
FspFileNodeAcquireShared(FileNode, Full);
|
||||||
FspIopRequestContext(Request, RequestFileNode) = FileNode;
|
FspIopRequestContext(Request, RequestFileNode) = FileNode;
|
||||||
FspIopRequestContext(Request, RequestAcquireFlags) = (PVOID)FspFileNodeAcquireBoth;
|
FspIopRequestContext(Request, RequestAcquireFlags) = (PVOID)FspFileNodeAcquireFull;
|
||||||
|
|
||||||
return FSP_STATUS_IOQ_POST;
|
return FSP_STATUS_IOQ_POST;
|
||||||
}
|
}
|
||||||
@ -320,7 +320,7 @@ static NTSTATUS FspFsvolQueryNetworkOpenInformation(PFILE_OBJECT FileObject,
|
|||||||
Info->AllocationSize = FileNode->Header.AllocationSize;
|
Info->AllocationSize = FileNode->Header.AllocationSize;
|
||||||
Info->EndOfFile = FileNode->Header.FileSize;
|
Info->EndOfFile = FileNode->Header.FileSize;
|
||||||
|
|
||||||
FspFileNodeRelease(FileNode, Both);
|
FspFileNodeRelease(FileNode, Full);
|
||||||
|
|
||||||
Info->CreationTime.QuadPart = FileInfo->CreationTime;
|
Info->CreationTime.QuadPart = FileInfo->CreationTime;
|
||||||
Info->LastAccessTime.QuadPart = FileInfo->LastAccessTime;
|
Info->LastAccessTime.QuadPart = FileInfo->LastAccessTime;
|
||||||
@ -376,13 +376,13 @@ static NTSTATUS FspFsvolQueryStandardInformation(PFILE_OBJECT FileObject,
|
|||||||
return FSP_STATUS_IOQ_POST;
|
return FSP_STATUS_IOQ_POST;
|
||||||
FileInfo = &FileInfoBuf;
|
FileInfo = &FileInfoBuf;
|
||||||
|
|
||||||
FspFileNodeAcquireShared(FileNode, Both);
|
FspFileNodeAcquireShared(FileNode, Full);
|
||||||
}
|
}
|
||||||
else if (0 == Response)
|
else if (0 == Response)
|
||||||
{
|
{
|
||||||
FspFileNodeAcquireShared(FileNode, Both);
|
FspFileNodeAcquireShared(FileNode, Full);
|
||||||
FspIopRequestContext(Request, RequestFileNode) = FileNode;
|
FspIopRequestContext(Request, RequestFileNode) = FileNode;
|
||||||
FspIopRequestContext(Request, RequestAcquireFlags) = (PVOID)FspFileNodeAcquireBoth;
|
FspIopRequestContext(Request, RequestAcquireFlags) = (PVOID)FspFileNodeAcquireFull;
|
||||||
|
|
||||||
return FSP_STATUS_IOQ_POST;
|
return FSP_STATUS_IOQ_POST;
|
||||||
}
|
}
|
||||||
@ -587,18 +587,18 @@ static NTSTATUS FspFsvolSetAllocationInformation(PFILE_OBJECT FileObject,
|
|||||||
|
|
||||||
Request->Req.SetInformation.Info.Allocation.AllocationSize = Info->AllocationSize.QuadPart;
|
Request->Req.SetInformation.Info.Allocation.AllocationSize = Info->AllocationSize.QuadPart;
|
||||||
|
|
||||||
FspFileNodeAcquireExclusive(FileNode, Both);
|
FspFileNodeAcquireExclusive(FileNode, Full);
|
||||||
|
|
||||||
Success = MmCanFileBeTruncated(FileObject->SectionObjectPointer, &Info->AllocationSize);
|
Success = MmCanFileBeTruncated(FileObject->SectionObjectPointer, &Info->AllocationSize);
|
||||||
if (!Success)
|
if (!Success)
|
||||||
{
|
{
|
||||||
FspFileNodeRelease(FileNode, Both);
|
FspFileNodeRelease(FileNode, Full);
|
||||||
|
|
||||||
return STATUS_USER_MAPPED_FILE;
|
return STATUS_USER_MAPPED_FILE;
|
||||||
}
|
}
|
||||||
|
|
||||||
FspIopRequestContext(Request, RequestFileNode) = FileNode;
|
FspIopRequestContext(Request, RequestFileNode) = FileNode;
|
||||||
FspIopRequestContext(Request, RequestAcquireFlags) = (PVOID)FspFileNodeAcquireBoth;
|
FspIopRequestContext(Request, RequestAcquireFlags) = (PVOID)FspFileNodeAcquireFull;
|
||||||
|
|
||||||
return FSP_STATUS_IOQ_POST;
|
return FSP_STATUS_IOQ_POST;
|
||||||
}
|
}
|
||||||
@ -614,7 +614,7 @@ static NTSTATUS FspFsvolSetAllocationInformation(PFILE_OBJECT FileObject,
|
|||||||
FileNode->CcStatus = FspCcSetFileSizes(
|
FileNode->CcStatus = FspCcSetFileSizes(
|
||||||
FileObject, (PCC_FILE_SIZES)&FileNode->Header.AllocationSize);
|
FileObject, (PCC_FILE_SIZES)&FileNode->Header.AllocationSize);
|
||||||
|
|
||||||
FspFileNodeRelease(FileNode, Both);
|
FspFileNodeRelease(FileNode, Full);
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user