Source file src/syscall/types_windows.go

     1  // Copyright 2011 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 syscall
     6  
     7  const (
     8  	// Windows errors.
     9  	ERROR_FILE_NOT_FOUND      Errno = 2
    10  	ERROR_PATH_NOT_FOUND      Errno = 3
    11  	ERROR_ACCESS_DENIED       Errno = 5
    12  	ERROR_NO_MORE_FILES       Errno = 18
    13  	ERROR_HANDLE_EOF          Errno = 38
    14  	ERROR_NETNAME_DELETED     Errno = 64
    15  	ERROR_FILE_EXISTS         Errno = 80
    16  	ERROR_BROKEN_PIPE         Errno = 109
    17  	ERROR_BUFFER_OVERFLOW     Errno = 111
    18  	ERROR_INSUFFICIENT_BUFFER Errno = 122
    19  	ERROR_MOD_NOT_FOUND       Errno = 126
    20  	ERROR_PROC_NOT_FOUND      Errno = 127
    21  	ERROR_DIR_NOT_EMPTY       Errno = 145
    22  	ERROR_ALREADY_EXISTS      Errno = 183
    23  	ERROR_ENVVAR_NOT_FOUND    Errno = 203
    24  	ERROR_MORE_DATA           Errno = 234
    25  	ERROR_OPERATION_ABORTED   Errno = 995
    26  	ERROR_IO_PENDING          Errno = 997
    27  	ERROR_NOT_FOUND           Errno = 1168
    28  	ERROR_PRIVILEGE_NOT_HELD  Errno = 1314
    29  	WSAEACCES                 Errno = 10013
    30  	WSAENOPROTOOPT            Errno = 10042
    31  	WSAECONNABORTED           Errno = 10053
    32  	WSAECONNRESET             Errno = 10054
    33  )
    34  
    35  const (
    36  	// Invented values to support what package os expects.
    37  	O_RDONLY   = 0x00000
    38  	O_WRONLY   = 0x00001
    39  	O_RDWR     = 0x00002
    40  	O_CREAT    = 0x00040
    41  	O_EXCL     = 0x00080
    42  	O_NOCTTY   = 0x00100
    43  	O_TRUNC    = 0x00200
    44  	O_NONBLOCK = 0x00800
    45  	O_APPEND   = 0x00400
    46  	O_SYNC     = 0x01000
    47  	O_ASYNC    = 0x02000
    48  	O_CLOEXEC  = 0x80000
    49  )
    50  
    51  const (
    52  	// More invented values for signals
    53  	SIGHUP  = Signal(0x1)
    54  	SIGINT  = Signal(0x2)
    55  	SIGQUIT = Signal(0x3)
    56  	SIGILL  = Signal(0x4)
    57  	SIGTRAP = Signal(0x5)
    58  	SIGABRT = Signal(0x6)
    59  	SIGBUS  = Signal(0x7)
    60  	SIGFPE  = Signal(0x8)
    61  	SIGKILL = Signal(0x9)
    62  	SIGSEGV = Signal(0xb)
    63  	SIGPIPE = Signal(0xd)
    64  	SIGALRM = Signal(0xe)
    65  	SIGTERM = Signal(0xf)
    66  )
    67  
    68  var signals = [...]string{
    69  	1:  "hangup",
    70  	2:  "interrupt",
    71  	3:  "quit",
    72  	4:  "illegal instruction",
    73  	5:  "trace/breakpoint trap",
    74  	6:  "aborted",
    75  	7:  "bus error",
    76  	8:  "floating point exception",
    77  	9:  "killed",
    78  	10: "user defined signal 1",
    79  	11: "segmentation fault",
    80  	12: "user defined signal 2",
    81  	13: "broken pipe",
    82  	14: "alarm clock",
    83  	15: "terminated",
    84  }
    85  
    86  const (
    87  	GENERIC_READ    = 0x80000000
    88  	GENERIC_WRITE   = 0x40000000
    89  	GENERIC_EXECUTE = 0x20000000
    90  	GENERIC_ALL     = 0x10000000
    91  
    92  	FILE_LIST_DIRECTORY   = 0x00000001
    93  	FILE_APPEND_DATA      = 0x00000004
    94  	FILE_WRITE_ATTRIBUTES = 0x00000100
    95  
    96  	FILE_SHARE_READ              = 0x00000001
    97  	FILE_SHARE_WRITE             = 0x00000002
    98  	FILE_SHARE_DELETE            = 0x00000004
    99  	FILE_ATTRIBUTE_READONLY      = 0x00000001
   100  	FILE_ATTRIBUTE_HIDDEN        = 0x00000002
   101  	FILE_ATTRIBUTE_SYSTEM        = 0x00000004
   102  	FILE_ATTRIBUTE_DIRECTORY     = 0x00000010
   103  	FILE_ATTRIBUTE_ARCHIVE       = 0x00000020
   104  	FILE_ATTRIBUTE_NORMAL        = 0x00000080
   105  	FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400
   106  
   107  	INVALID_FILE_ATTRIBUTES = 0xffffffff
   108  
   109  	CREATE_NEW        = 1
   110  	CREATE_ALWAYS     = 2
   111  	OPEN_EXISTING     = 3
   112  	OPEN_ALWAYS       = 4
   113  	TRUNCATE_EXISTING = 5
   114  
   115  	FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000
   116  	FILE_FLAG_BACKUP_SEMANTICS   = 0x02000000
   117  	FILE_FLAG_OVERLAPPED         = 0x40000000
   118  
   119  	HANDLE_FLAG_INHERIT    = 0x00000001
   120  	STARTF_USESTDHANDLES   = 0x00000100
   121  	STARTF_USESHOWWINDOW   = 0x00000001
   122  	DUPLICATE_CLOSE_SOURCE = 0x00000001
   123  	DUPLICATE_SAME_ACCESS  = 0x00000002
   124  
   125  	STD_INPUT_HANDLE  = -10
   126  	STD_OUTPUT_HANDLE = -11
   127  	STD_ERROR_HANDLE  = -12
   128  
   129  	FILE_BEGIN   = 0
   130  	FILE_CURRENT = 1
   131  	FILE_END     = 2
   132  
   133  	LANG_ENGLISH       = 0x09
   134  	SUBLANG_ENGLISH_US = 0x01
   135  
   136  	FORMAT_MESSAGE_ALLOCATE_BUFFER = 256
   137  	FORMAT_MESSAGE_IGNORE_INSERTS  = 512
   138  	FORMAT_MESSAGE_FROM_STRING     = 1024
   139  	FORMAT_MESSAGE_FROM_HMODULE    = 2048
   140  	FORMAT_MESSAGE_FROM_SYSTEM     = 4096
   141  	FORMAT_MESSAGE_ARGUMENT_ARRAY  = 8192
   142  	FORMAT_MESSAGE_MAX_WIDTH_MASK  = 255
   143  
   144  	MAX_PATH      = 260
   145  	MAX_LONG_PATH = 32768
   146  
   147  	MAX_COMPUTERNAME_LENGTH = 15
   148  
   149  	TIME_ZONE_ID_UNKNOWN  = 0
   150  	TIME_ZONE_ID_STANDARD = 1
   151  
   152  	TIME_ZONE_ID_DAYLIGHT = 2
   153  	IGNORE                = 0
   154  	INFINITE              = 0xffffffff
   155  
   156  	WAIT_TIMEOUT   = 258
   157  	WAIT_ABANDONED = 0x00000080
   158  	WAIT_OBJECT_0  = 0x00000000
   159  	WAIT_FAILED    = 0xFFFFFFFF
   160  
   161  	CREATE_NEW_PROCESS_GROUP   = 0x00000200
   162  	CREATE_UNICODE_ENVIRONMENT = 0x00000400
   163  
   164  	PROCESS_TERMINATE         = 1
   165  	PROCESS_QUERY_INFORMATION = 0x00000400
   166  	SYNCHRONIZE               = 0x00100000
   167  
   168  	PAGE_READONLY          = 0x02
   169  	PAGE_READWRITE         = 0x04
   170  	PAGE_WRITECOPY         = 0x08
   171  	PAGE_EXECUTE_READ      = 0x20
   172  	PAGE_EXECUTE_READWRITE = 0x40
   173  	PAGE_EXECUTE_WRITECOPY = 0x80
   174  
   175  	FILE_MAP_COPY    = 0x01
   176  	FILE_MAP_WRITE   = 0x02
   177  	FILE_MAP_READ    = 0x04
   178  	FILE_MAP_EXECUTE = 0x20
   179  
   180  	CTRL_C_EVENT        = 0
   181  	CTRL_BREAK_EVENT    = 1
   182  	CTRL_CLOSE_EVENT    = 2
   183  	CTRL_LOGOFF_EVENT   = 5
   184  	CTRL_SHUTDOWN_EVENT = 6
   185  )
   186  
   187  const (
   188  	// flags for CreateToolhelp32Snapshot
   189  	TH32CS_SNAPHEAPLIST = 0x01
   190  	TH32CS_SNAPPROCESS  = 0x02
   191  	TH32CS_SNAPTHREAD   = 0x04
   192  	TH32CS_SNAPMODULE   = 0x08
   193  	TH32CS_SNAPMODULE32 = 0x10
   194  	TH32CS_SNAPALL      = TH32CS_SNAPHEAPLIST | TH32CS_SNAPMODULE | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD
   195  	TH32CS_INHERIT      = 0x80000000
   196  )
   197  
   198  const (
   199  	// do not reorder
   200  	FILE_NOTIFY_CHANGE_FILE_NAME = 1 << iota
   201  	FILE_NOTIFY_CHANGE_DIR_NAME
   202  	FILE_NOTIFY_CHANGE_ATTRIBUTES
   203  	FILE_NOTIFY_CHANGE_SIZE
   204  	FILE_NOTIFY_CHANGE_LAST_WRITE
   205  	FILE_NOTIFY_CHANGE_LAST_ACCESS
   206  	FILE_NOTIFY_CHANGE_CREATION
   207  )
   208  
   209  const (
   210  	// do not reorder
   211  	FILE_ACTION_ADDED = iota + 1
   212  	FILE_ACTION_REMOVED
   213  	FILE_ACTION_MODIFIED
   214  	FILE_ACTION_RENAMED_OLD_NAME
   215  	FILE_ACTION_RENAMED_NEW_NAME
   216  )
   217  
   218  const (
   219  	// wincrypt.h
   220  	PROV_RSA_FULL                    = 1
   221  	PROV_RSA_SIG                     = 2
   222  	PROV_DSS                         = 3
   223  	PROV_FORTEZZA                    = 4
   224  	PROV_MS_EXCHANGE                 = 5
   225  	PROV_SSL                         = 6
   226  	PROV_RSA_SCHANNEL                = 12
   227  	PROV_DSS_DH                      = 13
   228  	PROV_EC_ECDSA_SIG                = 14
   229  	PROV_EC_ECNRA_SIG                = 15
   230  	PROV_EC_ECDSA_FULL               = 16
   231  	PROV_EC_ECNRA_FULL               = 17
   232  	PROV_DH_SCHANNEL                 = 18
   233  	PROV_SPYRUS_LYNKS                = 20
   234  	PROV_RNG                         = 21
   235  	PROV_INTEL_SEC                   = 22
   236  	PROV_REPLACE_OWF                 = 23
   237  	PROV_RSA_AES                     = 24
   238  	CRYPT_VERIFYCONTEXT              = 0xF0000000
   239  	CRYPT_NEWKEYSET                  = 0x00000008
   240  	CRYPT_DELETEKEYSET               = 0x00000010
   241  	CRYPT_MACHINE_KEYSET             = 0x00000020
   242  	CRYPT_SILENT                     = 0x00000040
   243  	CRYPT_DEFAULT_CONTAINER_OPTIONAL = 0x00000080
   244  
   245  	USAGE_MATCH_TYPE_AND = 0
   246  	USAGE_MATCH_TYPE_OR  = 1
   247  
   248  	X509_ASN_ENCODING   = 0x00000001
   249  	PKCS_7_ASN_ENCODING = 0x00010000
   250  
   251  	CERT_STORE_PROV_MEMORY = 2
   252  
   253  	CERT_STORE_ADD_ALWAYS = 4
   254  
   255  	CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG = 0x00000004
   256  
   257  	CERT_TRUST_NO_ERROR                          = 0x00000000
   258  	CERT_TRUST_IS_NOT_TIME_VALID                 = 0x00000001
   259  	CERT_TRUST_IS_REVOKED                        = 0x00000004
   260  	CERT_TRUST_IS_NOT_SIGNATURE_VALID            = 0x00000008
   261  	CERT_TRUST_IS_NOT_VALID_FOR_USAGE            = 0x00000010
   262  	CERT_TRUST_IS_UNTRUSTED_ROOT                 = 0x00000020
   263  	CERT_TRUST_REVOCATION_STATUS_UNKNOWN         = 0x00000040
   264  	CERT_TRUST_IS_CYCLIC                         = 0x00000080
   265  	CERT_TRUST_INVALID_EXTENSION                 = 0x00000100
   266  	CERT_TRUST_INVALID_POLICY_CONSTRAINTS        = 0x00000200
   267  	CERT_TRUST_INVALID_BASIC_CONSTRAINTS         = 0x00000400
   268  	CERT_TRUST_INVALID_NAME_CONSTRAINTS          = 0x00000800
   269  	CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT = 0x00001000
   270  	CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT   = 0x00002000
   271  	CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT = 0x00004000
   272  	CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT      = 0x00008000
   273  	CERT_TRUST_IS_OFFLINE_REVOCATION             = 0x01000000
   274  	CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY          = 0x02000000
   275  	CERT_TRUST_IS_EXPLICIT_DISTRUST              = 0x04000000
   276  	CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT    = 0x08000000
   277  
   278  	CERT_CHAIN_POLICY_BASE              = 1
   279  	CERT_CHAIN_POLICY_AUTHENTICODE      = 2
   280  	CERT_CHAIN_POLICY_AUTHENTICODE_TS   = 3
   281  	CERT_CHAIN_POLICY_SSL               = 4
   282  	CERT_CHAIN_POLICY_BASIC_CONSTRAINTS = 5
   283  	CERT_CHAIN_POLICY_NT_AUTH           = 6
   284  	CERT_CHAIN_POLICY_MICROSOFT_ROOT    = 7
   285  	CERT_CHAIN_POLICY_EV                = 8
   286  
   287  	CERT_E_EXPIRED       = 0x800B0101
   288  	CERT_E_ROLE          = 0x800B0103
   289  	CERT_E_PURPOSE       = 0x800B0106
   290  	CERT_E_UNTRUSTEDROOT = 0x800B0109
   291  	CERT_E_CN_NO_MATCH   = 0x800B010F
   292  
   293  	AUTHTYPE_CLIENT = 1
   294  	AUTHTYPE_SERVER = 2
   295  )
   296  
   297  var (
   298  	OID_PKIX_KP_SERVER_AUTH = []byte("1.3.6.1.5.5.7.3.1\x00")
   299  	OID_SERVER_GATED_CRYPTO = []byte("1.3.6.1.4.1.311.10.3.3\x00")
   300  	OID_SGC_NETSCAPE        = []byte("2.16.840.1.113730.4.1\x00")
   301  )
   302  
   303  // Pointer represents a pointer to an arbitrary Windows type.
   304  //
   305  // Pointer-typed fields may point to one of many different types. It's
   306  // up to the caller to provide a pointer to the appropriate type, cast
   307  // to Pointer. The caller must obey the unsafe.Pointer rules while
   308  // doing so.
   309  type Pointer *struct{}
   310  
   311  // Invented values to support what package os expects.
   312  type Timeval struct {
   313  	Sec  int32
   314  	Usec int32
   315  }
   316  
   317  func (tv *Timeval) Nanoseconds() int64 {
   318  	return (int64(tv.Sec)*1e6 + int64(tv.Usec)) * 1e3
   319  }
   320  
   321  func NsecToTimeval(nsec int64) (tv Timeval) {
   322  	tv.Sec = int32(nsec / 1e9)
   323  	tv.Usec = int32(nsec % 1e9 / 1e3)
   324  	return
   325  }
   326  
   327  type SecurityAttributes struct {
   328  	Length             uint32
   329  	SecurityDescriptor uintptr
   330  	InheritHandle      uint32
   331  }
   332  
   333  type Overlapped struct {
   334  	Internal     uintptr
   335  	InternalHigh uintptr
   336  	Offset       uint32
   337  	OffsetHigh   uint32
   338  	HEvent       Handle
   339  }
   340  
   341  type FileNotifyInformation struct {
   342  	NextEntryOffset uint32
   343  	Action          uint32
   344  	FileNameLength  uint32
   345  	FileName        uint16
   346  }
   347  
   348  type Filetime struct {
   349  	LowDateTime  uint32
   350  	HighDateTime uint32
   351  }
   352  
   353  // Nanoseconds returns Filetime ft in nanoseconds
   354  // since Epoch (00:00:00 UTC, January 1, 1970).
   355  func (ft *Filetime) Nanoseconds() int64 {
   356  	// 100-nanosecond intervals since January 1, 1601
   357  	nsec := int64(ft.HighDateTime)<<32 + int64(ft.LowDateTime)
   358  	// change starting time to the Epoch (00:00:00 UTC, January 1, 1970)
   359  	nsec -= 116444736000000000
   360  	// convert into nanoseconds
   361  	nsec *= 100
   362  	return nsec
   363  }
   364  
   365  func NsecToFiletime(nsec int64) (ft Filetime) {
   366  	// convert into 100-nanosecond
   367  	nsec /= 100
   368  	// change starting time to January 1, 1601
   369  	nsec += 116444736000000000
   370  	// split into high / low
   371  	ft.LowDateTime = uint32(nsec & 0xffffffff)
   372  	ft.HighDateTime = uint32(nsec >> 32 & 0xffffffff)
   373  	return ft
   374  }
   375  
   376  type Win32finddata struct {
   377  	FileAttributes    uint32
   378  	CreationTime      Filetime
   379  	LastAccessTime    Filetime
   380  	LastWriteTime     Filetime
   381  	FileSizeHigh      uint32
   382  	FileSizeLow       uint32
   383  	Reserved0         uint32
   384  	Reserved1         uint32
   385  	FileName          [MAX_PATH - 1]uint16
   386  	AlternateFileName [13]uint16
   387  }
   388  
   389  // This is the actual system call structure.
   390  // Win32finddata is what we committed to in Go 1.
   391  type win32finddata1 struct {
   392  	FileAttributes    uint32
   393  	CreationTime      Filetime
   394  	LastAccessTime    Filetime
   395  	LastWriteTime     Filetime
   396  	FileSizeHigh      uint32
   397  	FileSizeLow       uint32
   398  	Reserved0         uint32
   399  	Reserved1         uint32
   400  	FileName          [MAX_PATH]uint16
   401  	AlternateFileName [14]uint16
   402  
   403  	// The Microsoft documentation for this struct¹ describes three additional
   404  	// fields: dwFileType, dwCreatorType, and wFinderFlags. However, those fields
   405  	// are empirically only present in the macOS port of the Win32 API,² and thus
   406  	// not needed for binaries built for Windows.
   407  	//
   408  	// ¹ https://docs.microsoft.com/en-us/windows/win32/api/minwinbase/ns-minwinbase-win32_find_dataw
   409  	// ² https://golang.org/issue/42637#issuecomment-760715755
   410  }
   411  
   412  func copyFindData(dst *Win32finddata, src *win32finddata1) {
   413  	dst.FileAttributes = src.FileAttributes
   414  	dst.CreationTime = src.CreationTime
   415  	dst.LastAccessTime = src.LastAccessTime
   416  	dst.LastWriteTime = src.LastWriteTime
   417  	dst.FileSizeHigh = src.FileSizeHigh
   418  	dst.FileSizeLow = src.FileSizeLow
   419  	dst.Reserved0 = src.Reserved0
   420  	dst.Reserved1 = src.Reserved1
   421  
   422  	// The src is 1 element bigger than dst, but it must be NUL.
   423  	copy(dst.FileName[:], src.FileName[:])
   424  	copy(dst.AlternateFileName[:], src.AlternateFileName[:])
   425  }
   426  
   427  type ByHandleFileInformation struct {
   428  	FileAttributes     uint32
   429  	CreationTime       Filetime
   430  	LastAccessTime     Filetime
   431  	LastWriteTime      Filetime
   432  	VolumeSerialNumber uint32
   433  	FileSizeHigh       uint32
   434  	FileSizeLow        uint32
   435  	NumberOfLinks      uint32
   436  	FileIndexHigh      uint32
   437  	FileIndexLow       uint32
   438  }
   439  
   440  const (
   441  	GetFileExInfoStandard = 0
   442  	GetFileExMaxInfoLevel = 1
   443  )
   444  
   445  type Win32FileAttributeData struct {
   446  	FileAttributes uint32
   447  	CreationTime   Filetime
   448  	LastAccessTime Filetime
   449  	LastWriteTime  Filetime
   450  	FileSizeHigh   uint32
   451  	FileSizeLow    uint32
   452  }
   453  
   454  // ShowWindow constants
   455  const (
   456  	// winuser.h
   457  	SW_HIDE            = 0
   458  	SW_NORMAL          = 1
   459  	SW_SHOWNORMAL      = 1
   460  	SW_SHOWMINIMIZED   = 2
   461  	SW_SHOWMAXIMIZED   = 3
   462  	SW_MAXIMIZE        = 3
   463  	SW_SHOWNOACTIVATE  = 4
   464  	SW_SHOW            = 5
   465  	SW_MINIMIZE        = 6
   466  	SW_SHOWMINNOACTIVE = 7
   467  	SW_SHOWNA          = 8
   468  	SW_RESTORE         = 9
   469  	SW_SHOWDEFAULT     = 10
   470  	SW_FORCEMINIMIZE   = 11
   471  )
   472  
   473  type StartupInfo struct {
   474  	Cb            uint32
   475  	_             *uint16
   476  	Desktop       *uint16
   477  	Title         *uint16
   478  	X             uint32
   479  	Y             uint32
   480  	XSize         uint32
   481  	YSize         uint32
   482  	XCountChars   uint32
   483  	YCountChars   uint32
   484  	FillAttribute uint32
   485  	Flags         uint32
   486  	ShowWindow    uint16
   487  	_             uint16
   488  	_             *byte
   489  	StdInput      Handle
   490  	StdOutput     Handle
   491  	StdErr        Handle
   492  }
   493  
   494  type _PROC_THREAD_ATTRIBUTE_LIST struct {
   495  	_ [1]byte
   496  }
   497  
   498  const (
   499  	_PROC_THREAD_ATTRIBUTE_PARENT_PROCESS = 0x00020000
   500  	_PROC_THREAD_ATTRIBUTE_HANDLE_LIST    = 0x00020002
   501  )
   502  
   503  type _STARTUPINFOEXW struct {
   504  	StartupInfo
   505  	ProcThreadAttributeList *_PROC_THREAD_ATTRIBUTE_LIST
   506  }
   507  
   508  const _EXTENDED_STARTUPINFO_PRESENT = 0x00080000
   509  
   510  type ProcessInformation struct {
   511  	Process   Handle
   512  	Thread    Handle
   513  	ProcessId uint32
   514  	ThreadId  uint32
   515  }
   516  
   517  type ProcessEntry32 struct {
   518  	Size            uint32
   519  	Usage           uint32
   520  	ProcessID       uint32
   521  	DefaultHeapID   uintptr
   522  	ModuleID        uint32
   523  	Threads         uint32
   524  	ParentProcessID uint32
   525  	PriClassBase    int32
   526  	Flags           uint32
   527  	ExeFile         [MAX_PATH]uint16
   528  }
   529  
   530  type Systemtime struct {
   531  	Year         uint16
   532  	Month        uint16
   533  	DayOfWeek    uint16
   534  	Day          uint16
   535  	Hour         uint16
   536  	Minute       uint16
   537  	Second       uint16
   538  	Milliseconds uint16
   539  }
   540  
   541  type Timezoneinformation struct {
   542  	Bias         int32
   543  	StandardName [32]uint16
   544  	StandardDate Systemtime
   545  	StandardBias int32
   546  	DaylightName [32]uint16
   547  	DaylightDate Systemtime
   548  	DaylightBias int32
   549  }
   550  
   551  // Socket related.
   552  
   553  const (
   554  	AF_UNSPEC  = 0
   555  	AF_UNIX    = 1
   556  	AF_INET    = 2
   557  	AF_INET6   = 23
   558  	AF_NETBIOS = 17
   559  
   560  	SOCK_STREAM    = 1
   561  	SOCK_DGRAM     = 2
   562  	SOCK_RAW       = 3
   563  	SOCK_SEQPACKET = 5
   564  
   565  	IPPROTO_IP   = 0
   566  	IPPROTO_IPV6 = 0x29
   567  	IPPROTO_TCP  = 6
   568  	IPPROTO_UDP  = 17
   569  
   570  	SOL_SOCKET                = 0xffff
   571  	SO_REUSEADDR              = 4
   572  	SO_KEEPALIVE              = 8
   573  	SO_DONTROUTE              = 16
   574  	SO_BROADCAST              = 32
   575  	SO_LINGER                 = 128
   576  	SO_RCVBUF                 = 0x1002
   577  	SO_SNDBUF                 = 0x1001
   578  	SO_UPDATE_ACCEPT_CONTEXT  = 0x700b
   579  	SO_UPDATE_CONNECT_CONTEXT = 0x7010
   580  
   581  	IOC_OUT                            = 0x40000000
   582  	IOC_IN                             = 0x80000000
   583  	IOC_VENDOR                         = 0x18000000
   584  	IOC_INOUT                          = IOC_IN | IOC_OUT
   585  	IOC_WS2                            = 0x08000000
   586  	SIO_GET_EXTENSION_FUNCTION_POINTER = IOC_INOUT | IOC_WS2 | 6
   587  	SIO_KEEPALIVE_VALS                 = IOC_IN | IOC_VENDOR | 4
   588  	SIO_UDP_CONNRESET                  = IOC_IN | IOC_VENDOR | 12
   589  
   590  	// cf. https://learn.microsoft.com/en-US/troubleshoot/windows/win32/header-library-requirement-socket-ipproto-ip
   591  
   592  	IP_TOS             = 0x3
   593  	IP_TTL             = 0x4
   594  	IP_MULTICAST_IF    = 0x9
   595  	IP_MULTICAST_TTL   = 0xa
   596  	IP_MULTICAST_LOOP  = 0xb
   597  	IP_ADD_MEMBERSHIP  = 0xc
   598  	IP_DROP_MEMBERSHIP = 0xd
   599  
   600  	IPV6_V6ONLY         = 0x1b
   601  	IPV6_UNICAST_HOPS   = 0x4
   602  	IPV6_MULTICAST_IF   = 0x9
   603  	IPV6_MULTICAST_HOPS = 0xa
   604  	IPV6_MULTICAST_LOOP = 0xb
   605  	IPV6_JOIN_GROUP     = 0xc
   606  	IPV6_LEAVE_GROUP    = 0xd
   607  
   608  	SOMAXCONN = 0x7fffffff
   609  
   610  	TCP_NODELAY = 1
   611  
   612  	SHUT_RD   = 0
   613  	SHUT_WR   = 1
   614  	SHUT_RDWR = 2
   615  
   616  	WSADESCRIPTION_LEN = 256
   617  	WSASYS_STATUS_LEN  = 128
   618  )
   619  
   620  type WSABuf struct {
   621  	Len uint32
   622  	Buf *byte
   623  }
   624  
   625  // Invented values to support what package os expects.
   626  const (
   627  	S_IFMT   = 0x1f000
   628  	S_IFIFO  = 0x1000
   629  	S_IFCHR  = 0x2000
   630  	S_IFDIR  = 0x4000
   631  	S_IFBLK  = 0x6000
   632  	S_IFREG  = 0x8000
   633  	S_IFLNK  = 0xa000
   634  	S_IFSOCK = 0xc000
   635  	S_ISUID  = 0x800
   636  	S_ISGID  = 0x400
   637  	S_ISVTX  = 0x200
   638  	S_IRUSR  = 0x100
   639  	S_IWRITE = 0x80
   640  	S_IWUSR  = 0x80
   641  	S_IXUSR  = 0x40
   642  )
   643  
   644  const (
   645  	FILE_TYPE_CHAR    = 0x0002
   646  	FILE_TYPE_DISK    = 0x0001
   647  	FILE_TYPE_PIPE    = 0x0003
   648  	FILE_TYPE_REMOTE  = 0x8000
   649  	FILE_TYPE_UNKNOWN = 0x0000
   650  )
   651  
   652  type Hostent struct {
   653  	Name     *byte
   654  	Aliases  **byte
   655  	AddrType uint16
   656  	Length   uint16
   657  	AddrList **byte
   658  }
   659  
   660  type Protoent struct {
   661  	Name    *byte
   662  	Aliases **byte
   663  	Proto   uint16
   664  }
   665  
   666  const (
   667  	DNS_TYPE_A       = 0x0001
   668  	DNS_TYPE_NS      = 0x0002
   669  	DNS_TYPE_MD      = 0x0003
   670  	DNS_TYPE_MF      = 0x0004
   671  	DNS_TYPE_CNAME   = 0x0005
   672  	DNS_TYPE_SOA     = 0x0006
   673  	DNS_TYPE_MB      = 0x0007
   674  	DNS_TYPE_MG      = 0x0008
   675  	DNS_TYPE_MR      = 0x0009
   676  	DNS_TYPE_NULL    = 0x000a
   677  	DNS_TYPE_WKS     = 0x000b
   678  	DNS_TYPE_PTR     = 0x000c
   679  	DNS_TYPE_HINFO   = 0x000d
   680  	DNS_TYPE_MINFO   = 0x000e
   681  	DNS_TYPE_MX      = 0x000f
   682  	DNS_TYPE_TEXT    = 0x0010
   683  	DNS_TYPE_RP      = 0x0011
   684  	DNS_TYPE_AFSDB   = 0x0012
   685  	DNS_TYPE_X25     = 0x0013
   686  	DNS_TYPE_ISDN    = 0x0014
   687  	DNS_TYPE_RT      = 0x0015
   688  	DNS_TYPE_NSAP    = 0x0016
   689  	DNS_TYPE_NSAPPTR = 0x0017
   690  	DNS_TYPE_SIG     = 0x0018
   691  	DNS_TYPE_KEY     = 0x0019
   692  	DNS_TYPE_PX      = 0x001a
   693  	DNS_TYPE_GPOS    = 0x001b
   694  	DNS_TYPE_AAAA    = 0x001c
   695  	DNS_TYPE_LOC     = 0x001d
   696  	DNS_TYPE_NXT     = 0x001e
   697  	DNS_TYPE_EID     = 0x001f
   698  	DNS_TYPE_NIMLOC  = 0x0020
   699  	DNS_TYPE_SRV     = 0x0021
   700  	DNS_TYPE_ATMA    = 0x0022
   701  	DNS_TYPE_NAPTR   = 0x0023
   702  	DNS_TYPE_KX      = 0x0024
   703  	DNS_TYPE_CERT    = 0x0025
   704  	DNS_TYPE_A6      = 0x0026
   705  	DNS_TYPE_DNAME   = 0x0027
   706  	DNS_TYPE_SINK    = 0x0028
   707  	DNS_TYPE_OPT     = 0x0029
   708  	DNS_TYPE_DS      = 0x002B
   709  	DNS_TYPE_RRSIG   = 0x002E
   710  	DNS_TYPE_NSEC    = 0x002F
   711  	DNS_TYPE_DNSKEY  = 0x0030
   712  	DNS_TYPE_DHCID   = 0x0031
   713  	DNS_TYPE_UINFO   = 0x0064
   714  	DNS_TYPE_UID     = 0x0065
   715  	DNS_TYPE_GID     = 0x0066
   716  	DNS_TYPE_UNSPEC  = 0x0067
   717  	DNS_TYPE_ADDRS   = 0x00f8
   718  	DNS_TYPE_TKEY    = 0x00f9
   719  	DNS_TYPE_TSIG    = 0x00fa
   720  	DNS_TYPE_IXFR    = 0x00fb
   721  	DNS_TYPE_AXFR    = 0x00fc
   722  	DNS_TYPE_MAILB   = 0x00fd
   723  	DNS_TYPE_MAILA   = 0x00fe
   724  	DNS_TYPE_ALL     = 0x00ff
   725  	DNS_TYPE_ANY     = 0x00ff
   726  	DNS_TYPE_WINS    = 0xff01
   727  	DNS_TYPE_WINSR   = 0xff02
   728  	DNS_TYPE_NBSTAT  = 0xff01
   729  )
   730  
   731  const (
   732  	DNS_INFO_NO_RECORDS = 0x251D
   733  )
   734  
   735  const (
   736  	// flags inside DNSRecord.Dw
   737  	DnsSectionQuestion   = 0x0000
   738  	DnsSectionAnswer     = 0x0001
   739  	DnsSectionAuthority  = 0x0002
   740  	DnsSectionAdditional = 0x0003
   741  )
   742  
   743  type DNSSRVData struct {
   744  	Target   *uint16
   745  	Priority uint16
   746  	Weight   uint16
   747  	Port     uint16
   748  	Pad      uint16
   749  }
   750  
   751  type DNSPTRData struct {
   752  	Host *uint16
   753  }
   754  
   755  type DNSMXData struct {
   756  	NameExchange *uint16
   757  	Preference   uint16
   758  	Pad          uint16
   759  }
   760  
   761  type DNSTXTData struct {
   762  	StringCount uint16
   763  	StringArray [1]*uint16
   764  }
   765  
   766  type DNSRecord struct {
   767  	Next     *DNSRecord
   768  	Name     *uint16
   769  	Type     uint16
   770  	Length   uint16
   771  	Dw       uint32
   772  	Ttl      uint32
   773  	Reserved uint32
   774  	Data     [40]byte
   775  }
   776  
   777  const (
   778  	TF_DISCONNECT         = 1
   779  	TF_REUSE_SOCKET       = 2
   780  	TF_WRITE_BEHIND       = 4
   781  	TF_USE_DEFAULT_WORKER = 0
   782  	TF_USE_SYSTEM_THREAD  = 16
   783  	TF_USE_KERNEL_APC     = 32
   784  )
   785  
   786  type TransmitFileBuffers struct {
   787  	Head       uintptr
   788  	HeadLength uint32
   789  	Tail       uintptr
   790  	TailLength uint32
   791  }
   792  
   793  const (
   794  	IFF_UP           = 1
   795  	IFF_BROADCAST    = 2
   796  	IFF_LOOPBACK     = 4
   797  	IFF_POINTTOPOINT = 8
   798  	IFF_MULTICAST    = 16
   799  )
   800  
   801  const SIO_GET_INTERFACE_LIST = 0x4004747F
   802  
   803  // TODO(mattn): SockaddrGen is union of sockaddr/sockaddr_in/sockaddr_in6_old.
   804  // will be fixed to change variable type as suitable.
   805  
   806  type SockaddrGen [24]byte
   807  
   808  type InterfaceInfo struct {
   809  	Flags            uint32
   810  	Address          SockaddrGen
   811  	BroadcastAddress SockaddrGen
   812  	Netmask          SockaddrGen
   813  }
   814  
   815  type IpAddressString struct {
   816  	String [16]byte
   817  }
   818  
   819  type IpMaskString IpAddressString
   820  
   821  type IpAddrString struct {
   822  	Next      *IpAddrString
   823  	IpAddress IpAddressString
   824  	IpMask    IpMaskString
   825  	Context   uint32
   826  }
   827  
   828  const MAX_ADAPTER_NAME_LENGTH = 256
   829  const MAX_ADAPTER_DESCRIPTION_LENGTH = 128
   830  const MAX_ADAPTER_ADDRESS_LENGTH = 8
   831  
   832  type IpAdapterInfo struct {
   833  	Next                *IpAdapterInfo
   834  	ComboIndex          uint32
   835  	AdapterName         [MAX_ADAPTER_NAME_LENGTH + 4]byte
   836  	Description         [MAX_ADAPTER_DESCRIPTION_LENGTH + 4]byte
   837  	AddressLength       uint32
   838  	Address             [MAX_ADAPTER_ADDRESS_LENGTH]byte
   839  	Index               uint32
   840  	Type                uint32
   841  	DhcpEnabled         uint32
   842  	CurrentIpAddress    *IpAddrString
   843  	IpAddressList       IpAddrString
   844  	GatewayList         IpAddrString
   845  	DhcpServer          IpAddrString
   846  	HaveWins            bool
   847  	PrimaryWinsServer   IpAddrString
   848  	SecondaryWinsServer IpAddrString
   849  	LeaseObtained       int64
   850  	LeaseExpires        int64
   851  }
   852  
   853  const MAXLEN_PHYSADDR = 8
   854  const MAX_INTERFACE_NAME_LEN = 256
   855  const MAXLEN_IFDESCR = 256
   856  
   857  type MibIfRow struct {
   858  	Name            [MAX_INTERFACE_NAME_LEN]uint16
   859  	Index           uint32
   860  	Type            uint32
   861  	Mtu             uint32
   862  	Speed           uint32
   863  	PhysAddrLen     uint32
   864  	PhysAddr        [MAXLEN_PHYSADDR]byte
   865  	AdminStatus     uint32
   866  	OperStatus      uint32
   867  	LastChange      uint32
   868  	InOctets        uint32
   869  	InUcastPkts     uint32
   870  	InNUcastPkts    uint32
   871  	InDiscards      uint32
   872  	InErrors        uint32
   873  	InUnknownProtos uint32
   874  	OutOctets       uint32
   875  	OutUcastPkts    uint32
   876  	OutNUcastPkts   uint32
   877  	OutDiscards     uint32
   878  	OutErrors       uint32
   879  	OutQLen         uint32
   880  	DescrLen        uint32
   881  	Descr           [MAXLEN_IFDESCR]byte
   882  }
   883  
   884  type CertInfo struct {
   885  	// Not implemented
   886  }
   887  
   888  type CertContext struct {
   889  	EncodingType uint32
   890  	EncodedCert  *byte
   891  	Length       uint32
   892  	CertInfo     *CertInfo
   893  	Store        Handle
   894  }
   895  
   896  type CertChainContext struct {
   897  	Size                       uint32
   898  	TrustStatus                CertTrustStatus
   899  	ChainCount                 uint32
   900  	Chains                     **CertSimpleChain
   901  	LowerQualityChainCount     uint32
   902  	LowerQualityChains         **CertChainContext
   903  	HasRevocationFreshnessTime uint32
   904  	RevocationFreshnessTime    uint32
   905  }
   906  
   907  type CertTrustListInfo struct {
   908  	// Not implemented
   909  }
   910  
   911  type CertSimpleChain struct {
   912  	Size                       uint32
   913  	TrustStatus                CertTrustStatus
   914  	NumElements                uint32
   915  	Elements                   **CertChainElement
   916  	TrustListInfo              *CertTrustListInfo
   917  	HasRevocationFreshnessTime uint32
   918  	RevocationFreshnessTime    uint32
   919  }
   920  
   921  type CertChainElement struct {
   922  	Size              uint32
   923  	CertContext       *CertContext
   924  	TrustStatus       CertTrustStatus
   925  	RevocationInfo    *CertRevocationInfo
   926  	IssuanceUsage     *CertEnhKeyUsage
   927  	ApplicationUsage  *CertEnhKeyUsage
   928  	ExtendedErrorInfo *uint16
   929  }
   930  
   931  type CertRevocationCrlInfo struct {
   932  	// Not implemented
   933  }
   934  
   935  type CertRevocationInfo struct {
   936  	Size             uint32
   937  	RevocationResult uint32
   938  	RevocationOid    *byte
   939  	OidSpecificInfo  Pointer
   940  	HasFreshnessTime uint32
   941  	FreshnessTime    uint32
   942  	CrlInfo          *CertRevocationCrlInfo
   943  }
   944  
   945  type CertTrustStatus struct {
   946  	ErrorStatus uint32
   947  	InfoStatus  uint32
   948  }
   949  
   950  type CertUsageMatch struct {
   951  	Type  uint32
   952  	Usage CertEnhKeyUsage
   953  }
   954  
   955  type CertEnhKeyUsage struct {
   956  	Length           uint32
   957  	UsageIdentifiers **byte
   958  }
   959  
   960  type CertChainPara struct {
   961  	Size                         uint32
   962  	RequestedUsage               CertUsageMatch
   963  	RequstedIssuancePolicy       CertUsageMatch
   964  	URLRetrievalTimeout          uint32
   965  	CheckRevocationFreshnessTime uint32
   966  	RevocationFreshnessTime      uint32
   967  	CacheResync                  *Filetime
   968  }
   969  
   970  type CertChainPolicyPara struct {
   971  	Size            uint32
   972  	Flags           uint32
   973  	ExtraPolicyPara Pointer
   974  }
   975  
   976  type SSLExtraCertChainPolicyPara struct {
   977  	Size       uint32
   978  	AuthType   uint32
   979  	Checks     uint32
   980  	ServerName *uint16
   981  }
   982  
   983  type CertChainPolicyStatus struct {
   984  	Size              uint32
   985  	Error             uint32
   986  	ChainIndex        uint32
   987  	ElementIndex      uint32
   988  	ExtraPolicyStatus Pointer
   989  }
   990  
   991  const (
   992  	// do not reorder
   993  	HKEY_CLASSES_ROOT = 0x80000000 + iota
   994  	HKEY_CURRENT_USER
   995  	HKEY_LOCAL_MACHINE
   996  	HKEY_USERS
   997  	HKEY_PERFORMANCE_DATA
   998  	HKEY_CURRENT_CONFIG
   999  	HKEY_DYN_DATA
  1000  
  1001  	KEY_QUERY_VALUE        = 1
  1002  	KEY_SET_VALUE          = 2
  1003  	KEY_CREATE_SUB_KEY     = 4
  1004  	KEY_ENUMERATE_SUB_KEYS = 8
  1005  	KEY_NOTIFY             = 16
  1006  	KEY_CREATE_LINK        = 32
  1007  	KEY_WRITE              = 0x20006
  1008  	KEY_EXECUTE            = 0x20019
  1009  	KEY_READ               = 0x20019
  1010  	KEY_WOW64_64KEY        = 0x0100
  1011  	KEY_WOW64_32KEY        = 0x0200
  1012  	KEY_ALL_ACCESS         = 0xf003f
  1013  )
  1014  
  1015  const (
  1016  	// do not reorder
  1017  	REG_NONE = iota
  1018  	REG_SZ
  1019  	REG_EXPAND_SZ
  1020  	REG_BINARY
  1021  	REG_DWORD_LITTLE_ENDIAN
  1022  	REG_DWORD_BIG_ENDIAN
  1023  	REG_LINK
  1024  	REG_MULTI_SZ
  1025  	REG_RESOURCE_LIST
  1026  	REG_FULL_RESOURCE_DESCRIPTOR
  1027  	REG_RESOURCE_REQUIREMENTS_LIST
  1028  	REG_QWORD_LITTLE_ENDIAN
  1029  	REG_DWORD = REG_DWORD_LITTLE_ENDIAN
  1030  	REG_QWORD = REG_QWORD_LITTLE_ENDIAN
  1031  )
  1032  
  1033  type AddrinfoW struct {
  1034  	Flags     int32
  1035  	Family    int32
  1036  	Socktype  int32
  1037  	Protocol  int32
  1038  	Addrlen   uintptr
  1039  	Canonname *uint16
  1040  	Addr      Pointer
  1041  	Next      *AddrinfoW
  1042  }
  1043  
  1044  const (
  1045  	AI_PASSIVE     = 1
  1046  	AI_CANONNAME   = 2
  1047  	AI_NUMERICHOST = 4
  1048  )
  1049  
  1050  type GUID struct {
  1051  	Data1 uint32
  1052  	Data2 uint16
  1053  	Data3 uint16
  1054  	Data4 [8]byte
  1055  }
  1056  
  1057  var WSAID_CONNECTEX = GUID{
  1058  	0x25a207b9,
  1059  	0xddf3,
  1060  	0x4660,
  1061  	[8]byte{0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e},
  1062  }
  1063  
  1064  const (
  1065  	FILE_SKIP_COMPLETION_PORT_ON_SUCCESS = 1
  1066  	FILE_SKIP_SET_EVENT_ON_HANDLE        = 2
  1067  )
  1068  
  1069  const (
  1070  	WSAPROTOCOL_LEN    = 255
  1071  	MAX_PROTOCOL_CHAIN = 7
  1072  	BASE_PROTOCOL      = 1
  1073  	LAYERED_PROTOCOL   = 0
  1074  
  1075  	XP1_CONNECTIONLESS           = 0x00000001
  1076  	XP1_GUARANTEED_DELIVERY      = 0x00000002
  1077  	XP1_GUARANTEED_ORDER         = 0x00000004
  1078  	XP1_MESSAGE_ORIENTED         = 0x00000008
  1079  	XP1_PSEUDO_STREAM            = 0x00000010
  1080  	XP1_GRACEFUL_CLOSE           = 0x00000020
  1081  	XP1_EXPEDITED_DATA           = 0x00000040
  1082  	XP1_CONNECT_DATA             = 0x00000080
  1083  	XP1_DISCONNECT_DATA          = 0x00000100
  1084  	XP1_SUPPORT_BROADCAST        = 0x00000200
  1085  	XP1_SUPPORT_MULTIPOINT       = 0x00000400
  1086  	XP1_MULTIPOINT_CONTROL_PLANE = 0x00000800
  1087  	XP1_MULTIPOINT_DATA_PLANE    = 0x00001000
  1088  	XP1_QOS_SUPPORTED            = 0x00002000
  1089  	XP1_UNI_SEND                 = 0x00008000
  1090  	XP1_UNI_RECV                 = 0x00010000
  1091  	XP1_IFS_HANDLES              = 0x00020000
  1092  	XP1_PARTIAL_MESSAGE          = 0x00040000
  1093  	XP1_SAN_SUPPORT_SDP          = 0x00080000
  1094  
  1095  	PFL_MULTIPLE_PROTO_ENTRIES  = 0x00000001
  1096  	PFL_RECOMMENDED_PROTO_ENTRY = 0x00000002
  1097  	PFL_HIDDEN                  = 0x00000004
  1098  	PFL_MATCHES_PROTOCOL_ZERO   = 0x00000008
  1099  	PFL_NETWORKDIRECT_PROVIDER  = 0x00000010
  1100  )
  1101  
  1102  type WSAProtocolInfo struct {
  1103  	ServiceFlags1     uint32
  1104  	ServiceFlags2     uint32
  1105  	ServiceFlags3     uint32
  1106  	ServiceFlags4     uint32
  1107  	ProviderFlags     uint32
  1108  	ProviderId        GUID
  1109  	CatalogEntryId    uint32
  1110  	ProtocolChain     WSAProtocolChain
  1111  	Version           int32
  1112  	AddressFamily     int32
  1113  	MaxSockAddr       int32
  1114  	MinSockAddr       int32
  1115  	SocketType        int32
  1116  	Protocol          int32
  1117  	ProtocolMaxOffset int32
  1118  	NetworkByteOrder  int32
  1119  	SecurityScheme    int32
  1120  	MessageSize       uint32
  1121  	ProviderReserved  uint32
  1122  	ProtocolName      [WSAPROTOCOL_LEN + 1]uint16
  1123  }
  1124  
  1125  type WSAProtocolChain struct {
  1126  	ChainLen     int32
  1127  	ChainEntries [MAX_PROTOCOL_CHAIN]uint32
  1128  }
  1129  
  1130  type TCPKeepalive struct {
  1131  	OnOff    uint32
  1132  	Time     uint32
  1133  	Interval uint32
  1134  }
  1135  
  1136  type symbolicLinkReparseBuffer struct {
  1137  	SubstituteNameOffset uint16
  1138  	SubstituteNameLength uint16
  1139  	PrintNameOffset      uint16
  1140  	PrintNameLength      uint16
  1141  	Flags                uint32
  1142  	PathBuffer           [1]uint16
  1143  }
  1144  
  1145  type mountPointReparseBuffer struct {
  1146  	SubstituteNameOffset uint16
  1147  	SubstituteNameLength uint16
  1148  	PrintNameOffset      uint16
  1149  	PrintNameLength      uint16
  1150  	PathBuffer           [1]uint16
  1151  }
  1152  
  1153  type reparseDataBuffer struct {
  1154  	ReparseTag        uint32
  1155  	ReparseDataLength uint16
  1156  	Reserved          uint16
  1157  
  1158  	// GenericReparseBuffer
  1159  	reparseBuffer byte
  1160  }
  1161  
  1162  const (
  1163  	FSCTL_GET_REPARSE_POINT          = 0x900A8
  1164  	MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16 * 1024
  1165  	_IO_REPARSE_TAG_MOUNT_POINT      = 0xA0000003
  1166  	IO_REPARSE_TAG_SYMLINK           = 0xA000000C
  1167  	SYMBOLIC_LINK_FLAG_DIRECTORY     = 0x1
  1168  	_SYMLINK_FLAG_RELATIVE           = 1
  1169  )
  1170  
  1171  const UNIX_PATH_MAX = 108 // defined in afunix.h
  1172  

View as plain text