mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 19:03:00 +00:00
[NPFS]
- Fix IRP_MJ_SET_SECURITY. CID 1102517, 1106330 - Fix variable type in NpCommonQueryVolumeInformation. CID 1102210, 1102211 svn path=/trunk/; revision=60742
This commit is contained in:
parent
5e7db1ef90
commit
e02f9e1406
2 changed files with 11 additions and 8 deletions
|
@ -61,7 +61,9 @@ NpCommonSetSecurityInfo(IN PDEVICE_OBJECT DeviceObject,
|
||||||
PNP_FCB Fcb;
|
PNP_FCB Fcb;
|
||||||
PNP_CCB Ccb;
|
PNP_CCB Ccb;
|
||||||
ULONG NamedPipeEnd;
|
ULONG NamedPipeEnd;
|
||||||
PVOID CachedSecurityDescriptor, SecurityDescriptor;
|
PSECURITY_DESCRIPTOR OldSecurityDescriptor;
|
||||||
|
PSECURITY_DESCRIPTOR TempSecurityDescriptor;
|
||||||
|
PSECURITY_DESCRIPTOR NewSecurityDescriptor;
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
|
|
||||||
IoStack = IoGetCurrentIrpStackLocation(Irp);
|
IoStack = IoGetCurrentIrpStackLocation(Irp);
|
||||||
|
@ -73,21 +75,22 @@ NpCommonSetSecurityInfo(IN PDEVICE_OBJECT DeviceObject,
|
||||||
if (!NodeTypeCode) return STATUS_PIPE_DISCONNECTED;
|
if (!NodeTypeCode) return STATUS_PIPE_DISCONNECTED;
|
||||||
if (NodeTypeCode != NPFS_NTC_CCB) return STATUS_INVALID_PARAMETER;
|
if (NodeTypeCode != NPFS_NTC_CCB) return STATUS_INVALID_PARAMETER;
|
||||||
|
|
||||||
|
OldSecurityDescriptor = TempSecurityDescriptor = Fcb->SecurityDescriptor;
|
||||||
Status = SeSetSecurityDescriptorInfo(NULL,
|
Status = SeSetSecurityDescriptorInfo(NULL,
|
||||||
&IoStack->Parameters.SetSecurity.SecurityInformation,
|
&IoStack->Parameters.SetSecurity.SecurityInformation,
|
||||||
IoStack->Parameters.SetSecurity.SecurityDescriptor,
|
IoStack->Parameters.SetSecurity.SecurityDescriptor,
|
||||||
&SecurityDescriptor,
|
&TempSecurityDescriptor,
|
||||||
TRUE,
|
TRUE,
|
||||||
IoGetFileObjectGenericMapping());
|
IoGetFileObjectGenericMapping());
|
||||||
if (!NT_SUCCESS(Status)) return Status;
|
if (!NT_SUCCESS(Status)) return Status;
|
||||||
|
|
||||||
Status = ObLogSecurityDescriptor(SecurityDescriptor, &CachedSecurityDescriptor, TRUE);
|
Status = ObLogSecurityDescriptor(TempSecurityDescriptor, &NewSecurityDescriptor, TRUE);
|
||||||
ExFreePool(SecurityDescriptor);
|
ExFreePool(TempSecurityDescriptor);
|
||||||
|
|
||||||
if (!NT_SUCCESS(Status)) return Status;
|
if (!NT_SUCCESS(Status)) return Status;
|
||||||
|
|
||||||
Fcb->SecurityDescriptor = CachedSecurityDescriptor;
|
Fcb->SecurityDescriptor = NewSecurityDescriptor;
|
||||||
ObDereferenceSecurityDescriptor(SecurityDescriptor, 1);
|
ObDereferenceSecurityDescriptor(OldSecurityDescriptor, 1);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,7 +130,7 @@ NpFsdSetSecurityInfo(IN PDEVICE_OBJECT DeviceObject,
|
||||||
FsRtlEnterFileSystem();
|
FsRtlEnterFileSystem();
|
||||||
NpAcquireExclusiveVcb();
|
NpAcquireExclusiveVcb();
|
||||||
|
|
||||||
Status = NpCommonQuerySecurityInfo(DeviceObject, Irp);
|
Status = NpCommonSetSecurityInfo(DeviceObject, Irp);
|
||||||
|
|
||||||
NpReleaseVcb();
|
NpReleaseVcb();
|
||||||
FsRtlExitFileSystem();
|
FsRtlExitFileSystem();
|
||||||
|
|
|
@ -140,7 +140,7 @@ NpCommonQueryVolumeInformation(IN PDEVICE_OBJECT DeviceObject,
|
||||||
IN PIRP Irp)
|
IN PIRP Irp)
|
||||||
{
|
{
|
||||||
PIO_STACK_LOCATION IoStack;
|
PIO_STACK_LOCATION IoStack;
|
||||||
FILE_INFORMATION_CLASS InfoClass;
|
FS_INFORMATION_CLASS InfoClass;
|
||||||
ULONG Length;
|
ULONG Length;
|
||||||
PVOID Buffer;
|
PVOID Buffer;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue