Skip to content

Commit dac0d1f

Browse files
committed
(windows MTP) Replacing portable device FTM with legacy one.
1 parent acab00a commit dac0d1f

File tree

2 files changed

+12
-6
lines changed

2 files changed

+12
-6
lines changed

mtp/device_windows.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@ func (d *Device) Copy(obj *objects.ObjectInfo) (err error) {
205205
if obj == nil {
206206
panic("Copy is called with nil object")
207207
}
208+
208209
parent := obj.OIS.Find(path.Dir(obj.FullPath))
209210
if parent == nil {
210211
return fmt.Errorf("parent object not found for '%s'", obj.FullPath)
@@ -215,6 +216,12 @@ func (d *Device) Copy(obj *objects.ObjectInfo) (err error) {
215216
d.log.Debug("Executed action Copy", zap.String("actor", d.Name()), zap.Any("object", obj), zap.Duration("elapsed", time.Since(start)), zap.Error(err))
216217
}(time.Now())
217218

219+
from, err := os.Open(obj.ObjectName)
220+
if err != nil {
221+
return fmt.Errorf("unable to open source file '%s': %w", obj.ObjectName, err)
222+
}
223+
defer from.Close()
224+
218225
values, err := createObjectValues(obj.OidParent, obj.Name, &WPD_CONTENT_TYPE_GENERIC_FILE, obj.ObjSize)
219226
if err != nil {
220227
return fmt.Errorf("failed to create object values: %w", err)
@@ -233,11 +240,6 @@ func (d *Device) Copy(obj *objects.ObjectInfo) (err error) {
233240
}
234241
defer stream.Release()
235242

236-
from, err := os.Open(obj.ObjectName)
237-
if err != nil {
238-
return fmt.Errorf("unable to open source file '%s': %w", obj.ObjectName, err)
239-
}
240-
defer from.Close()
241243
written, err := io.CopyBuffer(stream, from, make([]byte, bufsize))
242244
if err != nil {
243245
var oleerr *ole.OleError

mtp/pdevice.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,11 @@ func (v *IPortableDevice) VTable() *IPortableDeviceVtbl {
2929
}
3030

3131
func CreatePortableDevice() (*IPortableDevice, error) {
32-
iu, err := ole.CreateInstance(ole.NewGUID("f7c0039a-4762-488a-b4b3-760ef9a1ba9b"),
32+
33+
// Looks like Go runtime requires legacy marshaling - FTM sporadically crashes in Copy action.
34+
// FTM: iu, err := ole.CreateInstance(ole.NewGUID("f7c0039a-4762-488a-b4b3-760ef9a1ba9b"),
35+
36+
iu, err := ole.CreateInstance(ole.NewGUID("728a21c5-3d9e-48d7-9810-864848f0f404"),
3337
ole.NewGUID("625e2df8-6392-4cf0-9ad1-3cfa5f17775c"))
3438
if err != nil {
3539
return nil, fmt.Errorf("unable to create IPortableDevice: %w", err)

0 commit comments

Comments
 (0)