|
|
@@ -10,6 +10,7 @@ import (
|
|
|
errorspkg "errors"
|
|
|
"sync"
|
|
|
"syscall"
|
|
|
+ "time"
|
|
|
"unicode/utf16"
|
|
|
"unsafe"
|
|
|
)
|
|
|
@@ -194,6 +195,7 @@ func NewCallbackCDecl(fn interface{}) uintptr {
|
|
|
//sys SetEnvironmentVariable(name *uint16, value *uint16) (err error) = kernel32.SetEnvironmentVariableW
|
|
|
//sys CreateEnvironmentBlock(block **uint16, token Token, inheritExisting bool) (err error) = userenv.CreateEnvironmentBlock
|
|
|
//sys DestroyEnvironmentBlock(block *uint16) (err error) = userenv.DestroyEnvironmentBlock
|
|
|
+//sys getTickCount64() (ms uint64) = kernel32.GetTickCount64
|
|
|
//sys SetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetime) (err error)
|
|
|
//sys GetFileAttributes(name *uint16) (attrs uint32, err error) [failretval==INVALID_FILE_ATTRIBUTES] = kernel32.GetFileAttributesW
|
|
|
//sys SetFileAttributes(name *uint16, attrs uint32) (err error) = kernel32.SetFileAttributesW
|
|
|
@@ -498,6 +500,10 @@ func ComputerName() (name string, err error) {
|
|
|
return string(utf16.Decode(b[0:n])), nil
|
|
|
}
|
|
|
|
|
|
+func DurationSinceBoot() time.Duration {
|
|
|
+ return time.Duration(getTickCount64()) * time.Millisecond
|
|
|
+}
|
|
|
+
|
|
|
func Ftruncate(fd Handle, length int64) (err error) {
|
|
|
curoffset, e := Seek(fd, 0, 1)
|
|
|
if e != nil {
|