+ KeResetEvent(&FileObject->Event);
+ Irp = IoBuildSynchronousFsdRequest(IRP_MJ_SET_SECURITY,
+ FileObject->DeviceObject,
+ NULL,
+ 0,
+ NULL,
+ &FileObject->Event,
+ &IoStatusBlock);
+
+ StackPtr = IoGetNextIrpStackLocation(Irp);
+ StackPtr->FileObject = FileObject;
+
+ StackPtr->Parameters.SetSecurity.SecurityInformation = SecurityInformation;
+ StackPtr->Parameters.SetSecurity.SecurityDescriptor = SecurityDescriptor;
+
+ Status = IoCallDriver(FileObject->DeviceObject, Irp);
+ if (Status == STATUS_PENDING)
+ {
+ KeWaitForSingleObject(&FileObject->Event,
+ Executive,
+ KernelMode,
+ FALSE,
+ NULL);
+ Status = IoStatusBlock.Status;
+ }
+
+ if (Status == STATUS_INVALID_DEVICE_REQUEST)
+ {
+ Status = STATUS_SUCCESS;
+ }
+ return Status;