35 lines
637 B
Go
35 lines
637 B
Go
// backend\postwork_lock_windows.go
|
|
|
|
//go:build windows
|
|
|
|
package main
|
|
|
|
import (
|
|
"os"
|
|
"syscall"
|
|
)
|
|
|
|
const fileShareDelete = 0x00000004
|
|
|
|
func lockPostWorkFile(path string) (*os.File, error) {
|
|
ptr, err := syscall.UTF16PtrFromString(path)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
handle, err := syscall.CreateFile(
|
|
ptr,
|
|
0, // desired access: nur Handle halten, kein Lesen/Schreiben nötig
|
|
syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE, // bewusst OHNE FILE_SHARE_DELETE
|
|
nil,
|
|
syscall.OPEN_EXISTING,
|
|
syscall.FILE_ATTRIBUTE_NORMAL,
|
|
0,
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return os.NewFile(uintptr(handle), path), nil
|
|
}
|