UNICODE_STRING UniName;
OEM_STRING OemName;
-
+
PCHAR OemNameBuffer = NULL;
int OemNameLength = 0, i;
Mcb = IrpContext->Fcb->Mcb;
Irp = IrpContext->Irp;
IrpSp = IoGetCurrentIrpStackLocation(Irp);
-
+
_SEH2_TRY {
if (!Mcb || !IsInodeSymLink(&Mcb->Inode) ||
Status = STATUS_NOT_A_REPARSE_POINT;
_SEH2_LEAVE;
}
-
+
OutputBuffer = (PVOID)Irp->AssociatedIrp.SystemBuffer;
OutputBufferLength = IrpSp->Parameters.FileSystemControl.OutputBufferLength;
RtlMoveMemory( (PUCHAR)RDB->SymbolicLinkReparseBuffer.PathBuffer +
RDB->SymbolicLinkReparseBuffer.SubstituteNameOffset,
UniName.Buffer, UniName.Length);
-
+
Status = STATUS_SUCCESS;
} _SEH2_FINALLY {
-
+
if (OemNameBuffer) {
Ext2FreePool(OemNameBuffer, 'NL2E');
}
}
}
} _SEH2_END;
-
+
return Status;
}
PEXT2_MCB Mcb = NULL;
NTSTATUS Status = STATUS_UNSUCCESSFUL;
-
+
PVOID InputBuffer;
ULONG InputBufferLength;
ULONG BytesWritten = 0;
UNICODE_STRING UniName;
OEM_STRING OemName;
-
+
PCHAR OemNameBuffer = NULL;
int OemNameLength = 0, i;
_SEH2_LEAVE;
}
MainResourceAcquired = TRUE;
-
+
InputBuffer = Irp->AssociatedIrp.SystemBuffer;
InputBufferLength = IrpSp->Parameters.FileSystemControl.InputBufferLength;
if (MainResourceAcquired) {
ExReleaseResourceLite(&Fcb->MainResource);
}
-
+
if (OemNameBuffer) {
Ext2FreePool(OemNameBuffer, 'NL2E');
}
-
+
if (NT_SUCCESS(Status)) {
Ext2NotifyReportChange(
IrpContext,
Ext2ReleaseFcb(ParentDcb);
}
} _SEH2_END;
-
+
return Status;
}
PUCHAR data = (PUCHAR)&Mcb->Inode.i_block;
ULONG len = (ULONG)Mcb->Inode.i_size;
LARGE_INTEGER NewSize;
-
+
if (len < EXT2_LINKLEN_IN_INODE && !Mcb->Inode.i_blocks) {
RtlZeroMemory(data + Size, EXT2_LINKLEN_IN_INODE - Size);
goto out;
}
}
-
+
out:
return status;
}
BOOLEAN FcbLockAcquired = FALSE;
BOOLEAN MainResourceAcquired = FALSE;
-
+
_SEH2_TRY {
if (MainResourceAcquired) {
ExReleaseResourceLite(&Fcb->MainResource);
}
-
+
if (NT_SUCCESS(Status)) {
Ext2NotifyReportChange(
IrpContext,
FILE_ACTION_MODIFIED );
}
-
+
if (!_SEH2_AbnormalTermination()) {
if (Status == STATUS_PENDING || Status == STATUS_CANT_WAIT) {
Status = Ext2QueueRequest(IrpContext);
Ext2ReleaseFcb(Fcb);
}
} _SEH2_END;
-
+
return Status;
}
case FSCTL_GET_REPARSE_POINT:
Status = Ext2GetReparsePoint(IrpContext);
break;
-
+
case FSCTL_SET_REPARSE_POINT:
Status = Ext2SetReparsePoint(IrpContext);
break;
-
+
case FSCTL_DELETE_REPARSE_POINT:
Status = Ext2DeleteReparsePoint(IrpContext);
break;
ExAcquireResourceExclusiveLite(
&Vcb->MainResource, TRUE );
- if (IrpContext &&
+ if (IrpContext &&
IrpContext->MajorFunction == IRP_MJ_CREATE &&
IrpContext->RealDevice == Vcb->RealDevice) {
UnCleanCount = 2;