pInfo->AllocationSize.u.LowPart = ROUND_UP(DirContext->DirEntry.FatX.FileSize,
DeviceExt->FatInfo.BytesPerCluster);
}
-
+
pInfo->FileAttributes = DirContext->DirEntry.FatX.Attrib & 0x3f;
}
else
#endif
Buffer = VfatGetUserBuffer(IrpContext->Irp, FALSE);
+ if (!ExAcquireResourceExclusiveLite(&IrpContext->DeviceExt->DirResource,
+ BooleanFlagOn(IrpContext->Flags, IRPCONTEXT_CANWAIT)))
+ {
+ Status = VfatLockUserBuffer(IrpContext->Irp, BufferLength, IoWriteAccess);
+ if (NT_SUCCESS(Status))
+ Status = STATUS_PENDING;
+
+ return Status;
+ }
+
if (!ExAcquireResourceSharedLite(&pFcb->MainResource,
BooleanFlagOn(IrpContext->Flags, IRPCONTEXT_CANWAIT)))
{
+ ExReleaseResourceLite(&IrpContext->DeviceExt->DirResource);
Status = VfatLockUserBuffer(IrpContext->Irp, BufferLength, IoWriteAccess);
if (NT_SUCCESS(Status))
Status = STATUS_PENDING;
* -> The pattern length is not null
* -> The pattern buffer is not null
* Otherwise, we'll fall later and allocate a match all (*) pattern
- */
+ */
if (pSearchPattern &&
pSearchPattern->Length != 0 && pSearchPattern->Buffer != NULL)
{
if (!pCcb->SearchPattern.Buffer)
{
ExReleaseResourceLite(&pFcb->MainResource);
+ ExReleaseResourceLite(&IrpContext->DeviceExt->DirResource);
return STATUS_INSUFFICIENT_RESOURCES;
}
RtlCopyUnicodeString(&pCcb->SearchPattern, pSearchPattern);
if (!pCcb->SearchPattern.Buffer)
{
ExReleaseResourceLite(&pFcb->MainResource);
+ ExReleaseResourceLite(&IrpContext->DeviceExt->DirResource);
return STATUS_INSUFFICIENT_RESOURCES;
}
pCcb->SearchPattern.Buffer[0] = L'*';
DirContext.ShortNameU.Buffer = ShortNameBuffer;
DirContext.ShortNameU.MaximumLength = sizeof(ShortNameBuffer);
- if (!ExAcquireResourceExclusiveLite(&IrpContext->DeviceExt->DirResource,
- BooleanFlagOn(IrpContext->Flags, IRPCONTEXT_CANWAIT)))
- {
- ExReleaseResourceLite(&pFcb->MainResource);
- return STATUS_PENDING;
- }
-
while ((Status == STATUS_SUCCESS) && (BufferLength > 0))
{
Status = FindFile(IrpContext->DeviceExt,
IrpContext->Irp->IoStatus.Information = Stack->Parameters.QueryDirectory.Length - BufferLength;
}
- ExReleaseResourceLite(&IrpContext->DeviceExt->DirResource);
ExReleaseResourceLite(&pFcb->MainResource);
+ ExReleaseResourceLite(&IrpContext->DeviceExt->DirResource);
return Status;
}
Stack = IrpContext->Stack;
pVcb = IrpContext->DeviceExt;
pFcb = (PVFATFCB) IrpContext->FileObject->FsContext;
-
+
FsRtlNotifyFullChangeDirectory(pVcb->NotifySync,
&(pVcb->NotifyList),
IrpContext->FileObject->FsContext2,