mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 14:53:40 +00:00
[FASTFAT] Add a wrapper around FsRtlNotifyFullReportChange
This commit is contained in:
parent
168223aeb8
commit
8294118174
6 changed files with 82 additions and 125 deletions
|
@ -124,16 +124,11 @@ VfatCleanupFile(
|
||||||
{
|
{
|
||||||
VfatDelEntry(DeviceExt, pFcb, NULL);
|
VfatDelEntry(DeviceExt, pFcb, NULL);
|
||||||
|
|
||||||
FsRtlNotifyFullReportChange(DeviceExt->NotifySync,
|
vfatReportChange(DeviceExt,
|
||||||
&(DeviceExt->NotifyList),
|
pFcb,
|
||||||
(PSTRING)&pFcb->PathNameU,
|
|
||||||
pFcb->PathNameU.Length - pFcb->LongNameU.Length,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
vfatFCBIsDirectory(pFcb) ?
|
vfatFCBIsDirectory(pFcb) ?
|
||||||
FILE_NOTIFY_CHANGE_DIR_NAME : FILE_NOTIFY_CHANGE_FILE_NAME,
|
FILE_NOTIFY_CHANGE_DIR_NAME : FILE_NOTIFY_CHANGE_FILE_NAME,
|
||||||
FILE_ACTION_REMOVED,
|
FILE_ACTION_REMOVED);
|
||||||
NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pFcb->OpenHandleCount != 0)
|
if (pFcb->OpenHandleCount != 0)
|
||||||
|
|
|
@ -1002,29 +1002,19 @@ VfatCreateFile(
|
||||||
|
|
||||||
if (Irp->IoStatus.Information == FILE_CREATED)
|
if (Irp->IoStatus.Information == FILE_CREATED)
|
||||||
{
|
{
|
||||||
FsRtlNotifyFullReportChange(DeviceExt->NotifySync,
|
vfatReportChange(DeviceExt,
|
||||||
&(DeviceExt->NotifyList),
|
pFcb,
|
||||||
(PSTRING)&pFcb->PathNameU,
|
|
||||||
pFcb->PathNameU.Length - pFcb->LongNameU.Length,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
(vfatFCBIsDirectory(pFcb) ?
|
(vfatFCBIsDirectory(pFcb) ?
|
||||||
FILE_NOTIFY_CHANGE_DIR_NAME : FILE_NOTIFY_CHANGE_FILE_NAME),
|
FILE_NOTIFY_CHANGE_DIR_NAME : FILE_NOTIFY_CHANGE_FILE_NAME),
|
||||||
FILE_ACTION_ADDED,
|
FILE_ACTION_ADDED);
|
||||||
NULL);
|
|
||||||
}
|
}
|
||||||
else if (Irp->IoStatus.Information == FILE_OVERWRITTEN ||
|
else if (Irp->IoStatus.Information == FILE_OVERWRITTEN ||
|
||||||
Irp->IoStatus.Information == FILE_SUPERSEDED)
|
Irp->IoStatus.Information == FILE_SUPERSEDED)
|
||||||
{
|
{
|
||||||
FsRtlNotifyFullReportChange(DeviceExt->NotifySync,
|
vfatReportChange(DeviceExt,
|
||||||
&(DeviceExt->NotifyList),
|
pFcb,
|
||||||
(PSTRING)&pFcb->PathNameU,
|
|
||||||
pFcb->PathNameU.Length - pFcb->LongNameU.Length,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_ATTRIBUTES | FILE_NOTIFY_CHANGE_SIZE,
|
FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_ATTRIBUTES | FILE_NOTIFY_CHANGE_SIZE,
|
||||||
FILE_ACTION_MODIFIED,
|
FILE_ACTION_MODIFIED);
|
||||||
NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pFcb->OpenHandleCount++;
|
pFcb->OpenHandleCount++;
|
||||||
|
|
|
@ -269,12 +269,10 @@ VfatSetBasicInformation(
|
||||||
|
|
||||||
if (NotifyFilter != 0)
|
if (NotifyFilter != 0)
|
||||||
{
|
{
|
||||||
FsRtlNotifyFullReportChange(DeviceExt->NotifySync,
|
vfatReportChange(DeviceExt,
|
||||||
&(DeviceExt->NotifyList),
|
FCB,
|
||||||
(PSTRING)&FCB->PathNameU,
|
NotifyFilter,
|
||||||
FCB->PathNameU.Length - FCB->LongNameU.Length,
|
FILE_ACTION_MODIFIED);
|
||||||
NULL, NULL, NotifyFilter, FILE_ACTION_MODIFIED,
|
|
||||||
NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
|
@ -822,29 +820,19 @@ VfatSetRenameInformation(
|
||||||
|
|
||||||
if (FsRtlAreNamesEqual(&SourceFile, &NewFile, TRUE, NULL))
|
if (FsRtlAreNamesEqual(&SourceFile, &NewFile, TRUE, NULL))
|
||||||
{
|
{
|
||||||
FsRtlNotifyFullReportChange(DeviceExt->NotifySync,
|
vfatReportChange(DeviceExt,
|
||||||
&(DeviceExt->NotifyList),
|
FCB,
|
||||||
(PSTRING)&FCB->PathNameU,
|
|
||||||
FCB->PathNameU.Length - FCB->LongNameU.Length,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
(vfatFCBIsDirectory(FCB) ?
|
(vfatFCBIsDirectory(FCB) ?
|
||||||
FILE_NOTIFY_CHANGE_DIR_NAME : FILE_NOTIFY_CHANGE_FILE_NAME),
|
FILE_NOTIFY_CHANGE_DIR_NAME : FILE_NOTIFY_CHANGE_FILE_NAME),
|
||||||
FILE_ACTION_RENAMED_OLD_NAME,
|
FILE_ACTION_RENAMED_OLD_NAME);
|
||||||
NULL);
|
|
||||||
Status = vfatRenameEntry(DeviceExt, FCB, &NewFile, TRUE);
|
Status = vfatRenameEntry(DeviceExt, FCB, &NewFile, TRUE);
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
FsRtlNotifyFullReportChange(DeviceExt->NotifySync,
|
vfatReportChange(DeviceExt,
|
||||||
&(DeviceExt->NotifyList),
|
FCB,
|
||||||
(PSTRING)&FCB->PathNameU,
|
|
||||||
FCB->PathNameU.Length - FCB->LongNameU.Length,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
(vfatFCBIsDirectory(FCB) ?
|
(vfatFCBIsDirectory(FCB) ?
|
||||||
FILE_NOTIFY_CHANGE_DIR_NAME : FILE_NOTIFY_CHANGE_FILE_NAME),
|
FILE_NOTIFY_CHANGE_DIR_NAME : FILE_NOTIFY_CHANGE_FILE_NAME),
|
||||||
FILE_ACTION_RENAMED_NEW_NAME,
|
FILE_ACTION_RENAMED_NEW_NAME);
|
||||||
NULL);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -865,44 +853,29 @@ VfatSetRenameInformation(
|
||||||
goto Cleanup;
|
goto Cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
FsRtlNotifyFullReportChange(DeviceExt->NotifySync,
|
vfatReportChange(DeviceExt,
|
||||||
&(DeviceExt->NotifyList),
|
FCB,
|
||||||
(PSTRING)&FCB->PathNameU,
|
|
||||||
FCB->PathNameU.Length - FCB->LongNameU.Length,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
(vfatFCBIsDirectory(FCB) ?
|
(vfatFCBIsDirectory(FCB) ?
|
||||||
FILE_NOTIFY_CHANGE_DIR_NAME : FILE_NOTIFY_CHANGE_FILE_NAME),
|
FILE_NOTIFY_CHANGE_DIR_NAME : FILE_NOTIFY_CHANGE_FILE_NAME),
|
||||||
(DeletedTarget ? FILE_ACTION_REMOVED : FILE_ACTION_RENAMED_OLD_NAME),
|
(DeletedTarget ? FILE_ACTION_REMOVED : FILE_ACTION_RENAMED_OLD_NAME));
|
||||||
NULL);
|
|
||||||
Status = vfatRenameEntry(DeviceExt, FCB, &NewFile, FALSE);
|
Status = vfatRenameEntry(DeviceExt, FCB, &NewFile, FALSE);
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
if (DeletedTarget)
|
if (DeletedTarget)
|
||||||
{
|
{
|
||||||
FsRtlNotifyFullReportChange(DeviceExt->NotifySync,
|
vfatReportChange(DeviceExt,
|
||||||
&(DeviceExt->NotifyList),
|
FCB,
|
||||||
(PSTRING)&FCB->PathNameU,
|
|
||||||
FCB->PathNameU.Length - FCB->LongNameU.Length,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
FILE_NOTIFY_CHANGE_ATTRIBUTES | FILE_NOTIFY_CHANGE_SIZE | FILE_NOTIFY_CHANGE_LAST_WRITE
|
FILE_NOTIFY_CHANGE_ATTRIBUTES | FILE_NOTIFY_CHANGE_SIZE | FILE_NOTIFY_CHANGE_LAST_WRITE
|
||||||
| FILE_NOTIFY_CHANGE_LAST_ACCESS | FILE_NOTIFY_CHANGE_CREATION | FILE_NOTIFY_CHANGE_EA,
|
| FILE_NOTIFY_CHANGE_LAST_ACCESS | FILE_NOTIFY_CHANGE_CREATION | FILE_NOTIFY_CHANGE_EA,
|
||||||
FILE_ACTION_MODIFIED,
|
FILE_ACTION_MODIFIED);
|
||||||
NULL);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FsRtlNotifyFullReportChange(DeviceExt->NotifySync,
|
vfatReportChange(DeviceExt,
|
||||||
&(DeviceExt->NotifyList),
|
FCB,
|
||||||
(PSTRING)&FCB->PathNameU,
|
|
||||||
FCB->PathNameU.Length - FCB->LongNameU.Length,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
(vfatFCBIsDirectory(FCB) ?
|
(vfatFCBIsDirectory(FCB) ?
|
||||||
FILE_NOTIFY_CHANGE_DIR_NAME : FILE_NOTIFY_CHANGE_FILE_NAME),
|
FILE_NOTIFY_CHANGE_DIR_NAME : FILE_NOTIFY_CHANGE_FILE_NAME),
|
||||||
FILE_ACTION_RENAMED_NEW_NAME,
|
FILE_ACTION_RENAMED_NEW_NAME);
|
||||||
NULL);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -936,44 +909,29 @@ VfatSetRenameInformation(
|
||||||
UNREFERENCED_PARAMETER(NewReferences);
|
UNREFERENCED_PARAMETER(NewReferences);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
FsRtlNotifyFullReportChange(DeviceExt->NotifySync,
|
vfatReportChange(DeviceExt,
|
||||||
&(DeviceExt->NotifyList),
|
FCB,
|
||||||
(PSTRING)&FCB->PathNameU,
|
|
||||||
FCB->PathNameU.Length - FCB->LongNameU.Length,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
(vfatFCBIsDirectory(FCB) ?
|
(vfatFCBIsDirectory(FCB) ?
|
||||||
FILE_NOTIFY_CHANGE_DIR_NAME : FILE_NOTIFY_CHANGE_FILE_NAME),
|
FILE_NOTIFY_CHANGE_DIR_NAME : FILE_NOTIFY_CHANGE_FILE_NAME),
|
||||||
FILE_ACTION_REMOVED,
|
FILE_ACTION_REMOVED);
|
||||||
NULL);
|
|
||||||
Status = VfatMoveEntry(DeviceExt, FCB, &NewFile, ParentFCB);
|
Status = VfatMoveEntry(DeviceExt, FCB, &NewFile, ParentFCB);
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
if (DeletedTarget)
|
if (DeletedTarget)
|
||||||
{
|
{
|
||||||
FsRtlNotifyFullReportChange(DeviceExt->NotifySync,
|
vfatReportChange(DeviceExt,
|
||||||
&(DeviceExt->NotifyList),
|
FCB,
|
||||||
(PSTRING)&FCB->PathNameU,
|
|
||||||
FCB->PathNameU.Length - FCB->LongNameU.Length,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
FILE_NOTIFY_CHANGE_ATTRIBUTES | FILE_NOTIFY_CHANGE_SIZE | FILE_NOTIFY_CHANGE_LAST_WRITE
|
FILE_NOTIFY_CHANGE_ATTRIBUTES | FILE_NOTIFY_CHANGE_SIZE | FILE_NOTIFY_CHANGE_LAST_WRITE
|
||||||
| FILE_NOTIFY_CHANGE_LAST_ACCESS | FILE_NOTIFY_CHANGE_CREATION | FILE_NOTIFY_CHANGE_EA,
|
| FILE_NOTIFY_CHANGE_LAST_ACCESS | FILE_NOTIFY_CHANGE_CREATION | FILE_NOTIFY_CHANGE_EA,
|
||||||
FILE_ACTION_MODIFIED,
|
FILE_ACTION_MODIFIED);
|
||||||
NULL);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FsRtlNotifyFullReportChange(DeviceExt->NotifySync,
|
vfatReportChange(DeviceExt,
|
||||||
&(DeviceExt->NotifyList),
|
FCB,
|
||||||
(PSTRING)&FCB->PathNameU,
|
|
||||||
FCB->PathNameU.Length - FCB->LongNameU.Length,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
(vfatFCBIsDirectory(FCB) ?
|
(vfatFCBIsDirectory(FCB) ?
|
||||||
FILE_NOTIFY_CHANGE_DIR_NAME : FILE_NOTIFY_CHANGE_FILE_NAME),
|
FILE_NOTIFY_CHANGE_DIR_NAME : FILE_NOTIFY_CHANGE_FILE_NAME),
|
||||||
FILE_ACTION_ADDED,
|
FILE_ACTION_ADDED);
|
||||||
NULL);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1070,15 +1070,7 @@ Metadata:
|
||||||
Filter = FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_ATTRIBUTES;
|
Filter = FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_ATTRIBUTES;
|
||||||
if (ByteOffset.QuadPart != OldFileSize.QuadPart) Filter |= FILE_NOTIFY_CHANGE_SIZE;
|
if (ByteOffset.QuadPart != OldFileSize.QuadPart) Filter |= FILE_NOTIFY_CHANGE_SIZE;
|
||||||
|
|
||||||
FsRtlNotifyFullReportChange(IrpContext->DeviceExt->NotifySync,
|
vfatReportChange(IrpContext->DeviceExt, Fcb, Filter, FILE_ACTION_MODIFIED);
|
||||||
&(IrpContext->DeviceExt->NotifyList),
|
|
||||||
(PSTRING)&Fcb->PathNameU,
|
|
||||||
Fcb->PathNameU.Length - Fcb->LongNameU.Length,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
Filter,
|
|
||||||
FILE_ACTION_MODIFIED,
|
|
||||||
NULL);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -602,6 +602,21 @@ vfatVolumeIsFatX(PDEVICE_EXTENSION DeviceExt)
|
||||||
return BooleanFlagOn(DeviceExt->Flags, VCB_IS_FATX);
|
return BooleanFlagOn(DeviceExt->Flags, VCB_IS_FATX);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
VOID
|
||||||
|
vfatReportChange(
|
||||||
|
IN PDEVICE_EXTENSION DeviceExt,
|
||||||
|
IN PVFATFCB Fcb,
|
||||||
|
IN ULONG FilterMatch,
|
||||||
|
IN ULONG Action)
|
||||||
|
{
|
||||||
|
FsRtlNotifyFullReportChange(DeviceExt->NotifySync,
|
||||||
|
&(DeviceExt->NotifyList),
|
||||||
|
(PSTRING)&Fcb->PathNameU,
|
||||||
|
Fcb->PathNameU.Length - Fcb->LongNameU.Length,
|
||||||
|
NULL, NULL, FilterMatch, Action, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
#define vfatAddToStat(Vcb, Stat, Inc) \
|
#define vfatAddToStat(Vcb, Stat, Inc) \
|
||||||
{ \
|
{ \
|
||||||
PSTATISTICS Stats = &(Vcb)->Statistics[KeGetCurrentProcessorNumber() % VfatGlobalData->NumberProcessors]; \
|
PSTATISTICS Stats = &(Vcb)->Statistics[KeGetCurrentProcessorNumber() % VfatGlobalData->NumberProcessors]; \
|
||||||
|
@ -1033,6 +1048,13 @@ VfatCheckForDismount(
|
||||||
IN PDEVICE_EXTENSION DeviceExt,
|
IN PDEVICE_EXTENSION DeviceExt,
|
||||||
IN BOOLEAN Create);
|
IN BOOLEAN Create);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
vfatReportChange(
|
||||||
|
IN PDEVICE_EXTENSION DeviceExt,
|
||||||
|
IN PVFATFCB Fcb,
|
||||||
|
IN ULONG FilterMatch,
|
||||||
|
IN ULONG Action);
|
||||||
|
|
||||||
/* pnp.c */
|
/* pnp.c */
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue