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