- 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:
Thomas Faber 2013-10-24 19:11:04 +00:00
parent 5e7db1ef90
commit e02f9e1406
2 changed files with 11 additions and 8 deletions

View file

@ -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();

View file

@ -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;