116 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
//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
 | 
						|
 | 
						|
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
 | 
						|
}
 |