aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAN Long <aisk1988@gmail.com>2023-09-13 14:24:41 +0000
committerGopher Robot <gobot@golang.org>2023-10-06 20:50:44 +0000
commit8ccaaf02a41dd9c49f12cab4025ecb99bd49364f (patch)
treeabea0d24c4107620c478dfb420c93207028b444b
parent6ee6208a59482f91266522cae4a06c1c468b104a (diff)
downloadgolang-x-sys-8ccaaf02a41dd9c49f12cab4025ecb99bd49364f.tar.gz
windows: add GetFileTime
Add a simple Windows API GetFileTime. The document is https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getfiletime Fixes golang/go#21541 Change-Id: Ia7b8385d27348b2abc0ee560c5bd7e66cb6d13f2 GitHub-Last-Rev: 6700dccbad089ec2a772245d8f1f262db6f7a707 GitHub-Pull-Request: golang/sys#174 Reviewed-on: https://go-review.googlesource.com/c/sys/+/528015 Reviewed-by: Michael Pratt <mpratt@google.com> Reviewed-by: Alex Brainman <alex.brainman@gmail.com> TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Alex Brainman <alex.brainman@gmail.com> Auto-Submit: Michael Pratt <mpratt@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com>
-rw-r--r--windows/syscall_windows.go1
-rw-r--r--windows/zsyscall_windows.go9
2 files changed, 10 insertions, 0 deletions
diff --git a/windows/syscall_windows.go b/windows/syscall_windows.go
index 35cfc57..dcaa409 100644
--- a/windows/syscall_windows.go
+++ b/windows/syscall_windows.go
@@ -233,6 +233,7 @@ func NewCallbackCDecl(fn interface{}) uintptr {
//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 GetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetime) (err error)
//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
diff --git a/windows/zsyscall_windows.go b/windows/zsyscall_windows.go
index 8b1688d..db6282e 100644
--- a/windows/zsyscall_windows.go
+++ b/windows/zsyscall_windows.go
@@ -253,6 +253,7 @@ var (
procGetFileAttributesW = modkernel32.NewProc("GetFileAttributesW")
procGetFileInformationByHandle = modkernel32.NewProc("GetFileInformationByHandle")
procGetFileInformationByHandleEx = modkernel32.NewProc("GetFileInformationByHandleEx")
+ procGetFileTime = modkernel32.NewProc("GetFileTime")
procGetFileType = modkernel32.NewProc("GetFileType")
procGetFinalPathNameByHandleW = modkernel32.NewProc("GetFinalPathNameByHandleW")
procGetFullPathNameW = modkernel32.NewProc("GetFullPathNameW")
@@ -2185,6 +2186,14 @@ func GetFileInformationByHandleEx(handle Handle, class uint32, outBuffer *byte,
return
}
+func GetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetime) (err error) {
+ r1, _, e1 := syscall.Syscall6(procGetFileTime.Addr(), 4, uintptr(handle), uintptr(unsafe.Pointer(ctime)), uintptr(unsafe.Pointer(atime)), uintptr(unsafe.Pointer(wtime)), 0, 0)
+ if r1 == 0 {
+ err = errnoErr(e1)
+ }
+ return
+}
+
func GetFileType(filehandle Handle) (n uint32, err error) {
r0, _, e1 := syscall.Syscall(procGetFileType.Addr(), 1, uintptr(filehandle), 0, 0)
n = uint32(r0)