** Copyright (C) 2001-2025 Zabbix SIA
** This program is free software: you can redistribute it and/or modify it under the terms of
** the GNU Affero General Public License as published by the Free Software Foundation, version 3.
** This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
** without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
** See the GNU Affero General Public License for more details.
** You should have received a copy of the GNU Affero General Public License along with this program.
** If not, see <https://www.gnu.org/licenses/>.
"golang.org/x/sys/windows"
"golang.zabbix.com/sdk/zbxerr"
fileBasicInfo = 0 // FILE_BASIC_INFO
type FILE_BASIC_INFO struct {
CreationTime windows.Filetime
LastAccessTime windows.Filetime
LastWriteTime windows.Filetime
ChangeTime windows.Filetime
func getFileChange(path string) (unixTimeNano int64, err error) {
if f, err = os.Open(path); err != nil {
return 0, zbxerr.New(fmt.Sprintf("Cannot open file")).Wrap(err)
err = windows.GetFileInformationByHandleEx(windows.Handle(f.Fd()), fileBasicInfo, (*byte)(unsafe.Pointer(&bi)),
uint32(unsafe.Sizeof(bi)))
return 0, zbxerr.New(fmt.Sprintf("Cannot obtain file information")).Wrap(err)
return bi.ChangeTime.Nanoseconds(), nil
func (p *Plugin) exportTime(params []string) (result interface{}, err error) {