Просмотр исходного кода

windows: add GetFileInformationByHandleEx function

Change-Id: I950762ef59c665d027641b4410ac30697edad22d
Reviewed-on: https://go-review.googlesource.com/c/sys/+/171939
Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
Run-TryBot: Alex Brainman <alex.brainman@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
James Nugent 6 лет назад
Родитель
Сommit
16da32be82
2 измененных файлов с 14 добавлено и 0 удалено
  1. 1 0
      windows/syscall_windows.go
  2. 13 0
      windows/zsyscall_windows.go

+ 1 - 0
windows/syscall_windows.go

@@ -146,6 +146,7 @@ func NewCallbackCDecl(fn interface{}) uintptr {
 //sys	findNextFile1(handle Handle, data *win32finddata1) (err error) = FindNextFileW
 //sys	FindClose(handle Handle) (err error)
 //sys	GetFileInformationByHandle(handle Handle, data *ByHandleFileInformation) (err error)
+//sys	GetFileInformationByHandleEx(handle Handle, class uint32, outBuffer *byte, outBufferLen uint32) (err error)
 //sys	GetCurrentDirectory(buflen uint32, buf *uint16) (n uint32, err error) = GetCurrentDirectoryW
 //sys	SetCurrentDirectory(path *uint16) (err error) = SetCurrentDirectoryW
 //sys	CreateDirectory(path *uint16, sa *SecurityAttributes) (err error) = CreateDirectoryW

+ 13 - 0
windows/zsyscall_windows.go

@@ -86,6 +86,7 @@ var (
 	procFindNextFileW                      = modkernel32.NewProc("FindNextFileW")
 	procFindClose                          = modkernel32.NewProc("FindClose")
 	procGetFileInformationByHandle         = modkernel32.NewProc("GetFileInformationByHandle")
+	procGetFileInformationByHandleEx       = modkernel32.NewProc("GetFileInformationByHandleEx")
 	procGetCurrentDirectoryW               = modkernel32.NewProc("GetCurrentDirectoryW")
 	procSetCurrentDirectoryW               = modkernel32.NewProc("SetCurrentDirectoryW")
 	procCreateDirectoryW                   = modkernel32.NewProc("CreateDirectoryW")
@@ -772,6 +773,18 @@ func GetFileInformationByHandle(handle Handle, data *ByHandleFileInformation) (e
 	return
 }
 
+func GetFileInformationByHandleEx(handle Handle, class uint32, outBuffer *byte, outBufferLen uint32) (err error) {
+	r1, _, e1 := syscall.Syscall6(procGetFileInformationByHandleEx.Addr(), 4, uintptr(handle), uintptr(class), uintptr(unsafe.Pointer(outBuffer)), uintptr(outBufferLen), 0, 0)
+	if r1 == 0 {
+		if e1 != 0 {
+			err = errnoErr(e1)
+		} else {
+			err = syscall.EINVAL
+		}
+	}
+	return
+}
+
 func GetCurrentDirectory(buflen uint32, buf *uint16) (n uint32, err error) {
 	r0, _, e1 := syscall.Syscall(procGetCurrentDirectoryW.Addr(), 2, uintptr(buflen), uintptr(unsafe.Pointer(buf)), 0)
 	n = uint32(r0)