Source file src/internal/syscall/windows/types_windows.go

     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  

View as plain text