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 5package windows 6 7import ( 8 "net" 9 "syscall" 10 "unsafe" 11) 12 13const ( 14 // Invented values to support what package os expects. 15 O_RDONLY = 0x00000 16 O_WRONLY = 0x00001 17 O_RDWR = 0x00002 18 O_CREAT = 0x00040 19 O_EXCL = 0x00080 20 O_NOCTTY = 0x00100 21 O_TRUNC = 0x00200 22 O_NONBLOCK = 0x00800 23 O_APPEND = 0x00400 24 O_SYNC = 0x01000 25 O_ASYNC = 0x02000 26 O_CLOEXEC = 0x80000 27) 28 29const ( 30 // More invented values for signals 31 SIGHUP = Signal(0x1) 32 SIGINT = Signal(0x2) 33 SIGQUIT = Signal(0x3) 34 SIGILL = Signal(0x4) 35 SIGTRAP = Signal(0x5) 36 SIGABRT = Signal(0x6) 37 SIGBUS = Signal(0x7) 38 SIGFPE = Signal(0x8) 39 SIGKILL = Signal(0x9) 40 SIGSEGV = Signal(0xb) 41 SIGPIPE = Signal(0xd) 42 SIGALRM = Signal(0xe) 43 SIGTERM = Signal(0xf) 44) 45 46var signals = [...]string{ 47 1: "hangup", 48 2: "interrupt", 49 3: "quit", 50 4: "illegal instruction", 51 5: "trace/breakpoint trap", 52 6: "aborted", 53 7: "bus error", 54 8: "floating point exception", 55 9: "killed", 56 10: "user defined signal 1", 57 11: "segmentation fault", 58 12: "user defined signal 2", 59 13: "broken pipe", 60 14: "alarm clock", 61 15: "terminated", 62} 63 64const ( 65 FILE_LIST_DIRECTORY = 0x00000001 66 FILE_APPEND_DATA = 0x00000004 67 FILE_WRITE_ATTRIBUTES = 0x00000100 68 69 FILE_SHARE_READ = 0x00000001 70 FILE_SHARE_WRITE = 0x00000002 71 FILE_SHARE_DELETE = 0x00000004 72 73 FILE_ATTRIBUTE_READONLY = 0x00000001 74 FILE_ATTRIBUTE_HIDDEN = 0x00000002 75 FILE_ATTRIBUTE_SYSTEM = 0x00000004 76 FILE_ATTRIBUTE_DIRECTORY = 0x00000010 77 FILE_ATTRIBUTE_ARCHIVE = 0x00000020 78 FILE_ATTRIBUTE_DEVICE = 0x00000040 79 FILE_ATTRIBUTE_NORMAL = 0x00000080 80 FILE_ATTRIBUTE_TEMPORARY = 0x00000100 81 FILE_ATTRIBUTE_SPARSE_FILE = 0x00000200 82 FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400 83 FILE_ATTRIBUTE_COMPRESSED = 0x00000800 84 FILE_ATTRIBUTE_OFFLINE = 0x00001000 85 FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x00002000 86 FILE_ATTRIBUTE_ENCRYPTED = 0x00004000 87 FILE_ATTRIBUTE_INTEGRITY_STREAM = 0x00008000 88 FILE_ATTRIBUTE_VIRTUAL = 0x00010000 89 FILE_ATTRIBUTE_NO_SCRUB_DATA = 0x00020000 90 FILE_ATTRIBUTE_RECALL_ON_OPEN = 0x00040000 91 FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS = 0x00400000 92 93 INVALID_FILE_ATTRIBUTES = 0xffffffff 94 95 CREATE_NEW = 1 96 CREATE_ALWAYS = 2 97 OPEN_EXISTING = 3 98 OPEN_ALWAYS = 4 99 TRUNCATE_EXISTING = 5 100 101 FILE_FLAG_OPEN_REQUIRING_OPLOCK = 0x00040000 102 FILE_FLAG_FIRST_PIPE_INSTANCE = 0x00080000 103 FILE_FLAG_OPEN_NO_RECALL = 0x00100000 104 FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000 105 FILE_FLAG_SESSION_AWARE = 0x00800000 106 FILE_FLAG_POSIX_SEMANTICS = 0x01000000 107 FILE_FLAG_BACKUP_SEMANTICS = 0x02000000 108 FILE_FLAG_DELETE_ON_CLOSE = 0x04000000 109 FILE_FLAG_SEQUENTIAL_SCAN = 0x08000000 110 FILE_FLAG_RANDOM_ACCESS = 0x10000000 111 FILE_FLAG_NO_BUFFERING = 0x20000000 112 FILE_FLAG_OVERLAPPED = 0x40000000 113 FILE_FLAG_WRITE_THROUGH = 0x80000000 114 115 HANDLE_FLAG_INHERIT = 0x00000001 116 STARTF_USESTDHANDLES = 0x00000100 117 STARTF_USESHOWWINDOW = 0x00000001 118 DUPLICATE_CLOSE_SOURCE = 0x00000001 119 DUPLICATE_SAME_ACCESS = 0x00000002 120 121 STD_INPUT_HANDLE = -10 & (1<<32 - 1) 122 STD_OUTPUT_HANDLE = -11 & (1<<32 - 1) 123 STD_ERROR_HANDLE = -12 & (1<<32 - 1) 124 125 FILE_BEGIN = 0 126 FILE_CURRENT = 1 127 FILE_END = 2 128 129 LANG_ENGLISH = 0x09 130 SUBLANG_ENGLISH_US = 0x01 131 132 FORMAT_MESSAGE_ALLOCATE_BUFFER = 256 133 FORMAT_MESSAGE_IGNORE_INSERTS = 512 134 FORMAT_MESSAGE_FROM_STRING = 1024 135 FORMAT_MESSAGE_FROM_HMODULE = 2048 136 FORMAT_MESSAGE_FROM_SYSTEM = 4096 137 FORMAT_MESSAGE_ARGUMENT_ARRAY = 8192 138 FORMAT_MESSAGE_MAX_WIDTH_MASK = 255 139 140 MAX_PATH = 260 141 MAX_LONG_PATH = 32768 142 143 MAX_COMPUTERNAME_LENGTH = 15 144 145 TIME_ZONE_ID_UNKNOWN = 0 146 TIME_ZONE_ID_STANDARD = 1 147 148 TIME_ZONE_ID_DAYLIGHT = 2 149 IGNORE = 0 150 INFINITE = 0xffffffff 151 152 WAIT_ABANDONED = 0x00000080 153 WAIT_OBJECT_0 = 0x00000000 154 WAIT_FAILED = 0xFFFFFFFF 155 156 // Access rights for process. 157 PROCESS_CREATE_PROCESS = 0x0080 158 PROCESS_CREATE_THREAD = 0x0002 159 PROCESS_DUP_HANDLE = 0x0040 160 PROCESS_QUERY_INFORMATION = 0x0400 161 PROCESS_QUERY_LIMITED_INFORMATION = 0x1000 162 PROCESS_SET_INFORMATION = 0x0200 163 PROCESS_SET_QUOTA = 0x0100 164 PROCESS_SUSPEND_RESUME = 0x0800 165 PROCESS_TERMINATE = 0x0001 166 PROCESS_VM_OPERATION = 0x0008 167 PROCESS_VM_READ = 0x0010 168 PROCESS_VM_WRITE = 0x0020 169 170 // Access rights for thread. 171 THREAD_DIRECT_IMPERSONATION = 0x0200 172 THREAD_GET_CONTEXT = 0x0008 173 THREAD_IMPERSONATE = 0x0100 174 THREAD_QUERY_INFORMATION = 0x0040 175 THREAD_QUERY_LIMITED_INFORMATION = 0x0800 176 THREAD_SET_CONTEXT = 0x0010 177 THREAD_SET_INFORMATION = 0x0020 178 THREAD_SET_LIMITED_INFORMATION = 0x0400 179 THREAD_SET_THREAD_TOKEN = 0x0080 180 THREAD_SUSPEND_RESUME = 0x0002 181 THREAD_TERMINATE = 0x0001 182 183 FILE_MAP_COPY = 0x01 184 FILE_MAP_WRITE = 0x02 185 FILE_MAP_READ = 0x04 186 FILE_MAP_EXECUTE = 0x20 187 188 CTRL_C_EVENT = 0 189 CTRL_BREAK_EVENT = 1 190 CTRL_CLOSE_EVENT = 2 191 CTRL_LOGOFF_EVENT = 5 192 CTRL_SHUTDOWN_EVENT = 6 193 194 // Windows reserves errors >= 1<<29 for application use. 195 APPLICATION_ERROR = 1 << 29 196) 197 198const ( 199 // Process creation flags. 200 CREATE_BREAKAWAY_FROM_JOB = 0x01000000 201 CREATE_DEFAULT_ERROR_MODE = 0x04000000 202 CREATE_NEW_CONSOLE = 0x00000010 203 CREATE_NEW_PROCESS_GROUP = 0x00000200 204 CREATE_NO_WINDOW = 0x08000000 205 CREATE_PROTECTED_PROCESS = 0x00040000 206 CREATE_PRESERVE_CODE_AUTHZ_LEVEL = 0x02000000 207 CREATE_SEPARATE_WOW_VDM = 0x00000800 208 CREATE_SHARED_WOW_VDM = 0x00001000 209 CREATE_SUSPENDED = 0x00000004 210 CREATE_UNICODE_ENVIRONMENT = 0x00000400 211 DEBUG_ONLY_THIS_PROCESS = 0x00000002 212 DEBUG_PROCESS = 0x00000001 213 DETACHED_PROCESS = 0x00000008 214 EXTENDED_STARTUPINFO_PRESENT = 0x00080000 215 INHERIT_PARENT_AFFINITY = 0x00010000 216) 217 218const ( 219 // flags for CreateToolhelp32Snapshot 220 TH32CS_SNAPHEAPLIST = 0x01 221 TH32CS_SNAPPROCESS = 0x02 222 TH32CS_SNAPTHREAD = 0x04 223 TH32CS_SNAPMODULE = 0x08 224 TH32CS_SNAPMODULE32 = 0x10 225 TH32CS_SNAPALL = TH32CS_SNAPHEAPLIST | TH32CS_SNAPMODULE | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD 226 TH32CS_INHERIT = 0x80000000 227) 228 229const ( 230 // filters for ReadDirectoryChangesW 231 FILE_NOTIFY_CHANGE_FILE_NAME = 0x001 232 FILE_NOTIFY_CHANGE_DIR_NAME = 0x002 233 FILE_NOTIFY_CHANGE_ATTRIBUTES = 0x004 234 FILE_NOTIFY_CHANGE_SIZE = 0x008 235 FILE_NOTIFY_CHANGE_LAST_WRITE = 0x010 236 FILE_NOTIFY_CHANGE_LAST_ACCESS = 0x020 237 FILE_NOTIFY_CHANGE_CREATION = 0x040 238 FILE_NOTIFY_CHANGE_SECURITY = 0x100 239) 240 241const ( 242 // do not reorder 243 FILE_ACTION_ADDED = iota + 1 244 FILE_ACTION_REMOVED 245 FILE_ACTION_MODIFIED 246 FILE_ACTION_RENAMED_OLD_NAME 247 FILE_ACTION_RENAMED_NEW_NAME 248) 249 250const ( 251 // wincrypt.h 252 PROV_RSA_FULL = 1 253 PROV_RSA_SIG = 2 254 PROV_DSS = 3 255 PROV_FORTEZZA = 4 256 PROV_MS_EXCHANGE = 5 257 PROV_SSL = 6 258 PROV_RSA_SCHANNEL = 12 259 PROV_DSS_DH = 13 260 PROV_EC_ECDSA_SIG = 14 261 PROV_EC_ECNRA_SIG = 15 262 PROV_EC_ECDSA_FULL = 16 263 PROV_EC_ECNRA_FULL = 17 264 PROV_DH_SCHANNEL = 18 265 PROV_SPYRUS_LYNKS = 20 266 PROV_RNG = 21 267 PROV_INTEL_SEC = 22 268 PROV_REPLACE_OWF = 23 269 PROV_RSA_AES = 24 270 CRYPT_VERIFYCONTEXT = 0xF0000000 271 CRYPT_NEWKEYSET = 0x00000008 272 CRYPT_DELETEKEYSET = 0x00000010 273 CRYPT_MACHINE_KEYSET = 0x00000020 274 CRYPT_SILENT = 0x00000040 275 CRYPT_DEFAULT_CONTAINER_OPTIONAL = 0x00000080 276 277 USAGE_MATCH_TYPE_AND = 0 278 USAGE_MATCH_TYPE_OR = 1 279 280 /* msgAndCertEncodingType values for CertOpenStore function */ 281 X509_ASN_ENCODING = 0x00000001 282 PKCS_7_ASN_ENCODING = 0x00010000 283 284 /* storeProvider values for CertOpenStore function */ 285 CERT_STORE_PROV_MSG = 1 286 CERT_STORE_PROV_MEMORY = 2 287 CERT_STORE_PROV_FILE = 3 288 CERT_STORE_PROV_REG = 4 289 CERT_STORE_PROV_PKCS7 = 5 290 CERT_STORE_PROV_SERIALIZED = 6 291 CERT_STORE_PROV_FILENAME_A = 7 292 CERT_STORE_PROV_FILENAME_W = 8 293 CERT_STORE_PROV_FILENAME = CERT_STORE_PROV_FILENAME_W 294 CERT_STORE_PROV_SYSTEM_A = 9 295 CERT_STORE_PROV_SYSTEM_W = 10 296 CERT_STORE_PROV_SYSTEM = CERT_STORE_PROV_SYSTEM_W 297 CERT_STORE_PROV_COLLECTION = 11 298 CERT_STORE_PROV_SYSTEM_REGISTRY_A = 12 299 CERT_STORE_PROV_SYSTEM_REGISTRY_W = 13 300 CERT_STORE_PROV_SYSTEM_REGISTRY = CERT_STORE_PROV_SYSTEM_REGISTRY_W 301 CERT_STORE_PROV_PHYSICAL_W = 14 302 CERT_STORE_PROV_PHYSICAL = CERT_STORE_PROV_PHYSICAL_W 303 CERT_STORE_PROV_SMART_CARD_W = 15 304 CERT_STORE_PROV_SMART_CARD = CERT_STORE_PROV_SMART_CARD_W 305 CERT_STORE_PROV_LDAP_W = 16 306 CERT_STORE_PROV_LDAP = CERT_STORE_PROV_LDAP_W 307 CERT_STORE_PROV_PKCS12 = 17 308 309 /* store characteristics (low WORD of flag) for CertOpenStore function */ 310 CERT_STORE_NO_CRYPT_RELEASE_FLAG = 0x00000001 311 CERT_STORE_SET_LOCALIZED_NAME_FLAG = 0x00000002 312 CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG = 0x00000004 313 CERT_STORE_DELETE_FLAG = 0x00000010 314 CERT_STORE_UNSAFE_PHYSICAL_FLAG = 0x00000020 315 CERT_STORE_SHARE_STORE_FLAG = 0x00000040 316 CERT_STORE_SHARE_CONTEXT_FLAG = 0x00000080 317 CERT_STORE_MANIFOLD_FLAG = 0x00000100 318 CERT_STORE_ENUM_ARCHIVED_FLAG = 0x00000200 319 CERT_STORE_UPDATE_KEYID_FLAG = 0x00000400 320 CERT_STORE_BACKUP_RESTORE_FLAG = 0x00000800 321 CERT_STORE_MAXIMUM_ALLOWED_FLAG = 0x00001000 322 CERT_STORE_CREATE_NEW_FLAG = 0x00002000 323 CERT_STORE_OPEN_EXISTING_FLAG = 0x00004000 324 CERT_STORE_READONLY_FLAG = 0x00008000 325 326 /* store locations (high WORD of flag) for CertOpenStore function */ 327 CERT_SYSTEM_STORE_CURRENT_USER = 0x00010000 328 CERT_SYSTEM_STORE_LOCAL_MACHINE = 0x00020000 329 CERT_SYSTEM_STORE_CURRENT_SERVICE = 0x00040000 330 CERT_SYSTEM_STORE_SERVICES = 0x00050000 331 CERT_SYSTEM_STORE_USERS = 0x00060000 332 CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY = 0x00070000 333 CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY = 0x00080000 334 CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE = 0x00090000 335 CERT_SYSTEM_STORE_UNPROTECTED_FLAG = 0x40000000 336 CERT_SYSTEM_STORE_RELOCATE_FLAG = 0x80000000 337 338 /* Miscellaneous high-WORD flags for CertOpenStore function */ 339 CERT_REGISTRY_STORE_REMOTE_FLAG = 0x00010000 340 CERT_REGISTRY_STORE_SERIALIZED_FLAG = 0x00020000 341 CERT_REGISTRY_STORE_ROAMING_FLAG = 0x00040000 342 CERT_REGISTRY_STORE_MY_IE_DIRTY_FLAG = 0x00080000 343 CERT_REGISTRY_STORE_LM_GPT_FLAG = 0x01000000 344 CERT_REGISTRY_STORE_CLIENT_GPT_FLAG = 0x80000000 345 CERT_FILE_STORE_COMMIT_ENABLE_FLAG = 0x00010000 346 CERT_LDAP_STORE_SIGN_FLAG = 0x00010000 347 CERT_LDAP_STORE_AREC_EXCLUSIVE_FLAG = 0x00020000 348 CERT_LDAP_STORE_OPENED_FLAG = 0x00040000 349 CERT_LDAP_STORE_UNBIND_FLAG = 0x00080000 350 351 /* addDisposition values for CertAddCertificateContextToStore function */ 352 CERT_STORE_ADD_NEW = 1 353 CERT_STORE_ADD_USE_EXISTING = 2 354 CERT_STORE_ADD_REPLACE_EXISTING = 3 355 CERT_STORE_ADD_ALWAYS = 4 356 CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES = 5 357 CERT_STORE_ADD_NEWER = 6 358 CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES = 7 359 360 /* ErrorStatus values for CertTrustStatus struct */ 361 CERT_TRUST_NO_ERROR = 0x00000000 362 CERT_TRUST_IS_NOT_TIME_VALID = 0x00000001 363 CERT_TRUST_IS_REVOKED = 0x00000004 364 CERT_TRUST_IS_NOT_SIGNATURE_VALID = 0x00000008 365 CERT_TRUST_IS_NOT_VALID_FOR_USAGE = 0x00000010 366 CERT_TRUST_IS_UNTRUSTED_ROOT = 0x00000020 367 CERT_TRUST_REVOCATION_STATUS_UNKNOWN = 0x00000040 368 CERT_TRUST_IS_CYCLIC = 0x00000080 369 CERT_TRUST_INVALID_EXTENSION = 0x00000100 370 CERT_TRUST_INVALID_POLICY_CONSTRAINTS = 0x00000200 371 CERT_TRUST_INVALID_BASIC_CONSTRAINTS = 0x00000400 372 CERT_TRUST_INVALID_NAME_CONSTRAINTS = 0x00000800 373 CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT = 0x00001000 374 CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT = 0x00002000 375 CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT = 0x00004000 376 CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT = 0x00008000 377 CERT_TRUST_IS_PARTIAL_CHAIN = 0x00010000 378 CERT_TRUST_CTL_IS_NOT_TIME_VALID = 0x00020000 379 CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID = 0x00040000 380 CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE = 0x00080000 381 CERT_TRUST_HAS_WEAK_SIGNATURE = 0x00100000 382 CERT_TRUST_IS_OFFLINE_REVOCATION = 0x01000000 383 CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY = 0x02000000 384 CERT_TRUST_IS_EXPLICIT_DISTRUST = 0x04000000 385 CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT = 0x08000000 386 387 /* InfoStatus values for CertTrustStatus struct */ 388 CERT_TRUST_HAS_EXACT_MATCH_ISSUER = 0x00000001 389 CERT_TRUST_HAS_KEY_MATCH_ISSUER = 0x00000002 390 CERT_TRUST_HAS_NAME_MATCH_ISSUER = 0x00000004 391 CERT_TRUST_IS_SELF_SIGNED = 0x00000008 392 CERT_TRUST_HAS_PREFERRED_ISSUER = 0x00000100 393 CERT_TRUST_HAS_ISSUANCE_CHAIN_POLICY = 0x00000400 394 CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS = 0x00000400 395 CERT_TRUST_IS_PEER_TRUSTED = 0x00000800 396 CERT_TRUST_HAS_CRL_VALIDITY_EXTENDED = 0x00001000 397 CERT_TRUST_IS_FROM_EXCLUSIVE_TRUST_STORE = 0x00002000 398 CERT_TRUST_IS_CA_TRUSTED = 0x00004000 399 CERT_TRUST_IS_COMPLEX_CHAIN = 0x00010000 400 401 /* policyOID values for CertVerifyCertificateChainPolicy function */ 402 CERT_CHAIN_POLICY_BASE = 1 403 CERT_CHAIN_POLICY_AUTHENTICODE = 2 404 CERT_CHAIN_POLICY_AUTHENTICODE_TS = 3 405 CERT_CHAIN_POLICY_SSL = 4 406 CERT_CHAIN_POLICY_BASIC_CONSTRAINTS = 5 407 CERT_CHAIN_POLICY_NT_AUTH = 6 408 CERT_CHAIN_POLICY_MICROSOFT_ROOT = 7 409 CERT_CHAIN_POLICY_EV = 8 410 CERT_CHAIN_POLICY_SSL_F12 = 9 411 412 /* AuthType values for SSLExtraCertChainPolicyPara struct */ 413 AUTHTYPE_CLIENT = 1 414 AUTHTYPE_SERVER = 2 415 416 /* Checks values for SSLExtraCertChainPolicyPara struct */ 417 SECURITY_FLAG_IGNORE_REVOCATION = 0x00000080 418 SECURITY_FLAG_IGNORE_UNKNOWN_CA = 0x00000100 419 SECURITY_FLAG_IGNORE_WRONG_USAGE = 0x00000200 420 SECURITY_FLAG_IGNORE_CERT_CN_INVALID = 0x00001000 421 SECURITY_FLAG_IGNORE_CERT_DATE_INVALID = 0x00002000 422) 423 424const ( 425 // flags for SetErrorMode 426 SEM_FAILCRITICALERRORS = 0x0001 427 SEM_NOALIGNMENTFAULTEXCEPT = 0x0004 428 SEM_NOGPFAULTERRORBOX = 0x0002 429 SEM_NOOPENFILEERRORBOX = 0x8000 430) 431 432const ( 433 // Priority class. 434 ABOVE_NORMAL_PRIORITY_CLASS = 0x00008000 435 BELOW_NORMAL_PRIORITY_CLASS = 0x00004000 436 HIGH_PRIORITY_CLASS = 0x00000080 437 IDLE_PRIORITY_CLASS = 0x00000040 438 NORMAL_PRIORITY_CLASS = 0x00000020 439 PROCESS_MODE_BACKGROUND_BEGIN = 0x00100000 440 PROCESS_MODE_BACKGROUND_END = 0x00200000 441 REALTIME_PRIORITY_CLASS = 0x00000100 442) 443 444var ( 445 OID_PKIX_KP_SERVER_AUTH = []byte("1.3.6.1.5.5.7.3.1\x00") 446 OID_SERVER_GATED_CRYPTO = []byte("1.3.6.1.4.1.311.10.3.3\x00") 447 OID_SGC_NETSCAPE = []byte("2.16.840.1.113730.4.1\x00") 448) 449 450// Pointer represents a pointer to an arbitrary Windows type. 451// 452// Pointer-typed fields may point to one of many different types. It's 453// up to the caller to provide a pointer to the appropriate type, cast 454// to Pointer. The caller must obey the unsafe.Pointer rules while 455// doing so. 456type Pointer *struct{} 457 458// Invented values to support what package os expects. 459type Timeval struct { 460 Sec int32 461 Usec int32 462} 463 464func (tv *Timeval) Nanoseconds() int64 { 465 return (int64(tv.Sec)*1e6 + int64(tv.Usec)) * 1e3 466} 467 468func NsecToTimeval(nsec int64) (tv Timeval) { 469 tv.Sec = int32(nsec / 1e9) 470 tv.Usec = int32(nsec % 1e9 / 1e3) 471 return 472} 473 474type Overlapped struct { 475 Internal uintptr 476 InternalHigh uintptr 477 Offset uint32 478 OffsetHigh uint32 479 HEvent Handle 480} 481 482type FileNotifyInformation struct { 483 NextEntryOffset uint32 484 Action uint32 485 FileNameLength uint32 486 FileName uint16 487} 488 489type Filetime struct { 490 LowDateTime uint32 491 HighDateTime uint32 492} 493 494// Nanoseconds returns Filetime ft in nanoseconds 495// since Epoch (00:00:00 UTC, January 1, 1970). 496func (ft *Filetime) Nanoseconds() int64 { 497 // 100-nanosecond intervals since January 1, 1601 498 nsec := int64(ft.HighDateTime)<<32 + int64(ft.LowDateTime) 499 // change starting time to the Epoch (00:00:00 UTC, January 1, 1970) 500 nsec -= 116444736000000000 501 // convert into nanoseconds 502 nsec *= 100 503 return nsec 504} 505 506func NsecToFiletime(nsec int64) (ft Filetime) { 507 // convert into 100-nanosecond 508 nsec /= 100 509 // change starting time to January 1, 1601 510 nsec += 116444736000000000 511 // split into high / low 512 ft.LowDateTime = uint32(nsec & 0xffffffff) 513 ft.HighDateTime = uint32(nsec >> 32 & 0xffffffff) 514 return ft 515} 516 517type Win32finddata struct { 518 FileAttributes uint32 519 CreationTime Filetime 520 LastAccessTime Filetime 521 LastWriteTime Filetime 522 FileSizeHigh uint32 523 FileSizeLow uint32 524 Reserved0 uint32 525 Reserved1 uint32 526 FileName [MAX_PATH - 1]uint16 527 AlternateFileName [13]uint16 528} 529 530// This is the actual system call structure. 531// Win32finddata is what we committed to in Go 1. 532type win32finddata1 struct { 533 FileAttributes uint32 534 CreationTime Filetime 535 LastAccessTime Filetime 536 LastWriteTime Filetime 537 FileSizeHigh uint32 538 FileSizeLow uint32 539 Reserved0 uint32 540 Reserved1 uint32 541 FileName [MAX_PATH]uint16 542 AlternateFileName [14]uint16 543} 544 545func copyFindData(dst *Win32finddata, src *win32finddata1) { 546 dst.FileAttributes = src.FileAttributes 547 dst.CreationTime = src.CreationTime 548 dst.LastAccessTime = src.LastAccessTime 549 dst.LastWriteTime = src.LastWriteTime 550 dst.FileSizeHigh = src.FileSizeHigh 551 dst.FileSizeLow = src.FileSizeLow 552 dst.Reserved0 = src.Reserved0 553 dst.Reserved1 = src.Reserved1 554 555 // The src is 1 element bigger than dst, but it must be NUL. 556 copy(dst.FileName[:], src.FileName[:]) 557 copy(dst.AlternateFileName[:], src.AlternateFileName[:]) 558} 559 560type ByHandleFileInformation struct { 561 FileAttributes uint32 562 CreationTime Filetime 563 LastAccessTime Filetime 564 LastWriteTime Filetime 565 VolumeSerialNumber uint32 566 FileSizeHigh uint32 567 FileSizeLow uint32 568 NumberOfLinks uint32 569 FileIndexHigh uint32 570 FileIndexLow uint32 571} 572 573const ( 574 GetFileExInfoStandard = 0 575 GetFileExMaxInfoLevel = 1 576) 577 578type Win32FileAttributeData struct { 579 FileAttributes uint32 580 CreationTime Filetime 581 LastAccessTime Filetime 582 LastWriteTime Filetime 583 FileSizeHigh uint32 584 FileSizeLow uint32 585} 586 587// ShowWindow constants 588const ( 589 // winuser.h 590 SW_HIDE = 0 591 SW_NORMAL = 1 592 SW_SHOWNORMAL = 1 593 SW_SHOWMINIMIZED = 2 594 SW_SHOWMAXIMIZED = 3 595 SW_MAXIMIZE = 3 596 SW_SHOWNOACTIVATE = 4 597 SW_SHOW = 5 598 SW_MINIMIZE = 6 599 SW_SHOWMINNOACTIVE = 7 600 SW_SHOWNA = 8 601 SW_RESTORE = 9 602 SW_SHOWDEFAULT = 10 603 SW_FORCEMINIMIZE = 11 604) 605 606type StartupInfo struct { 607 Cb uint32 608 _ *uint16 609 Desktop *uint16 610 Title *uint16 611 X uint32 612 Y uint32 613 XSize uint32 614 YSize uint32 615 XCountChars uint32 616 YCountChars uint32 617 FillAttribute uint32 618 Flags uint32 619 ShowWindow uint16 620 _ uint16 621 _ *byte 622 StdInput Handle 623 StdOutput Handle 624 StdErr Handle 625} 626 627type ProcessInformation struct { 628 Process Handle 629 Thread Handle 630 ProcessId uint32 631 ThreadId uint32 632} 633 634type ProcessEntry32 struct { 635 Size uint32 636 Usage uint32 637 ProcessID uint32 638 DefaultHeapID uintptr 639 ModuleID uint32 640 Threads uint32 641 ParentProcessID uint32 642 PriClassBase int32 643 Flags uint32 644 ExeFile [MAX_PATH]uint16 645} 646 647type ThreadEntry32 struct { 648 Size uint32 649 Usage uint32 650 ThreadID uint32 651 OwnerProcessID uint32 652 BasePri int32 653 DeltaPri int32 654 Flags uint32 655} 656 657type Systemtime struct { 658 Year uint16 659 Month uint16 660 DayOfWeek uint16 661 Day uint16 662 Hour uint16 663 Minute uint16 664 Second uint16 665 Milliseconds uint16 666} 667 668type Timezoneinformation struct { 669 Bias int32 670 StandardName [32]uint16 671 StandardDate Systemtime 672 StandardBias int32 673 DaylightName [32]uint16 674 DaylightDate Systemtime 675 DaylightBias int32 676} 677 678// Socket related. 679 680const ( 681 AF_UNSPEC = 0 682 AF_UNIX = 1 683 AF_INET = 2 684 AF_NETBIOS = 17 685 AF_INET6 = 23 686 AF_IRDA = 26 687 AF_BTH = 32 688 689 SOCK_STREAM = 1 690 SOCK_DGRAM = 2 691 SOCK_RAW = 3 692 SOCK_RDM = 4 693 SOCK_SEQPACKET = 5 694 695 IPPROTO_IP = 0 696 IPPROTO_ICMP = 1 697 IPPROTO_IGMP = 2 698 BTHPROTO_RFCOMM = 3 699 IPPROTO_TCP = 6 700 IPPROTO_UDP = 17 701 IPPROTO_IPV6 = 41 702 IPPROTO_ICMPV6 = 58 703 IPPROTO_RM = 113 704 705 SOL_SOCKET = 0xffff 706 SO_REUSEADDR = 4 707 SO_KEEPALIVE = 8 708 SO_DONTROUTE = 16 709 SO_BROADCAST = 32 710 SO_LINGER = 128 711 SO_RCVBUF = 0x1002 712 SO_RCVTIMEO = 0x1006 713 SO_SNDBUF = 0x1001 714 SO_UPDATE_ACCEPT_CONTEXT = 0x700b 715 SO_UPDATE_CONNECT_CONTEXT = 0x7010 716 717 IOC_OUT = 0x40000000 718 IOC_IN = 0x80000000 719 IOC_VENDOR = 0x18000000 720 IOC_INOUT = IOC_IN | IOC_OUT 721 IOC_WS2 = 0x08000000 722 SIO_GET_EXTENSION_FUNCTION_POINTER = IOC_INOUT | IOC_WS2 | 6 723 SIO_KEEPALIVE_VALS = IOC_IN | IOC_VENDOR | 4 724 SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12 725 726 // cf. http://support.microsoft.com/default.aspx?scid=kb;en-us;257460 727 728 IP_TOS = 0x3 729 IP_TTL = 0x4 730 IP_MULTICAST_IF = 0x9 731 IP_MULTICAST_TTL = 0xa 732 IP_MULTICAST_LOOP = 0xb 733 IP_ADD_MEMBERSHIP = 0xc 734 IP_DROP_MEMBERSHIP = 0xd 735 736 IPV6_V6ONLY = 0x1b 737 IPV6_UNICAST_HOPS = 0x4 738 IPV6_MULTICAST_IF = 0x9 739 IPV6_MULTICAST_HOPS = 0xa 740 IPV6_MULTICAST_LOOP = 0xb 741 IPV6_JOIN_GROUP = 0xc 742 IPV6_LEAVE_GROUP = 0xd 743 744 MSG_OOB = 0x1 745 MSG_PEEK = 0x2 746 MSG_DONTROUTE = 0x4 747 MSG_WAITALL = 0x8 748 749 MSG_TRUNC = 0x0100 750 MSG_CTRUNC = 0x0200 751 MSG_BCAST = 0x0400 752 MSG_MCAST = 0x0800 753 754 SOMAXCONN = 0x7fffffff 755 756 TCP_NODELAY = 1 757 758 SHUT_RD = 0 759 SHUT_WR = 1 760 SHUT_RDWR = 2 761 762 WSADESCRIPTION_LEN = 256 763 WSASYS_STATUS_LEN = 128 764) 765 766type WSABuf struct { 767 Len uint32 768 Buf *byte 769} 770 771type WSAMsg struct { 772 Name *syscall.RawSockaddrAny 773 Namelen int32 774 Buffers *WSABuf 775 BufferCount uint32 776 Control WSABuf 777 Flags uint32 778} 779 780// Invented values to support what package os expects. 781const ( 782 S_IFMT = 0x1f000 783 S_IFIFO = 0x1000 784 S_IFCHR = 0x2000 785 S_IFDIR = 0x4000 786 S_IFBLK = 0x6000 787 S_IFREG = 0x8000 788 S_IFLNK = 0xa000 789 S_IFSOCK = 0xc000 790 S_ISUID = 0x800 791 S_ISGID = 0x400 792 S_ISVTX = 0x200 793 S_IRUSR = 0x100 794 S_IWRITE = 0x80 795 S_IWUSR = 0x80 796 S_IXUSR = 0x40 797) 798 799const ( 800 FILE_TYPE_CHAR = 0x0002 801 FILE_TYPE_DISK = 0x0001 802 FILE_TYPE_PIPE = 0x0003 803 FILE_TYPE_REMOTE = 0x8000 804 FILE_TYPE_UNKNOWN = 0x0000 805) 806 807type Hostent struct { 808 Name *byte 809 Aliases **byte 810 AddrType uint16 811 Length uint16 812 AddrList **byte 813} 814 815type Protoent struct { 816 Name *byte 817 Aliases **byte 818 Proto uint16 819} 820 821const ( 822 DNS_TYPE_A = 0x0001 823 DNS_TYPE_NS = 0x0002 824 DNS_TYPE_MD = 0x0003 825 DNS_TYPE_MF = 0x0004 826 DNS_TYPE_CNAME = 0x0005 827 DNS_TYPE_SOA = 0x0006 828 DNS_TYPE_MB = 0x0007 829 DNS_TYPE_MG = 0x0008 830 DNS_TYPE_MR = 0x0009 831 DNS_TYPE_NULL = 0x000a 832 DNS_TYPE_WKS = 0x000b 833 DNS_TYPE_PTR = 0x000c 834 DNS_TYPE_HINFO = 0x000d 835 DNS_TYPE_MINFO = 0x000e 836 DNS_TYPE_MX = 0x000f 837 DNS_TYPE_TEXT = 0x0010 838 DNS_TYPE_RP = 0x0011 839 DNS_TYPE_AFSDB = 0x0012 840 DNS_TYPE_X25 = 0x0013 841 DNS_TYPE_ISDN = 0x0014 842 DNS_TYPE_RT = 0x0015 843 DNS_TYPE_NSAP = 0x0016 844 DNS_TYPE_NSAPPTR = 0x0017 845 DNS_TYPE_SIG = 0x0018 846 DNS_TYPE_KEY = 0x0019 847 DNS_TYPE_PX = 0x001a 848 DNS_TYPE_GPOS = 0x001b 849 DNS_TYPE_AAAA = 0x001c 850 DNS_TYPE_LOC = 0x001d 851 DNS_TYPE_NXT = 0x001e 852 DNS_TYPE_EID = 0x001f 853 DNS_TYPE_NIMLOC = 0x0020 854 DNS_TYPE_SRV = 0x0021 855 DNS_TYPE_ATMA = 0x0022 856 DNS_TYPE_NAPTR = 0x0023 857 DNS_TYPE_KX = 0x0024 858 DNS_TYPE_CERT = 0x0025 859 DNS_TYPE_A6 = 0x0026 860 DNS_TYPE_DNAME = 0x0027 861 DNS_TYPE_SINK = 0x0028 862 DNS_TYPE_OPT = 0x0029 863 DNS_TYPE_DS = 0x002B 864 DNS_TYPE_RRSIG = 0x002E 865 DNS_TYPE_NSEC = 0x002F 866 DNS_TYPE_DNSKEY = 0x0030 867 DNS_TYPE_DHCID = 0x0031 868 DNS_TYPE_UINFO = 0x0064 869 DNS_TYPE_UID = 0x0065 870 DNS_TYPE_GID = 0x0066 871 DNS_TYPE_UNSPEC = 0x0067 872 DNS_TYPE_ADDRS = 0x00f8 873 DNS_TYPE_TKEY = 0x00f9 874 DNS_TYPE_TSIG = 0x00fa 875 DNS_TYPE_IXFR = 0x00fb 876 DNS_TYPE_AXFR = 0x00fc 877 DNS_TYPE_MAILB = 0x00fd 878 DNS_TYPE_MAILA = 0x00fe 879 DNS_TYPE_ALL = 0x00ff 880 DNS_TYPE_ANY = 0x00ff 881 DNS_TYPE_WINS = 0xff01 882 DNS_TYPE_WINSR = 0xff02 883 DNS_TYPE_NBSTAT = 0xff01 884) 885 886const ( 887 // flags inside DNSRecord.Dw 888 DnsSectionQuestion = 0x0000 889 DnsSectionAnswer = 0x0001 890 DnsSectionAuthority = 0x0002 891 DnsSectionAdditional = 0x0003 892) 893 894type DNSSRVData struct { 895 Target *uint16 896 Priority uint16 897 Weight uint16 898 Port uint16 899 Pad uint16 900} 901 902type DNSPTRData struct { 903 Host *uint16 904} 905 906type DNSMXData struct { 907 NameExchange *uint16 908 Preference uint16 909 Pad uint16 910} 911 912type DNSTXTData struct { 913 StringCount uint16 914 StringArray [1]*uint16 915} 916 917type DNSRecord struct { 918 Next *DNSRecord 919 Name *uint16 920 Type uint16 921 Length uint16 922 Dw uint32 923 Ttl uint32 924 Reserved uint32 925 Data [40]byte 926} 927 928const ( 929 TF_DISCONNECT = 1 930 TF_REUSE_SOCKET = 2 931 TF_WRITE_BEHIND = 4 932 TF_USE_DEFAULT_WORKER = 0 933 TF_USE_SYSTEM_THREAD = 16 934 TF_USE_KERNEL_APC = 32 935) 936 937type TransmitFileBuffers struct { 938 Head uintptr 939 HeadLength uint32 940 Tail uintptr 941 TailLength uint32 942} 943 944const ( 945 IFF_UP = 1 946 IFF_BROADCAST = 2 947 IFF_LOOPBACK = 4 948 IFF_POINTTOPOINT = 8 949 IFF_MULTICAST = 16 950) 951 952const SIO_GET_INTERFACE_LIST = 0x4004747F 953 954// TODO(mattn): SockaddrGen is union of sockaddr/sockaddr_in/sockaddr_in6_old. 955// will be fixed to change variable type as suitable. 956 957type SockaddrGen [24]byte 958 959type InterfaceInfo struct { 960 Flags uint32 961 Address SockaddrGen 962 BroadcastAddress SockaddrGen 963 Netmask SockaddrGen 964} 965 966type IpAddressString struct { 967 String [16]byte 968} 969 970type IpMaskString IpAddressString 971 972type IpAddrString struct { 973 Next *IpAddrString 974 IpAddress IpAddressString 975 IpMask IpMaskString 976 Context uint32 977} 978 979const MAX_ADAPTER_NAME_LENGTH = 256 980const MAX_ADAPTER_DESCRIPTION_LENGTH = 128 981const MAX_ADAPTER_ADDRESS_LENGTH = 8 982 983type IpAdapterInfo struct { 984 Next *IpAdapterInfo 985 ComboIndex uint32 986 AdapterName [MAX_ADAPTER_NAME_LENGTH + 4]byte 987 Description [MAX_ADAPTER_DESCRIPTION_LENGTH + 4]byte 988 AddressLength uint32 989 Address [MAX_ADAPTER_ADDRESS_LENGTH]byte 990 Index uint32 991 Type uint32 992 DhcpEnabled uint32 993 CurrentIpAddress *IpAddrString 994 IpAddressList IpAddrString 995 GatewayList IpAddrString 996 DhcpServer IpAddrString 997 HaveWins bool 998 PrimaryWinsServer IpAddrString 999 SecondaryWinsServer IpAddrString 1000 LeaseObtained int64 1001 LeaseExpires int64 1002} 1003 1004const MAXLEN_PHYSADDR = 8 1005const MAX_INTERFACE_NAME_LEN = 256 1006const MAXLEN_IFDESCR = 256 1007 1008type MibIfRow struct { 1009 Name [MAX_INTERFACE_NAME_LEN]uint16 1010 Index uint32 1011 Type uint32 1012 Mtu uint32 1013 Speed uint32 1014 PhysAddrLen uint32 1015 PhysAddr [MAXLEN_PHYSADDR]byte 1016 AdminStatus uint32 1017 OperStatus uint32 1018 LastChange uint32 1019 InOctets uint32 1020 InUcastPkts uint32 1021 InNUcastPkts uint32 1022 InDiscards uint32 1023 InErrors uint32 1024 InUnknownProtos uint32 1025 OutOctets uint32 1026 OutUcastPkts uint32 1027 OutNUcastPkts uint32 1028 OutDiscards uint32 1029 OutErrors uint32 1030 OutQLen uint32 1031 DescrLen uint32 1032 Descr [MAXLEN_IFDESCR]byte 1033} 1034 1035type CertInfo struct { 1036 // Not implemented 1037} 1038 1039type CertContext struct { 1040 EncodingType uint32 1041 EncodedCert *byte 1042 Length uint32 1043 CertInfo *CertInfo 1044 Store Handle 1045} 1046 1047type CertChainContext struct { 1048 Size uint32 1049 TrustStatus CertTrustStatus 1050 ChainCount uint32 1051 Chains **CertSimpleChain 1052 LowerQualityChainCount uint32 1053 LowerQualityChains **CertChainContext 1054 HasRevocationFreshnessTime uint32 1055 RevocationFreshnessTime uint32 1056} 1057 1058type CertTrustListInfo struct { 1059 // Not implemented 1060} 1061 1062type CertSimpleChain struct { 1063 Size uint32 1064 TrustStatus CertTrustStatus 1065 NumElements uint32 1066 Elements **CertChainElement 1067 TrustListInfo *CertTrustListInfo 1068 HasRevocationFreshnessTime uint32 1069 RevocationFreshnessTime uint32 1070} 1071 1072type CertChainElement struct { 1073 Size uint32 1074 CertContext *CertContext 1075 TrustStatus CertTrustStatus 1076 RevocationInfo *CertRevocationInfo 1077 IssuanceUsage *CertEnhKeyUsage 1078 ApplicationUsage *CertEnhKeyUsage 1079 ExtendedErrorInfo *uint16 1080} 1081 1082type CertRevocationCrlInfo struct { 1083 // Not implemented 1084} 1085 1086type CertRevocationInfo struct { 1087 Size uint32 1088 RevocationResult uint32 1089 RevocationOid *byte 1090 OidSpecificInfo Pointer 1091 HasFreshnessTime uint32 1092 FreshnessTime uint32 1093 CrlInfo *CertRevocationCrlInfo 1094} 1095 1096type CertTrustStatus struct { 1097 ErrorStatus uint32 1098 InfoStatus uint32 1099} 1100 1101type CertUsageMatch struct { 1102 Type uint32 1103 Usage CertEnhKeyUsage 1104} 1105 1106type CertEnhKeyUsage struct { 1107 Length uint32 1108 UsageIdentifiers **byte 1109} 1110 1111type CertChainPara struct { 1112 Size uint32 1113 RequestedUsage CertUsageMatch 1114 RequstedIssuancePolicy CertUsageMatch 1115 URLRetrievalTimeout uint32 1116 CheckRevocationFreshnessTime uint32 1117 RevocationFreshnessTime uint32 1118 CacheResync *Filetime 1119} 1120 1121type CertChainPolicyPara struct { 1122 Size uint32 1123 Flags uint32 1124 ExtraPolicyPara Pointer 1125} 1126 1127type SSLExtraCertChainPolicyPara struct { 1128 Size uint32 1129 AuthType uint32 1130 Checks uint32 1131 ServerName *uint16 1132} 1133 1134type CertChainPolicyStatus struct { 1135 Size uint32 1136 Error uint32 1137 ChainIndex uint32 1138 ElementIndex uint32 1139 ExtraPolicyStatus Pointer 1140} 1141 1142const ( 1143 // do not reorder 1144 HKEY_CLASSES_ROOT = 0x80000000 + iota 1145 HKEY_CURRENT_USER 1146 HKEY_LOCAL_MACHINE 1147 HKEY_USERS 1148 HKEY_PERFORMANCE_DATA 1149 HKEY_CURRENT_CONFIG 1150 HKEY_DYN_DATA 1151 1152 KEY_QUERY_VALUE = 1 1153 KEY_SET_VALUE = 2 1154 KEY_CREATE_SUB_KEY = 4 1155 KEY_ENUMERATE_SUB_KEYS = 8 1156 KEY_NOTIFY = 16 1157 KEY_CREATE_LINK = 32 1158 KEY_WRITE = 0x20006 1159 KEY_EXECUTE = 0x20019 1160 KEY_READ = 0x20019 1161 KEY_WOW64_64KEY = 0x0100 1162 KEY_WOW64_32KEY = 0x0200 1163 KEY_ALL_ACCESS = 0xf003f 1164) 1165 1166const ( 1167 // do not reorder 1168 REG_NONE = iota 1169 REG_SZ 1170 REG_EXPAND_SZ 1171 REG_BINARY 1172 REG_DWORD_LITTLE_ENDIAN 1173 REG_DWORD_BIG_ENDIAN 1174 REG_LINK 1175 REG_MULTI_SZ 1176 REG_RESOURCE_LIST 1177 REG_FULL_RESOURCE_DESCRIPTOR 1178 REG_RESOURCE_REQUIREMENTS_LIST 1179 REG_QWORD_LITTLE_ENDIAN 1180 REG_DWORD = REG_DWORD_LITTLE_ENDIAN 1181 REG_QWORD = REG_QWORD_LITTLE_ENDIAN 1182) 1183 1184const ( 1185 EVENT_MODIFY_STATE = 0x0002 1186 EVENT_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3 1187 1188 MUTANT_QUERY_STATE = 0x0001 1189 MUTANT_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | MUTANT_QUERY_STATE 1190 1191 SEMAPHORE_MODIFY_STATE = 0x0002 1192 SEMAPHORE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3 1193 1194 TIMER_QUERY_STATE = 0x0001 1195 TIMER_MODIFY_STATE = 0x0002 1196 TIMER_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | TIMER_QUERY_STATE | TIMER_MODIFY_STATE 1197 1198 MUTEX_MODIFY_STATE = MUTANT_QUERY_STATE 1199 MUTEX_ALL_ACCESS = MUTANT_ALL_ACCESS 1200 1201 CREATE_EVENT_MANUAL_RESET = 0x1 1202 CREATE_EVENT_INITIAL_SET = 0x2 1203 CREATE_MUTEX_INITIAL_OWNER = 0x1 1204) 1205 1206type AddrinfoW struct { 1207 Flags int32 1208 Family int32 1209 Socktype int32 1210 Protocol int32 1211 Addrlen uintptr 1212 Canonname *uint16 1213 Addr uintptr 1214 Next *AddrinfoW 1215} 1216 1217const ( 1218 AI_PASSIVE = 1 1219 AI_CANONNAME = 2 1220 AI_NUMERICHOST = 4 1221) 1222 1223type GUID struct { 1224 Data1 uint32 1225 Data2 uint16 1226 Data3 uint16 1227 Data4 [8]byte 1228} 1229 1230var WSAID_CONNECTEX = GUID{ 1231 0x25a207b9, 1232 0xddf3, 1233 0x4660, 1234 [8]byte{0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e}, 1235} 1236 1237var WSAID_WSASENDMSG = GUID{ 1238 0xa441e712, 1239 0x754f, 1240 0x43ca, 1241 [8]byte{0x84, 0xa7, 0x0d, 0xee, 0x44, 0xcf, 0x60, 0x6d}, 1242} 1243 1244var WSAID_WSARECVMSG = GUID{ 1245 0xf689d7c8, 1246 0x6f1f, 1247 0x436b, 1248 [8]byte{0x8a, 0x53, 0xe5, 0x4f, 0xe3, 0x51, 0xc3, 0x22}, 1249} 1250 1251const ( 1252 FILE_SKIP_COMPLETION_PORT_ON_SUCCESS = 1 1253 FILE_SKIP_SET_EVENT_ON_HANDLE = 2 1254) 1255 1256const ( 1257 WSAPROTOCOL_LEN = 255 1258 MAX_PROTOCOL_CHAIN = 7 1259 BASE_PROTOCOL = 1 1260 LAYERED_PROTOCOL = 0 1261 1262 XP1_CONNECTIONLESS = 0x00000001 1263 XP1_GUARANTEED_DELIVERY = 0x00000002 1264 XP1_GUARANTEED_ORDER = 0x00000004 1265 XP1_MESSAGE_ORIENTED = 0x00000008 1266 XP1_PSEUDO_STREAM = 0x00000010 1267 XP1_GRACEFUL_CLOSE = 0x00000020 1268 XP1_EXPEDITED_DATA = 0x00000040 1269 XP1_CONNECT_DATA = 0x00000080 1270 XP1_DISCONNECT_DATA = 0x00000100 1271 XP1_SUPPORT_BROADCAST = 0x00000200 1272 XP1_SUPPORT_MULTIPOINT = 0x00000400 1273 XP1_MULTIPOINT_CONTROL_PLANE = 0x00000800 1274 XP1_MULTIPOINT_DATA_PLANE = 0x00001000 1275 XP1_QOS_SUPPORTED = 0x00002000 1276 XP1_UNI_SEND = 0x00008000 1277 XP1_UNI_RECV = 0x00010000 1278 XP1_IFS_HANDLES = 0x00020000 1279 XP1_PARTIAL_MESSAGE = 0x00040000 1280 XP1_SAN_SUPPORT_SDP = 0x00080000 1281 1282 PFL_MULTIPLE_PROTO_ENTRIES = 0x00000001 1283 PFL_RECOMMENDED_PROTO_ENTRY = 0x00000002 1284 PFL_HIDDEN = 0x00000004 1285 PFL_MATCHES_PROTOCOL_ZERO = 0x00000008 1286 PFL_NETWORKDIRECT_PROVIDER = 0x00000010 1287) 1288 1289type WSAProtocolInfo struct { 1290 ServiceFlags1 uint32 1291 ServiceFlags2 uint32 1292 ServiceFlags3 uint32 1293 ServiceFlags4 uint32 1294 ProviderFlags uint32 1295 ProviderId GUID 1296 CatalogEntryId uint32 1297 ProtocolChain WSAProtocolChain 1298 Version int32 1299 AddressFamily int32 1300 MaxSockAddr int32 1301 MinSockAddr int32 1302 SocketType int32 1303 Protocol int32 1304 ProtocolMaxOffset int32 1305 NetworkByteOrder int32 1306 SecurityScheme int32 1307 MessageSize uint32 1308 ProviderReserved uint32 1309 ProtocolName [WSAPROTOCOL_LEN + 1]uint16 1310} 1311 1312type WSAProtocolChain struct { 1313 ChainLen int32 1314 ChainEntries [MAX_PROTOCOL_CHAIN]uint32 1315} 1316 1317type TCPKeepalive struct { 1318 OnOff uint32 1319 Time uint32 1320 Interval uint32 1321} 1322 1323type symbolicLinkReparseBuffer struct { 1324 SubstituteNameOffset uint16 1325 SubstituteNameLength uint16 1326 PrintNameOffset uint16 1327 PrintNameLength uint16 1328 Flags uint32 1329 PathBuffer [1]uint16 1330} 1331 1332type mountPointReparseBuffer struct { 1333 SubstituteNameOffset uint16 1334 SubstituteNameLength uint16 1335 PrintNameOffset uint16 1336 PrintNameLength uint16 1337 PathBuffer [1]uint16 1338} 1339 1340type reparseDataBuffer struct { 1341 ReparseTag uint32 1342 ReparseDataLength uint16 1343 Reserved uint16 1344 1345 // GenericReparseBuffer 1346 reparseBuffer byte 1347} 1348 1349const ( 1350 FSCTL_GET_REPARSE_POINT = 0x900A8 1351 MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16 * 1024 1352 IO_REPARSE_TAG_MOUNT_POINT = 0xA0000003 1353 IO_REPARSE_TAG_SYMLINK = 0xA000000C 1354 SYMBOLIC_LINK_FLAG_DIRECTORY = 0x1 1355) 1356 1357const ( 1358 ComputerNameNetBIOS = 0 1359 ComputerNameDnsHostname = 1 1360 ComputerNameDnsDomain = 2 1361 ComputerNameDnsFullyQualified = 3 1362 ComputerNamePhysicalNetBIOS = 4 1363 ComputerNamePhysicalDnsHostname = 5 1364 ComputerNamePhysicalDnsDomain = 6 1365 ComputerNamePhysicalDnsFullyQualified = 7 1366 ComputerNameMax = 8 1367) 1368 1369// For MessageBox() 1370const ( 1371 MB_OK = 0x00000000 1372 MB_OKCANCEL = 0x00000001 1373 MB_ABORTRETRYIGNORE = 0x00000002 1374 MB_YESNOCANCEL = 0x00000003 1375 MB_YESNO = 0x00000004 1376 MB_RETRYCANCEL = 0x00000005 1377 MB_CANCELTRYCONTINUE = 0x00000006 1378 MB_ICONHAND = 0x00000010 1379 MB_ICONQUESTION = 0x00000020 1380 MB_ICONEXCLAMATION = 0x00000030 1381 MB_ICONASTERISK = 0x00000040 1382 MB_USERICON = 0x00000080 1383 MB_ICONWARNING = MB_ICONEXCLAMATION 1384 MB_ICONERROR = MB_ICONHAND 1385 MB_ICONINFORMATION = MB_ICONASTERISK 1386 MB_ICONSTOP = MB_ICONHAND 1387 MB_DEFBUTTON1 = 0x00000000 1388 MB_DEFBUTTON2 = 0x00000100 1389 MB_DEFBUTTON3 = 0x00000200 1390 MB_DEFBUTTON4 = 0x00000300 1391 MB_APPLMODAL = 0x00000000 1392 MB_SYSTEMMODAL = 0x00001000 1393 MB_TASKMODAL = 0x00002000 1394 MB_HELP = 0x00004000 1395 MB_NOFOCUS = 0x00008000 1396 MB_SETFOREGROUND = 0x00010000 1397 MB_DEFAULT_DESKTOP_ONLY = 0x00020000 1398 MB_TOPMOST = 0x00040000 1399 MB_RIGHT = 0x00080000 1400 MB_RTLREADING = 0x00100000 1401 MB_SERVICE_NOTIFICATION = 0x00200000 1402) 1403 1404const ( 1405 MOVEFILE_REPLACE_EXISTING = 0x1 1406 MOVEFILE_COPY_ALLOWED = 0x2 1407 MOVEFILE_DELAY_UNTIL_REBOOT = 0x4 1408 MOVEFILE_WRITE_THROUGH = 0x8 1409 MOVEFILE_CREATE_HARDLINK = 0x10 1410 MOVEFILE_FAIL_IF_NOT_TRACKABLE = 0x20 1411) 1412 1413const GAA_FLAG_INCLUDE_PREFIX = 0x00000010 1414 1415const ( 1416 IF_TYPE_OTHER = 1 1417 IF_TYPE_ETHERNET_CSMACD = 6 1418 IF_TYPE_ISO88025_TOKENRING = 9 1419 IF_TYPE_PPP = 23 1420 IF_TYPE_SOFTWARE_LOOPBACK = 24 1421 IF_TYPE_ATM = 37 1422 IF_TYPE_IEEE80211 = 71 1423 IF_TYPE_TUNNEL = 131 1424 IF_TYPE_IEEE1394 = 144 1425) 1426 1427type SocketAddress struct { 1428 Sockaddr *syscall.RawSockaddrAny 1429 SockaddrLength int32 1430} 1431 1432// IP returns an IPv4 or IPv6 address, or nil if the underlying SocketAddress is neither. 1433func (addr *SocketAddress) IP() net.IP { 1434 if uintptr(addr.SockaddrLength) >= unsafe.Sizeof(RawSockaddrInet4{}) && addr.Sockaddr.Addr.Family == AF_INET { 1435 return (*RawSockaddrInet4)(unsafe.Pointer(addr.Sockaddr)).Addr[:] 1436 } else if uintptr(addr.SockaddrLength) >= unsafe.Sizeof(RawSockaddrInet6{}) && addr.Sockaddr.Addr.Family == AF_INET6 { 1437 return (*RawSockaddrInet6)(unsafe.Pointer(addr.Sockaddr)).Addr[:] 1438 } 1439 return nil 1440} 1441 1442type IpAdapterUnicastAddress struct { 1443 Length uint32 1444 Flags uint32 1445 Next *IpAdapterUnicastAddress 1446 Address SocketAddress 1447 PrefixOrigin int32 1448 SuffixOrigin int32 1449 DadState int32 1450 ValidLifetime uint32 1451 PreferredLifetime uint32 1452 LeaseLifetime uint32 1453 OnLinkPrefixLength uint8 1454} 1455 1456type IpAdapterAnycastAddress struct { 1457 Length uint32 1458 Flags uint32 1459 Next *IpAdapterAnycastAddress 1460 Address SocketAddress 1461} 1462 1463type IpAdapterMulticastAddress struct { 1464 Length uint32 1465 Flags uint32 1466 Next *IpAdapterMulticastAddress 1467 Address SocketAddress 1468} 1469 1470type IpAdapterDnsServerAdapter struct { 1471 Length uint32 1472 Reserved uint32 1473 Next *IpAdapterDnsServerAdapter 1474 Address SocketAddress 1475} 1476 1477type IpAdapterPrefix struct { 1478 Length uint32 1479 Flags uint32 1480 Next *IpAdapterPrefix 1481 Address SocketAddress 1482 PrefixLength uint32 1483} 1484 1485type IpAdapterAddresses struct { 1486 Length uint32 1487 IfIndex uint32 1488 Next *IpAdapterAddresses 1489 AdapterName *byte 1490 FirstUnicastAddress *IpAdapterUnicastAddress 1491 FirstAnycastAddress *IpAdapterAnycastAddress 1492 FirstMulticastAddress *IpAdapterMulticastAddress 1493 FirstDnsServerAddress *IpAdapterDnsServerAdapter 1494 DnsSuffix *uint16 1495 Description *uint16 1496 FriendlyName *uint16 1497 PhysicalAddress [syscall.MAX_ADAPTER_ADDRESS_LENGTH]byte 1498 PhysicalAddressLength uint32 1499 Flags uint32 1500 Mtu uint32 1501 IfType uint32 1502 OperStatus uint32 1503 Ipv6IfIndex uint32 1504 ZoneIndices [16]uint32 1505 FirstPrefix *IpAdapterPrefix 1506 /* more fields might be present here. */ 1507} 1508 1509const ( 1510 IfOperStatusUp = 1 1511 IfOperStatusDown = 2 1512 IfOperStatusTesting = 3 1513 IfOperStatusUnknown = 4 1514 IfOperStatusDormant = 5 1515 IfOperStatusNotPresent = 6 1516 IfOperStatusLowerLayerDown = 7 1517) 1518 1519// Console related constants used for the mode parameter to SetConsoleMode. See 1520// https://docs.microsoft.com/en-us/windows/console/setconsolemode for details. 1521 1522const ( 1523 ENABLE_PROCESSED_INPUT = 0x1 1524 ENABLE_LINE_INPUT = 0x2 1525 ENABLE_ECHO_INPUT = 0x4 1526 ENABLE_WINDOW_INPUT = 0x8 1527 ENABLE_MOUSE_INPUT = 0x10 1528 ENABLE_INSERT_MODE = 0x20 1529 ENABLE_QUICK_EDIT_MODE = 0x40 1530 ENABLE_EXTENDED_FLAGS = 0x80 1531 ENABLE_AUTO_POSITION = 0x100 1532 ENABLE_VIRTUAL_TERMINAL_INPUT = 0x200 1533 1534 ENABLE_PROCESSED_OUTPUT = 0x1 1535 ENABLE_WRAP_AT_EOL_OUTPUT = 0x2 1536 ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x4 1537 DISABLE_NEWLINE_AUTO_RETURN = 0x8 1538 ENABLE_LVB_GRID_WORLDWIDE = 0x10 1539) 1540 1541type Coord struct { 1542 X int16 1543 Y int16 1544} 1545 1546type SmallRect struct { 1547 Left int16 1548 Top int16 1549 Right int16 1550 Bottom int16 1551} 1552 1553// Used with GetConsoleScreenBuffer to retrieve information about a console 1554// screen buffer. See 1555// https://docs.microsoft.com/en-us/windows/console/console-screen-buffer-info-str 1556// for details. 1557 1558type ConsoleScreenBufferInfo struct { 1559 Size Coord 1560 CursorPosition Coord 1561 Attributes uint16 1562 Window SmallRect 1563 MaximumWindowSize Coord 1564} 1565 1566const UNIX_PATH_MAX = 108 // defined in afunix.h 1567 1568const ( 1569 // flags for JOBOBJECT_BASIC_LIMIT_INFORMATION.LimitFlags 1570 JOB_OBJECT_LIMIT_ACTIVE_PROCESS = 0x00000008 1571 JOB_OBJECT_LIMIT_AFFINITY = 0x00000010 1572 JOB_OBJECT_LIMIT_BREAKAWAY_OK = 0x00000800 1573 JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION = 0x00000400 1574 JOB_OBJECT_LIMIT_JOB_MEMORY = 0x00000200 1575 JOB_OBJECT_LIMIT_JOB_TIME = 0x00000004 1576 JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE = 0x00002000 1577 JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME = 0x00000040 1578 JOB_OBJECT_LIMIT_PRIORITY_CLASS = 0x00000020 1579 JOB_OBJECT_LIMIT_PROCESS_MEMORY = 0x00000100 1580 JOB_OBJECT_LIMIT_PROCESS_TIME = 0x00000002 1581 JOB_OBJECT_LIMIT_SCHEDULING_CLASS = 0x00000080 1582 JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK = 0x00001000 1583 JOB_OBJECT_LIMIT_SUBSET_AFFINITY = 0x00004000 1584 JOB_OBJECT_LIMIT_WORKINGSET = 0x00000001 1585) 1586 1587type JOBOBJECT_BASIC_LIMIT_INFORMATION struct { 1588 PerProcessUserTimeLimit int64 1589 PerJobUserTimeLimit int64 1590 LimitFlags uint32 1591 MinimumWorkingSetSize uintptr 1592 MaximumWorkingSetSize uintptr 1593 ActiveProcessLimit uint32 1594 Affinity uintptr 1595 PriorityClass uint32 1596 SchedulingClass uint32 1597} 1598 1599type IO_COUNTERS struct { 1600 ReadOperationCount uint64 1601 WriteOperationCount uint64 1602 OtherOperationCount uint64 1603 ReadTransferCount uint64 1604 WriteTransferCount uint64 1605 OtherTransferCount uint64 1606} 1607 1608type JOBOBJECT_EXTENDED_LIMIT_INFORMATION struct { 1609 BasicLimitInformation JOBOBJECT_BASIC_LIMIT_INFORMATION 1610 IoInfo IO_COUNTERS 1611 ProcessMemoryLimit uintptr 1612 JobMemoryLimit uintptr 1613 PeakProcessMemoryUsed uintptr 1614 PeakJobMemoryUsed uintptr 1615} 1616 1617const ( 1618 // UIRestrictionsClass 1619 JOB_OBJECT_UILIMIT_DESKTOP = 0x00000040 1620 JOB_OBJECT_UILIMIT_DISPLAYSETTINGS = 0x00000010 1621 JOB_OBJECT_UILIMIT_EXITWINDOWS = 0x00000080 1622 JOB_OBJECT_UILIMIT_GLOBALATOMS = 0x00000020 1623 JOB_OBJECT_UILIMIT_HANDLES = 0x00000001 1624 JOB_OBJECT_UILIMIT_READCLIPBOARD = 0x00000002 1625 JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS = 0x00000008 1626 JOB_OBJECT_UILIMIT_WRITECLIPBOARD = 0x00000004 1627) 1628 1629type JOBOBJECT_BASIC_UI_RESTRICTIONS struct { 1630 UIRestrictionsClass uint32 1631} 1632 1633const ( 1634 // JobObjectInformationClass 1635 JobObjectAssociateCompletionPortInformation = 7 1636 JobObjectBasicLimitInformation = 2 1637 JobObjectBasicUIRestrictions = 4 1638 JobObjectCpuRateControlInformation = 15 1639 JobObjectEndOfJobTimeInformation = 6 1640 JobObjectExtendedLimitInformation = 9 1641 JobObjectGroupInformation = 11 1642 JobObjectGroupInformationEx = 14 1643 JobObjectLimitViolationInformation2 = 35 1644 JobObjectNetRateControlInformation = 32 1645 JobObjectNotificationLimitInformation = 12 1646 JobObjectNotificationLimitInformation2 = 34 1647 JobObjectSecurityLimitInformation = 5 1648) 1649 1650const ( 1651 KF_FLAG_DEFAULT = 0x00000000 1652 KF_FLAG_FORCE_APP_DATA_REDIRECTION = 0x00080000 1653 KF_FLAG_RETURN_FILTER_REDIRECTION_TARGET = 0x00040000 1654 KF_FLAG_FORCE_PACKAGE_REDIRECTION = 0x00020000 1655 KF_FLAG_NO_PACKAGE_REDIRECTION = 0x00010000 1656 KF_FLAG_FORCE_APPCONTAINER_REDIRECTION = 0x00020000 1657 KF_FLAG_NO_APPCONTAINER_REDIRECTION = 0x00010000 1658 KF_FLAG_CREATE = 0x00008000 1659 KF_FLAG_DONT_VERIFY = 0x00004000 1660 KF_FLAG_DONT_UNEXPAND = 0x00002000 1661 KF_FLAG_NO_ALIAS = 0x00001000 1662 KF_FLAG_INIT = 0x00000800 1663 KF_FLAG_DEFAULT_PATH = 0x00000400 1664 KF_FLAG_NOT_PARENT_RELATIVE = 0x00000200 1665 KF_FLAG_SIMPLE_IDLIST = 0x00000100 1666 KF_FLAG_ALIAS_ONLY = 0x80000000 1667) 1668 1669type OsVersionInfoEx struct { 1670 osVersionInfoSize uint32 1671 MajorVersion uint32 1672 MinorVersion uint32 1673 BuildNumber uint32 1674 PlatformId uint32 1675 CsdVersion [128]uint16 1676 ServicePackMajor uint16 1677 ServicePackMinor uint16 1678 SuiteMask uint16 1679 ProductType byte 1680 _ byte 1681} 1682 1683const ( 1684 EWX_LOGOFF = 0x00000000 1685 EWX_SHUTDOWN = 0x00000001 1686 EWX_REBOOT = 0x00000002 1687 EWX_FORCE = 0x00000004 1688 EWX_POWEROFF = 0x00000008 1689 EWX_FORCEIFHUNG = 0x00000010 1690 EWX_QUICKRESOLVE = 0x00000020 1691 EWX_RESTARTAPPS = 0x00000040 1692 EWX_HYBRID_SHUTDOWN = 0x00400000 1693 EWX_BOOTOPTIONS = 0x01000000 1694 1695 SHTDN_REASON_FLAG_COMMENT_REQUIRED = 0x01000000 1696 SHTDN_REASON_FLAG_DIRTY_PROBLEM_ID_REQUIRED = 0x02000000 1697 SHTDN_REASON_FLAG_CLEAN_UI = 0x04000000 1698 SHTDN_REASON_FLAG_DIRTY_UI = 0x08000000 1699 SHTDN_REASON_FLAG_USER_DEFINED = 0x40000000 1700 SHTDN_REASON_FLAG_PLANNED = 0x80000000 1701 SHTDN_REASON_MAJOR_OTHER = 0x00000000 1702 SHTDN_REASON_MAJOR_NONE = 0x00000000 1703 SHTDN_REASON_MAJOR_HARDWARE = 0x00010000 1704 SHTDN_REASON_MAJOR_OPERATINGSYSTEM = 0x00020000 1705 SHTDN_REASON_MAJOR_SOFTWARE = 0x00030000 1706 SHTDN_REASON_MAJOR_APPLICATION = 0x00040000 1707 SHTDN_REASON_MAJOR_SYSTEM = 0x00050000 1708 SHTDN_REASON_MAJOR_POWER = 0x00060000 1709 SHTDN_REASON_MAJOR_LEGACY_API = 0x00070000 1710 SHTDN_REASON_MINOR_OTHER = 0x00000000 1711 SHTDN_REASON_MINOR_NONE = 0x000000ff 1712 SHTDN_REASON_MINOR_MAINTENANCE = 0x00000001 1713 SHTDN_REASON_MINOR_INSTALLATION = 0x00000002 1714 SHTDN_REASON_MINOR_UPGRADE = 0x00000003 1715 SHTDN_REASON_MINOR_RECONFIG = 0x00000004 1716 SHTDN_REASON_MINOR_HUNG = 0x00000005 1717 SHTDN_REASON_MINOR_UNSTABLE = 0x00000006 1718 SHTDN_REASON_MINOR_DISK = 0x00000007 1719 SHTDN_REASON_MINOR_PROCESSOR = 0x00000008 1720 SHTDN_REASON_MINOR_NETWORKCARD = 0x00000009 1721 SHTDN_REASON_MINOR_POWER_SUPPLY = 0x0000000a 1722 SHTDN_REASON_MINOR_CORDUNPLUGGED = 0x0000000b 1723 SHTDN_REASON_MINOR_ENVIRONMENT = 0x0000000c 1724 SHTDN_REASON_MINOR_HARDWARE_DRIVER = 0x0000000d 1725 SHTDN_REASON_MINOR_OTHERDRIVER = 0x0000000e 1726 SHTDN_REASON_MINOR_BLUESCREEN = 0x0000000F 1727 SHTDN_REASON_MINOR_SERVICEPACK = 0x00000010 1728 SHTDN_REASON_MINOR_HOTFIX = 0x00000011 1729 SHTDN_REASON_MINOR_SECURITYFIX = 0x00000012 1730 SHTDN_REASON_MINOR_SECURITY = 0x00000013 1731 SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY = 0x00000014 1732 SHTDN_REASON_MINOR_WMI = 0x00000015 1733 SHTDN_REASON_MINOR_SERVICEPACK_UNINSTALL = 0x00000016 1734 SHTDN_REASON_MINOR_HOTFIX_UNINSTALL = 0x00000017 1735 SHTDN_REASON_MINOR_SECURITYFIX_UNINSTALL = 0x00000018 1736 SHTDN_REASON_MINOR_MMC = 0x00000019 1737 SHTDN_REASON_MINOR_SYSTEMRESTORE = 0x0000001a 1738 SHTDN_REASON_MINOR_TERMSRV = 0x00000020 1739 SHTDN_REASON_MINOR_DC_PROMOTION = 0x00000021 1740 SHTDN_REASON_MINOR_DC_DEMOTION = 0x00000022 1741 SHTDN_REASON_UNKNOWN = SHTDN_REASON_MINOR_NONE 1742 SHTDN_REASON_LEGACY_API = SHTDN_REASON_MAJOR_LEGACY_API | SHTDN_REASON_FLAG_PLANNED 1743 SHTDN_REASON_VALID_BIT_MASK = 0xc0ffffff 1744 1745 SHUTDOWN_NORETRY = 0x1 1746) 1747 1748// Flags used for GetModuleHandleEx 1749const ( 1750 GET_MODULE_HANDLE_EX_FLAG_PIN = 1 1751 GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT = 2 1752 GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS = 4 1753) 1754 1755// MUI function flag values 1756const ( 1757 MUI_LANGUAGE_ID = 0x4 1758 MUI_LANGUAGE_NAME = 0x8 1759 MUI_MERGE_SYSTEM_FALLBACK = 0x10 1760 MUI_MERGE_USER_FALLBACK = 0x20 1761 MUI_UI_FALLBACK = MUI_MERGE_SYSTEM_FALLBACK | MUI_MERGE_USER_FALLBACK 1762 MUI_THREAD_LANGUAGES = 0x40 1763 MUI_CONSOLE_FILTER = 0x100 1764 MUI_COMPLEX_SCRIPT_FILTER = 0x200 1765 MUI_RESET_FILTERS = 0x001 1766 MUI_USER_PREFERRED_UI_LANGUAGES = 0x10 1767 MUI_USE_INSTALLED_LANGUAGES = 0x20 1768 MUI_USE_SEARCH_ALL_LANGUAGES = 0x40 1769 MUI_LANG_NEUTRAL_PE_FILE = 0x100 1770 MUI_NON_LANG_NEUTRAL_FILE = 0x200 1771 MUI_MACHINE_LANGUAGE_SETTINGS = 0x400 1772 MUI_FILETYPE_NOT_LANGUAGE_NEUTRAL = 0x001 1773 MUI_FILETYPE_LANGUAGE_NEUTRAL_MAIN = 0x002 1774 MUI_FILETYPE_LANGUAGE_NEUTRAL_MUI = 0x004 1775 MUI_QUERY_TYPE = 0x001 1776 MUI_QUERY_CHECKSUM = 0x002 1777 MUI_QUERY_LANGUAGE_NAME = 0x004 1778 MUI_QUERY_RESOURCE_TYPES = 0x008 1779 MUI_FILEINFO_VERSION = 0x001 1780 1781 MUI_FULL_LANGUAGE = 0x01 1782 MUI_PARTIAL_LANGUAGE = 0x02 1783 MUI_LIP_LANGUAGE = 0x04 1784 MUI_LANGUAGE_INSTALLED = 0x20 1785 MUI_LANGUAGE_LICENSED = 0x40 1786) 1787