private ICollection <ValidationErrorInfo> InternalValidate(ViewModifyMode mode, Record record) { uint ret = RemotableNativeMethods.MsiViewModify((int)this.Handle, (int)mode, (int)record.Handle); if (ret == (uint)NativeMethods.Error.INVALID_DATA) { ICollection <ValidationErrorInfo> errorInfo = new List <ValidationErrorInfo>(); while (true) { uint bufSize = 40; StringBuilder column = new StringBuilder("", (int)bufSize); int error = RemotableNativeMethods.MsiViewGetError((int)this.Handle, column, ref bufSize); if (error == -2 /*MSIDBERROR_MOREDATA*/) { column.Capacity = (int)++bufSize; error = RemotableNativeMethods.MsiViewGetError((int)this.Handle, column, ref bufSize); } if (error == -3 /*MSIDBERROR_INVALIDARG*/) { throw InstallerException.ExceptionFromReturnCode((uint)NativeMethods.Error.INVALID_PARAMETER); } else if (error == 0 /*MSIDBERROR_NOERROR*/) { break; } errorInfo.Add(new ValidationErrorInfo((ValidationError)error, column.ToString())); } return(errorInfo); } else if (ret != 0) { throw InstallerException.ExceptionFromReturnCode(ret); } return(null); }