PIO_STACK_LOCATION Stack;
PNOTIFY_CHANGE NotifyChange;
PREAL_NOTIFY_SYNC RealNotifySync;
- PSECURITY_SUBJECT_CONTEXT SubjectContext = NULL;
+ PSECURITY_SUBJECT_CONTEXT _SEH2_VOLATILE SubjectContext = NULL;
/* Get the NOTIFY_CHANGE struct and reset it */
NotifyChange = (PNOTIFY_CHANGE)Irp->IoStatus.Information;
if (Buffer == NULL)
{
PsChargePoolQuota(NotifyChange->OwningProcess, PagedPool, BufferLength);
- Buffer = ExAllocatePoolWithTag(PagedPool | POOL_RAISE_IF_ALLOCATION_FAILURE, BufferLength, 'NrSF');
+ Buffer = ExAllocatePoolWithTag(PagedPool | POOL_RAISE_IF_ALLOCATION_FAILURE, BufferLength, TAG_FS_NOTIFICATIONS);
NotifyChange->AllocatedBuffer = Buffer;
}
/* Set appropriate status and complete */
Irp->IoStatus.Status = STATUS_CANCELLED;
- IofCompleteRequest(Irp, EVENT_INCREMENT);
+ IoCompleteRequest(Irp, IO_DISK_INCREMENT);
/* If that notification isn't referenced any longer, drop it */
if (!InterlockedDecrement((PLONG)&(NotifyChange->ReferenceCount)))
if (NotifyChange->AllocatedBuffer)
{
PsReturnProcessPagedPoolQuota(NotifyChange->OwningProcess, NotifyChange->ThisBufferLength);
- ExFreePoolWithTag(NotifyChange->AllocatedBuffer, 'NrSF');
+ ExFreePoolWithTag(NotifyChange->AllocatedBuffer, TAG_FS_NOTIFICATIONS);
}
/* In case of full name, remember subject context for later deletion */
Completion:
IoMarkIrpPending(Irp);
Irp->IoStatus.Status = Status;
- IoCompleteRequest(Irp, EVENT_INCREMENT);
+ IoCompleteRequest(Irp, IO_DISK_INCREMENT);
}
/*
* @implemented
*
* Lets FSD know if changes occures in the specified directory.
- * Directory will be reenumerated.
+ * Directory will be reenumerated.
*
* @param NotifySync
* Synchronization object pointer
* Used to identify the notify structure
*
* @param FullDirectoryName
- * String (A or W) containing the full directory name
+ * String (A or W) containing the full directory name
*
* @param NotifyList
* Notify list pointer (to head)
* Synchronization object pointer
*
* @param NotifyList
- * Notify list pointer (to head)
+ * Notify list pointer (to head)
*
* @param FsContext
* Used to identify the notify structure
{
PNOTIFY_CHANGE NotifyChange;
PREAL_NOTIFY_SYNC RealNotifySync;
- PSECURITY_SUBJECT_CONTEXT SubjectContext = NULL;
+ PSECURITY_SUBJECT_CONTEXT _SEH2_VOLATILE SubjectContext = NULL;
/* Get real structure hidden behind the opaque pointer */
RealNotifySync = (PREAL_NOTIFY_SYNC)NotifySync;
{
IoMarkIrpPending(NotifyIrp);
NotifyIrp->IoStatus.Status = STATUS_NOTIFY_CLEANUP;
- IoCompleteRequest(NotifyIrp, EVENT_INCREMENT);
+ IoCompleteRequest(NotifyIrp, IO_DISK_INCREMENT);
_SEH2_LEAVE;
}
{
IoMarkIrpPending(NotifyIrp);
NotifyIrp->IoStatus.Status = STATUS_NOTIFY_CLEANUP;
- IoCompleteRequest(NotifyIrp, EVENT_INCREMENT);
+ IoCompleteRequest(NotifyIrp, IO_DISK_INCREMENT);
}
/* Or if it's about to be deleted, complete */
else if (NotifyChange->Flags & DELETE_IN_PROCESS)
{
IoMarkIrpPending(NotifyIrp);
NotifyIrp->IoStatus.Status = STATUS_DELETE_PENDING;
- IoCompleteRequest(NotifyIrp, EVENT_INCREMENT);
+ IoCompleteRequest(NotifyIrp, IO_DISK_INCREMENT);
}
/* Complete now if asked to (and not asked to notify later on) */
if ((NotifyChange->Flags & NOTIFY_IMMEDIATELY) && !(NotifyChange->Flags & NOTIFY_LATER))
NotifyChange->Flags &= ~NOTIFY_IMMEDIATELY;
IoMarkIrpPending(NotifyIrp);
NotifyIrp->IoStatus.Status = STATUS_NOTIFY_ENUM_DIR;
- IoCompleteRequest(NotifyIrp, EVENT_INCREMENT);
+ IoCompleteRequest(NotifyIrp, IO_DISK_INCREMENT);
}
/* If no data yet, or asked to notify later on, handle */
else if (NotifyChange->DataLength == 0 || (NotifyChange->Flags & NOTIFY_LATER))
PsChargePoolQuota(NotifyChange->OwningProcess, PagedPool, NumberOfBytes);
PoolQuotaCharged = TRUE;
OutputBuffer = ExAllocatePoolWithTag(PagedPool | POOL_RAISE_IF_ALLOCATION_FAILURE,
- NumberOfBytes, 'NrSF');
+ NumberOfBytes, TAG_FS_NOTIFICATIONS);
NotifyChange->Buffer = OutputBuffer;
NotifyChange->AllocatedBuffer = OutputBuffer;
}
{
if (PoolQuotaCharged)
{
- PsReturnProcessPagedPoolQuota(NotifyChange->OwningProcess, NumberOfBytes);
+ PsReturnProcessPagedPoolQuota(NotifyChange->OwningProcess, NumberOfBytes);
}
NotifyChange->Flags |= NOTIFY_IMMEDIATELY;
}
if (NotifyChange->AllocatedBuffer != NULL)
{
PsReturnProcessPagedPoolQuota(NotifyChange->OwningProcess, NotifyChange->ThisBufferLength);
- ExFreePoolWithTag(NotifyChange->AllocatedBuffer, 'NrSF');
+ ExFreePoolWithTag(NotifyChange->AllocatedBuffer, TAG_FS_NOTIFICATIONS);
}
NotifyChange->Buffer = NULL;
* @name FsRtlNotifyFullChangeDirectory
* @implemented
*
- * Lets FSD know if changes occures in the specified directory.
+ * Lets FSD know if changes occures in the specified directory.
*
* @param NotifySync
* Synchronization object pointer
*
* @param NotifyList
- * Notify list pointer (to head)
+ * Notify list pointer (to head)
*
* @param FsContext
* Used to identify the notify structure
*
* @param FullDirectoryName
- * String (A or W) containing the full directory name
+ * String (A or W) containing the full directory name
*
* @param WatchTree
* True to notify changes in subdirectories too
* Synchronization object pointer
*
* @param NotifyList
- * Notify list pointer (to head)
+ * Notify list pointer (to head)
*
* @param FullTargetName
* String (A or W) containing the full directory name that changed
*
* @param TargetNameOffset
- * Offset, in FullTargetName, of the final component that is in the changed directory
+ * Offset, in FullTargetName, of the final component that is in the changed directory
*
* @param StreamName
* String (A or W) containing a stream name
PREAL_NOTIFY_SYNC RealNotifySync;
*NotifySync = NULL;
-
+
RealNotifySync = ExAllocatePoolWithTag(NonPagedPool | POOL_RAISE_IF_ALLOCATION_FAILURE,
sizeof(REAL_NOTIFY_SYNC), 'FSNS');
ExInitializeFastMutex(&(RealNotifySync->FastMutex));
* Synchronization object pointer
*
* @param NotifyList
- * Notify list pointer (to head)
+ * Notify list pointer (to head)
*
* @param FullTargetName
* String (A or W) containing the full directory name that changed
FilterMatch,
0,
NULL,
- NULL);
+ NULL);
}
/*++