types_windows.mx raw

   1  // Copyright 2024 The Go Authors. All rights reserved.
   2  // Use of this source code is governed by a BSD-style
   3  // license that can be found in the LICENSE file.
   4  
   5  package windows
   6  
   7  import (
   8  	"syscall"
   9  	"unsafe"
  10  )
  11  
  12  // Socket related.
  13  const (
  14  	TCP_KEEPIDLE  = 0x03
  15  	TCP_KEEPCNT   = 0x10
  16  	TCP_KEEPINTVL = 0x11
  17  
  18  	SIO_UDP_NETRESET = syscall.IOC_IN | syscall.IOC_VENDOR | 15
  19  )
  20  
  21  const (
  22  	FILE_READ_DATA        = 0x00000001
  23  	FILE_READ_ATTRIBUTES  = 0x00000080
  24  	FILE_READ_EA          = 0x00000008
  25  	FILE_WRITE_DATA       = 0x00000002
  26  	FILE_WRITE_ATTRIBUTES = 0x00000100
  27  	FILE_WRITE_EA         = 0x00000010
  28  	FILE_APPEND_DATA      = 0x00000004
  29  	FILE_EXECUTE          = 0x00000020
  30  
  31  	FILE_GENERIC_READ    = STANDARD_RIGHTS_READ | FILE_READ_DATA | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE
  32  	FILE_GENERIC_WRITE   = STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE
  33  	FILE_GENERIC_EXECUTE = STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES | FILE_EXECUTE | SYNCHRONIZE
  34  
  35  	FILE_LIST_DIRECTORY = 0x00000001
  36  	FILE_TRAVERSE       = 0x00000020
  37  
  38  	FILE_SHARE_READ                      = 0x00000001
  39  	FILE_SHARE_WRITE                     = 0x00000002
  40  	FILE_SHARE_DELETE                    = 0x00000004
  41  	FILE_ATTRIBUTE_READONLY              = 0x00000001
  42  	FILE_ATTRIBUTE_HIDDEN                = 0x00000002
  43  	FILE_ATTRIBUTE_SYSTEM                = 0x00000004
  44  	FILE_ATTRIBUTE_DIRECTORY             = 0x00000010
  45  	FILE_ATTRIBUTE_ARCHIVE               = 0x00000020
  46  	FILE_ATTRIBUTE_DEVICE                = 0x00000040
  47  	FILE_ATTRIBUTE_NORMAL                = 0x00000080
  48  	FILE_ATTRIBUTE_TEMPORARY             = 0x00000100
  49  	FILE_ATTRIBUTE_SPARSE_FILE           = 0x00000200
  50  	FILE_ATTRIBUTE_REPARSE_POINT         = 0x00000400
  51  	FILE_ATTRIBUTE_COMPRESSED            = 0x00000800
  52  	FILE_ATTRIBUTE_OFFLINE               = 0x00001000
  53  	FILE_ATTRIBUTE_NOT_CONTENT_INDEXED   = 0x00002000
  54  	FILE_ATTRIBUTE_ENCRYPTED             = 0x00004000
  55  	FILE_ATTRIBUTE_INTEGRITY_STREAM      = 0x00008000
  56  	FILE_ATTRIBUTE_VIRTUAL               = 0x00010000
  57  	FILE_ATTRIBUTE_NO_SCRUB_DATA         = 0x00020000
  58  	FILE_ATTRIBUTE_RECALL_ON_OPEN        = 0x00040000
  59  	FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS = 0x00400000
  60  
  61  	INVALID_FILE_ATTRIBUTES = 0xffffffff
  62  )
  63  
  64  // https://learn.microsoft.com/en-us/windows/win32/secauthz/access-mask
  65  type ACCESS_MASK uint32
  66  
  67  // Constants for type ACCESS_MASK
  68  const (
  69  	DELETE                   = 0x00010000
  70  	READ_CONTROL             = 0x00020000
  71  	WRITE_DAC                = 0x00040000
  72  	WRITE_OWNER              = 0x00080000
  73  	SYNCHRONIZE              = 0x00100000
  74  	STANDARD_RIGHTS_REQUIRED = 0x000F0000
  75  	STANDARD_RIGHTS_READ     = READ_CONTROL
  76  	STANDARD_RIGHTS_WRITE    = READ_CONTROL
  77  	STANDARD_RIGHTS_EXECUTE  = READ_CONTROL
  78  	STANDARD_RIGHTS_ALL      = 0x001F0000
  79  	SPECIFIC_RIGHTS_ALL      = 0x0000FFFF
  80  	ACCESS_SYSTEM_SECURITY   = 0x01000000
  81  	MAXIMUM_ALLOWED          = 0x02000000
  82  	GENERIC_READ             = 0x80000000
  83  	GENERIC_WRITE            = 0x40000000
  84  	GENERIC_EXECUTE          = 0x20000000
  85  	GENERIC_ALL              = 0x10000000
  86  )
  87  
  88  // https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/ns-wdm-_acl
  89  type ACL struct {
  90  	AclRevision byte
  91  	Sbz1        byte
  92  	AclSize     uint16
  93  	AceCount    uint16
  94  	Sbz2        uint16
  95  }
  96  
  97  // https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/ns-wdm-_io_status_block
  98  type IO_STATUS_BLOCK struct {
  99  	Status      NTStatus
 100  	Information uintptr
 101  }
 102  
 103  // https://learn.microsoft.com/en-us/windows/win32/api/ntdef/ns-ntdef-_object_attributes
 104  type OBJECT_ATTRIBUTES struct {
 105  	Length             uint32
 106  	RootDirectory      syscall.Handle
 107  	ObjectName         *NTUnicodeString
 108  	Attributes         uint32
 109  	SecurityDescriptor *SECURITY_DESCRIPTOR
 110  	SecurityQoS        *SECURITY_QUALITY_OF_SERVICE
 111  }
 112  
 113  // init sets o's RootDirectory, ObjectName, and Length.
 114  func (o *OBJECT_ATTRIBUTES) init(root syscall.Handle, name string) error {
 115  	if name == "." {
 116  		name = ""
 117  	}
 118  	objectName, err := NewNTUnicodeString(name)
 119  	if err != nil {
 120  		return err
 121  	}
 122  	o.ObjectName = objectName
 123  	if root != syscall.InvalidHandle {
 124  		o.RootDirectory = root
 125  	}
 126  	o.Length = uint32(unsafe.Sizeof(*o))
 127  	return nil
 128  }
 129  
 130  // Values for the Attributes member of OBJECT_ATTRIBUTES.
 131  const (
 132  	OBJ_INHERIT                       = 0x00000002
 133  	OBJ_PERMANENT                     = 0x00000010
 134  	OBJ_EXCLUSIVE                     = 0x00000020
 135  	OBJ_CASE_INSENSITIVE              = 0x00000040
 136  	OBJ_OPENIF                        = 0x00000080
 137  	OBJ_OPENLINK                      = 0x00000100
 138  	OBJ_KERNEL_HANDLE                 = 0x00000200
 139  	OBJ_FORCE_ACCESS_CHECK            = 0x00000400
 140  	OBJ_IGNORE_IMPERSONATED_DEVICEMAP = 0x00000800
 141  	OBJ_DONT_REPARSE                  = 0x00001000
 142  	OBJ_VALID_ATTRIBUTES              = 0x00001FF2
 143  )
 144  
 145  // https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/ntifs/ns-ntifs-_security_descriptor
 146  type SECURITY_DESCRIPTOR struct {
 147  	revision byte
 148  	sbz1     byte
 149  	control  SECURITY_DESCRIPTOR_CONTROL
 150  	owner    *syscall.SID
 151  	group    *syscall.SID
 152  	sacl     *ACL
 153  	dacl     *ACL
 154  }
 155  
 156  // https://learn.microsoft.com/en-us/windows-hardware/drivers/ifs/security-descriptor-control
 157  type SECURITY_DESCRIPTOR_CONTROL uint16
 158  
 159  // https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-security_quality_of_service
 160  type SECURITY_QUALITY_OF_SERVICE struct {
 161  	Length              uint32
 162  	ImpersonationLevel  uint32 // type SECURITY_IMPERSONATION_LEVEL
 163  	ContextTrackingMode byte   // type SECURITY_CONTEXT_TRACKING_MODE
 164  	EffectiveOnly       byte
 165  }
 166  
 167  const (
 168  	// CreateDisposition flags for NtCreateFile and NtCreateNamedPipeFile.
 169  	FILE_SUPERSEDE           = 0x00000000
 170  	FILE_OPEN                = 0x00000001
 171  	FILE_CREATE              = 0x00000002
 172  	FILE_OPEN_IF             = 0x00000003
 173  	FILE_OVERWRITE           = 0x00000004
 174  	FILE_OVERWRITE_IF        = 0x00000005
 175  	FILE_MAXIMUM_DISPOSITION = 0x00000005
 176  
 177  	// CreateOptions flags for NtCreateFile and NtCreateNamedPipeFile.
 178  	FILE_DIRECTORY_FILE            = 0x00000001
 179  	FILE_WRITE_THROUGH             = 0x00000002
 180  	FILE_SEQUENTIAL_ONLY           = 0x00000004
 181  	FILE_NO_INTERMEDIATE_BUFFERING = 0x00000008
 182  	FILE_SYNCHRONOUS_IO_ALERT      = 0x00000010
 183  	FILE_SYNCHRONOUS_IO_NONALERT   = 0x00000020
 184  	FILE_NON_DIRECTORY_FILE        = 0x00000040
 185  	FILE_CREATE_TREE_CONNECTION    = 0x00000080
 186  	FILE_COMPLETE_IF_OPLOCKED      = 0x00000100
 187  	FILE_NO_EA_KNOWLEDGE           = 0x00000200
 188  	FILE_OPEN_REMOTE_INSTANCE      = 0x00000400
 189  	FILE_RANDOM_ACCESS             = 0x00000800
 190  	FILE_DELETE_ON_CLOSE           = 0x00001000
 191  	FILE_OPEN_BY_FILE_ID           = 0x00002000
 192  	FILE_OPEN_FOR_BACKUP_INTENT    = 0x00004000
 193  	FILE_NO_COMPRESSION            = 0x00008000
 194  	FILE_OPEN_REQUIRING_OPLOCK     = 0x00010000
 195  	FILE_DISALLOW_EXCLUSIVE        = 0x00020000
 196  	FILE_RESERVE_OPFILTER          = 0x00100000
 197  	FILE_OPEN_REPARSE_POINT        = 0x00200000
 198  	FILE_OPEN_NO_RECALL            = 0x00400000
 199  	FILE_OPEN_FOR_FREE_SPACE_QUERY = 0x00800000
 200  )
 201  
 202  // https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/ntddk/ns-ntddk-_file_disposition_information
 203  type FILE_DISPOSITION_INFORMATION struct {
 204  	DeleteFile bool
 205  }
 206  
 207  // https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/ntddk/ns-ntddk-_file_disposition_information_ex
 208  type FILE_DISPOSITION_INFORMATION_EX struct {
 209  	Flags uint32
 210  }
 211  
 212  // https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/ntddk/ns-ntddk-_file_disposition_information_ex
 213  const (
 214  	FILE_DISPOSITION_DO_NOT_DELETE             = 0x00000000
 215  	FILE_DISPOSITION_DELETE                    = 0x00000001
 216  	FILE_DISPOSITION_POSIX_SEMANTICS           = 0x00000002
 217  	FILE_DISPOSITION_FORCE_IMAGE_SECTION_CHECK = 0x00000004
 218  	FILE_DISPOSITION_ON_CLOSE                  = 0x00000008
 219  	FILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE = 0x00000010
 220  )
 221  
 222  // Flags for FILE_RENAME_INFORMATION_EX.
 223  const (
 224  	FILE_RENAME_REPLACE_IF_EXISTS = 0x00000001
 225  	FILE_RENAME_POSIX_SEMANTICS   = 0x00000002
 226  )
 227  
 228  // https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/ntifs/ns-ntifs-_file_rename_information
 229  type FILE_RENAME_INFORMATION struct {
 230  	ReplaceIfExists bool
 231  	RootDirectory   syscall.Handle
 232  	FileNameLength  uint32
 233  	FileName        [syscall.MAX_PATH]uint16
 234  }
 235  
 236  // https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/ntifs/ns-ntifs-_file_rename_information
 237  type FILE_RENAME_INFORMATION_EX struct {
 238  	Flags          uint32
 239  	RootDirectory  syscall.Handle
 240  	FileNameLength uint32
 241  	FileName       [syscall.MAX_PATH]uint16
 242  }
 243  
 244  // https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/ntifs/ns-ntifs-_file_link_information
 245  type FILE_LINK_INFORMATION struct {
 246  	ReplaceIfExists bool
 247  	RootDirectory   syscall.Handle
 248  	FileNameLength  uint32
 249  	FileName        [syscall.MAX_PATH]uint16
 250  }
 251  
 252  const FileReplaceCompletionInformation = 61
 253  
 254  // https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/ntifs/ns-ntifs-_file_completion_information
 255  type FILE_COMPLETION_INFORMATION struct {
 256  	Port syscall.Handle
 257  	Key  uintptr
 258  }
 259  
 260  // https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-osversioninfoexa
 261  // https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/ns-wdm-_osversioninfoexw
 262  const VER_NT_WORKSTATION = 0x0000001
 263