| //go:build windows | |
| package winapi | |
| //sys CopyFileW(existingFileName *uint16, newFileName *uint16, failIfExists int32) (err error) = kernel32.CopyFileW | |
| //sys NtCreateFile(handle *uintptr, accessMask uint32, oa *ObjectAttributes, iosb *IOStatusBlock, allocationSize *uint64, fileAttributes uint32, shareAccess uint32, createDisposition uint32, createOptions uint32, eaBuffer *byte, eaLength uint32) (status uint32) = ntdll.NtCreateFile | |
| //sys NtSetInformationFile(handle uintptr, iosb *IOStatusBlock, information uintptr, length uint32, class uint32) (status uint32) = ntdll.NtSetInformationFile | |
| //sys NtOpenDirectoryObject(handle *uintptr, accessMask uint32, oa *ObjectAttributes) (status uint32) = ntdll.NtOpenDirectoryObject | |
| //sys NtQueryDirectoryObject(handle uintptr, buffer *byte, length uint32, singleEntry bool, restartScan bool, context *uint32, returnLength *uint32)(status uint32) = ntdll.NtQueryDirectoryObject | |
| //sys NtFsControlFile(file windows.Handle, event windows.Handle, apcRoutine uintptr, apcCtx uintptr, iosb *IOStatusBlock, fsControlCode uint32, in []byte, out []byte) (status uint32) = ntdll.NtFsControlFile | |
| const ( | |
| FileLinkInformationClass = 11 | |
| FileDispositionInformationExClass = 64 | |
| FILE_READ_ATTRIBUTES = 0x0080 | |
| FILE_WRITE_ATTRIBUTES = 0x0100 | |
| DELETE = 0x10000 | |
| FILE_OPEN = 1 | |
| FILE_CREATE = 2 | |
| FILE_LIST_DIRECTORY = 0x00000001 | |
| FILE_DIRECTORY_FILE = 0x00000001 | |
| FILE_SYNCHRONOUS_IO_NONALERT = 0x00000020 | |
| FILE_OPEN_FOR_BACKUP_INTENT = 0x00004000 | |
| FILE_OPEN_REPARSE_POINT = 0x00200000 | |
| FILE_DISPOSITION_DELETE = 0x00000001 | |
| OBJ_DONT_REPARSE = 0x1000 | |
| STATUS_MORE_ENTRIES = 0x105 | |
| STATUS_NO_MORE_ENTRIES = 0x8000001a | |
| ) | |
| // Select entries from FILE_INFO_BY_HANDLE_CLASS. | |
| // | |
| // C declaration: | |
| // | |
| // typedef enum _FILE_INFO_BY_HANDLE_CLASS { | |
| // FileBasicInfo, | |
| // FileStandardInfo, | |
| // FileNameInfo, | |
| // FileRenameInfo, | |
| // FileDispositionInfo, | |
| // FileAllocationInfo, | |
| // FileEndOfFileInfo, | |
| // FileStreamInfo, | |
| // FileCompressionInfo, | |
| // FileAttributeTagInfo, | |
| // FileIdBothDirectoryInfo, | |
| // FileIdBothDirectoryRestartInfo, | |
| // FileIoPriorityHintInfo, | |
| // FileRemoteProtocolInfo, | |
| // FileFullDirectoryInfo, | |
| // FileFullDirectoryRestartInfo, | |
| // FileStorageInfo, | |
| // FileAlignmentInfo, | |
| // FileIdInfo, | |
| // FileIdExtdDirectoryInfo, | |
| // FileIdExtdDirectoryRestartInfo, | |
| // FileDispositionInfoEx, | |
| // FileRenameInfoEx, | |
| // FileCaseSensitiveInfo, | |
| // FileNormalizedNameInfo, | |
| // MaximumFileInfoByHandleClass | |
| // } FILE_INFO_BY_HANDLE_CLASS, *PFILE_INFO_BY_HANDLE_CLASS; | |
| // | |
| // Documentation: https://docs.microsoft.com/en-us/windows/win32/api/minwinbase/ne-minwinbase-file_info_by_handle_class | |
| const ( | |
| FileIdInfo = 18 | |
| ) | |
| type FileDispositionInformationEx struct { | |
| Flags uintptr | |
| } | |
| type IOStatusBlock struct { | |
| Status, Information uintptr | |
| } | |
| type ObjectAttributes struct { | |
| Length uintptr | |
| RootDirectory uintptr | |
| ObjectName *UnicodeString | |
| Attributes uintptr | |
| SecurityDescriptor uintptr | |
| SecurityQoS uintptr | |
| } | |
| type ObjectDirectoryInformation struct { | |
| Name UnicodeString | |
| TypeName UnicodeString | |
| } | |
| type FileLinkInformation struct { | |
| ReplaceIfExists bool | |
| RootDirectory uintptr | |
| FileNameLength uint32 | |
| FileName [1]uint16 | |
| } | |
| // C declaration: | |
| // | |
| // typedef struct _FILE_ID_INFO { | |
| // ULONGLONG VolumeSerialNumber; | |
| // FILE_ID_128 FileId; | |
| // } FILE_ID_INFO, *PFILE_ID_INFO; | |
| // | |
| // Documentation: https://docs.microsoft.com/en-us/windows/win32/api/winbase/ns-winbase-file_id_info | |
| type FILE_ID_INFO struct { | |
| VolumeSerialNumber uint64 | |
| FileID [16]byte | |
| } |