twitchapon-anim

Basic Twitchapon Receiver/Visuals
git clone git://bsandro.tech/twitchapon-anim
Log | Files | Refs | README | LICENSE

types_windows.go (51141B)


      1 // Copyright 2011 The Go Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style
      3 // license that can be found in the LICENSE file.
      4 
      5 package windows
      6 
      7 import (
      8 	"net"
      9 	"syscall"
     10 	"unsafe"
     11 )
     12 
     13 const (
     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 
     29 const (
     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 
     46 var 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 
     64 const (
     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 
    198 const (
    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 
    218 const (
    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 
    229 const (
    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 
    241 const (
    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 
    250 const (
    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 
    424 const (
    425 	// flags for SetErrorMode
    426 	SEM_FAILCRITICALERRORS     = 0x0001
    427 	SEM_NOALIGNMENTFAULTEXCEPT = 0x0004
    428 	SEM_NOGPFAULTERRORBOX      = 0x0002
    429 	SEM_NOOPENFILEERRORBOX     = 0x8000
    430 )
    431 
    432 const (
    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 
    444 var (
    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.
    456 type Pointer *struct{}
    457 
    458 // Invented values to support what package os expects.
    459 type Timeval struct {
    460 	Sec  int32
    461 	Usec int32
    462 }
    463 
    464 func (tv *Timeval) Nanoseconds() int64 {
    465 	return (int64(tv.Sec)*1e6 + int64(tv.Usec)) * 1e3
    466 }
    467 
    468 func NsecToTimeval(nsec int64) (tv Timeval) {
    469 	tv.Sec = int32(nsec / 1e9)
    470 	tv.Usec = int32(nsec % 1e9 / 1e3)
    471 	return
    472 }
    473 
    474 type Overlapped struct {
    475 	Internal     uintptr
    476 	InternalHigh uintptr
    477 	Offset       uint32
    478 	OffsetHigh   uint32
    479 	HEvent       Handle
    480 }
    481 
    482 type FileNotifyInformation struct {
    483 	NextEntryOffset uint32
    484 	Action          uint32
    485 	FileNameLength  uint32
    486 	FileName        uint16
    487 }
    488 
    489 type 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).
    496 func (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 
    506 func 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 
    517 type 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.
    532 type 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 
    545 func 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 
    560 type 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 
    573 const (
    574 	GetFileExInfoStandard = 0
    575 	GetFileExMaxInfoLevel = 1
    576 )
    577 
    578 type 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
    588 const (
    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 
    606 type 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 
    627 type ProcessInformation struct {
    628 	Process   Handle
    629 	Thread    Handle
    630 	ProcessId uint32
    631 	ThreadId  uint32
    632 }
    633 
    634 type 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 
    647 type 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 
    657 type 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 
    668 type 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 
    680 const (
    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 
    766 type WSABuf struct {
    767 	Len uint32
    768 	Buf *byte
    769 }
    770 
    771 type 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.
    781 const (
    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 
    799 const (
    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 
    807 type Hostent struct {
    808 	Name     *byte
    809 	Aliases  **byte
    810 	AddrType uint16
    811 	Length   uint16
    812 	AddrList **byte
    813 }
    814 
    815 type Protoent struct {
    816 	Name    *byte
    817 	Aliases **byte
    818 	Proto   uint16
    819 }
    820 
    821 const (
    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 
    886 const (
    887 	// flags inside DNSRecord.Dw
    888 	DnsSectionQuestion   = 0x0000
    889 	DnsSectionAnswer     = 0x0001
    890 	DnsSectionAuthority  = 0x0002
    891 	DnsSectionAdditional = 0x0003
    892 )
    893 
    894 type DNSSRVData struct {
    895 	Target   *uint16
    896 	Priority uint16
    897 	Weight   uint16
    898 	Port     uint16
    899 	Pad      uint16
    900 }
    901 
    902 type DNSPTRData struct {
    903 	Host *uint16
    904 }
    905 
    906 type DNSMXData struct {
    907 	NameExchange *uint16
    908 	Preference   uint16
    909 	Pad          uint16
    910 }
    911 
    912 type DNSTXTData struct {
    913 	StringCount uint16
    914 	StringArray [1]*uint16
    915 }
    916 
    917 type 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 
    928 const (
    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 
    937 type TransmitFileBuffers struct {
    938 	Head       uintptr
    939 	HeadLength uint32
    940 	Tail       uintptr
    941 	TailLength uint32
    942 }
    943 
    944 const (
    945 	IFF_UP           = 1
    946 	IFF_BROADCAST    = 2
    947 	IFF_LOOPBACK     = 4
    948 	IFF_POINTTOPOINT = 8
    949 	IFF_MULTICAST    = 16
    950 )
    951 
    952 const 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 
    957 type SockaddrGen [24]byte
    958 
    959 type InterfaceInfo struct {
    960 	Flags            uint32
    961 	Address          SockaddrGen
    962 	BroadcastAddress SockaddrGen
    963 	Netmask          SockaddrGen
    964 }
    965 
    966 type IpAddressString struct {
    967 	String [16]byte
    968 }
    969 
    970 type IpMaskString IpAddressString
    971 
    972 type IpAddrString struct {
    973 	Next      *IpAddrString
    974 	IpAddress IpAddressString
    975 	IpMask    IpMaskString
    976 	Context   uint32
    977 }
    978 
    979 const MAX_ADAPTER_NAME_LENGTH = 256
    980 const MAX_ADAPTER_DESCRIPTION_LENGTH = 128
    981 const MAX_ADAPTER_ADDRESS_LENGTH = 8
    982 
    983 type 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 
   1004 const MAXLEN_PHYSADDR = 8
   1005 const MAX_INTERFACE_NAME_LEN = 256
   1006 const MAXLEN_IFDESCR = 256
   1007 
   1008 type 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 
   1035 type CertInfo struct {
   1036 	// Not implemented
   1037 }
   1038 
   1039 type CertContext struct {
   1040 	EncodingType uint32
   1041 	EncodedCert  *byte
   1042 	Length       uint32
   1043 	CertInfo     *CertInfo
   1044 	Store        Handle
   1045 }
   1046 
   1047 type 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 
   1058 type CertTrustListInfo struct {
   1059 	// Not implemented
   1060 }
   1061 
   1062 type 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 
   1072 type 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 
   1082 type CertRevocationCrlInfo struct {
   1083 	// Not implemented
   1084 }
   1085 
   1086 type 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 
   1096 type CertTrustStatus struct {
   1097 	ErrorStatus uint32
   1098 	InfoStatus  uint32
   1099 }
   1100 
   1101 type CertUsageMatch struct {
   1102 	Type  uint32
   1103 	Usage CertEnhKeyUsage
   1104 }
   1105 
   1106 type CertEnhKeyUsage struct {
   1107 	Length           uint32
   1108 	UsageIdentifiers **byte
   1109 }
   1110 
   1111 type 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 
   1121 type CertChainPolicyPara struct {
   1122 	Size            uint32
   1123 	Flags           uint32
   1124 	ExtraPolicyPara Pointer
   1125 }
   1126 
   1127 type SSLExtraCertChainPolicyPara struct {
   1128 	Size       uint32
   1129 	AuthType   uint32
   1130 	Checks     uint32
   1131 	ServerName *uint16
   1132 }
   1133 
   1134 type CertChainPolicyStatus struct {
   1135 	Size              uint32
   1136 	Error             uint32
   1137 	ChainIndex        uint32
   1138 	ElementIndex      uint32
   1139 	ExtraPolicyStatus Pointer
   1140 }
   1141 
   1142 const (
   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 
   1166 const (
   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 
   1184 const (
   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 
   1206 type 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 
   1217 const (
   1218 	AI_PASSIVE     = 1
   1219 	AI_CANONNAME   = 2
   1220 	AI_NUMERICHOST = 4
   1221 )
   1222 
   1223 type GUID struct {
   1224 	Data1 uint32
   1225 	Data2 uint16
   1226 	Data3 uint16
   1227 	Data4 [8]byte
   1228 }
   1229 
   1230 var WSAID_CONNECTEX = GUID{
   1231 	0x25a207b9,
   1232 	0xddf3,
   1233 	0x4660,
   1234 	[8]byte{0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e},
   1235 }
   1236 
   1237 var WSAID_WSASENDMSG = GUID{
   1238 	0xa441e712,
   1239 	0x754f,
   1240 	0x43ca,
   1241 	[8]byte{0x84, 0xa7, 0x0d, 0xee, 0x44, 0xcf, 0x60, 0x6d},
   1242 }
   1243 
   1244 var WSAID_WSARECVMSG = GUID{
   1245 	0xf689d7c8,
   1246 	0x6f1f,
   1247 	0x436b,
   1248 	[8]byte{0x8a, 0x53, 0xe5, 0x4f, 0xe3, 0x51, 0xc3, 0x22},
   1249 }
   1250 
   1251 const (
   1252 	FILE_SKIP_COMPLETION_PORT_ON_SUCCESS = 1
   1253 	FILE_SKIP_SET_EVENT_ON_HANDLE        = 2
   1254 )
   1255 
   1256 const (
   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 
   1289 type 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 
   1312 type WSAProtocolChain struct {
   1313 	ChainLen     int32
   1314 	ChainEntries [MAX_PROTOCOL_CHAIN]uint32
   1315 }
   1316 
   1317 type TCPKeepalive struct {
   1318 	OnOff    uint32
   1319 	Time     uint32
   1320 	Interval uint32
   1321 }
   1322 
   1323 type symbolicLinkReparseBuffer struct {
   1324 	SubstituteNameOffset uint16
   1325 	SubstituteNameLength uint16
   1326 	PrintNameOffset      uint16
   1327 	PrintNameLength      uint16
   1328 	Flags                uint32
   1329 	PathBuffer           [1]uint16
   1330 }
   1331 
   1332 type mountPointReparseBuffer struct {
   1333 	SubstituteNameOffset uint16
   1334 	SubstituteNameLength uint16
   1335 	PrintNameOffset      uint16
   1336 	PrintNameLength      uint16
   1337 	PathBuffer           [1]uint16
   1338 }
   1339 
   1340 type reparseDataBuffer struct {
   1341 	ReparseTag        uint32
   1342 	ReparseDataLength uint16
   1343 	Reserved          uint16
   1344 
   1345 	// GenericReparseBuffer
   1346 	reparseBuffer byte
   1347 }
   1348 
   1349 const (
   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 
   1357 const (
   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()
   1370 const (
   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 
   1404 const (
   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 
   1413 const GAA_FLAG_INCLUDE_PREFIX = 0x00000010
   1414 
   1415 const (
   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 
   1427 type 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.
   1433 func (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 
   1442 type 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 
   1456 type IpAdapterAnycastAddress struct {
   1457 	Length  uint32
   1458 	Flags   uint32
   1459 	Next    *IpAdapterAnycastAddress
   1460 	Address SocketAddress
   1461 }
   1462 
   1463 type IpAdapterMulticastAddress struct {
   1464 	Length  uint32
   1465 	Flags   uint32
   1466 	Next    *IpAdapterMulticastAddress
   1467 	Address SocketAddress
   1468 }
   1469 
   1470 type IpAdapterDnsServerAdapter struct {
   1471 	Length   uint32
   1472 	Reserved uint32
   1473 	Next     *IpAdapterDnsServerAdapter
   1474 	Address  SocketAddress
   1475 }
   1476 
   1477 type IpAdapterPrefix struct {
   1478 	Length       uint32
   1479 	Flags        uint32
   1480 	Next         *IpAdapterPrefix
   1481 	Address      SocketAddress
   1482 	PrefixLength uint32
   1483 }
   1484 
   1485 type 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 
   1509 const (
   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 
   1522 const (
   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 
   1541 type Coord struct {
   1542 	X int16
   1543 	Y int16
   1544 }
   1545 
   1546 type 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 
   1558 type ConsoleScreenBufferInfo struct {
   1559 	Size              Coord
   1560 	CursorPosition    Coord
   1561 	Attributes        uint16
   1562 	Window            SmallRect
   1563 	MaximumWindowSize Coord
   1564 }
   1565 
   1566 const UNIX_PATH_MAX = 108 // defined in afunix.h
   1567 
   1568 const (
   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 
   1587 type IO_COUNTERS struct {
   1588 	ReadOperationCount  uint64
   1589 	WriteOperationCount uint64
   1590 	OtherOperationCount uint64
   1591 	ReadTransferCount   uint64
   1592 	WriteTransferCount  uint64
   1593 	OtherTransferCount  uint64
   1594 }
   1595 
   1596 type JOBOBJECT_EXTENDED_LIMIT_INFORMATION struct {
   1597 	BasicLimitInformation JOBOBJECT_BASIC_LIMIT_INFORMATION
   1598 	IoInfo                IO_COUNTERS
   1599 	ProcessMemoryLimit    uintptr
   1600 	JobMemoryLimit        uintptr
   1601 	PeakProcessMemoryUsed uintptr
   1602 	PeakJobMemoryUsed     uintptr
   1603 }
   1604 
   1605 const (
   1606 	// UIRestrictionsClass
   1607 	JOB_OBJECT_UILIMIT_DESKTOP          = 0x00000040
   1608 	JOB_OBJECT_UILIMIT_DISPLAYSETTINGS  = 0x00000010
   1609 	JOB_OBJECT_UILIMIT_EXITWINDOWS      = 0x00000080
   1610 	JOB_OBJECT_UILIMIT_GLOBALATOMS      = 0x00000020
   1611 	JOB_OBJECT_UILIMIT_HANDLES          = 0x00000001
   1612 	JOB_OBJECT_UILIMIT_READCLIPBOARD    = 0x00000002
   1613 	JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS = 0x00000008
   1614 	JOB_OBJECT_UILIMIT_WRITECLIPBOARD   = 0x00000004
   1615 )
   1616 
   1617 type JOBOBJECT_BASIC_UI_RESTRICTIONS struct {
   1618 	UIRestrictionsClass uint32
   1619 }
   1620 
   1621 const (
   1622 	// JobObjectInformationClass
   1623 	JobObjectAssociateCompletionPortInformation = 7
   1624 	JobObjectBasicLimitInformation              = 2
   1625 	JobObjectBasicUIRestrictions                = 4
   1626 	JobObjectCpuRateControlInformation          = 15
   1627 	JobObjectEndOfJobTimeInformation            = 6
   1628 	JobObjectExtendedLimitInformation           = 9
   1629 	JobObjectGroupInformation                   = 11
   1630 	JobObjectGroupInformationEx                 = 14
   1631 	JobObjectLimitViolationInformation2         = 35
   1632 	JobObjectNetRateControlInformation          = 32
   1633 	JobObjectNotificationLimitInformation       = 12
   1634 	JobObjectNotificationLimitInformation2      = 34
   1635 	JobObjectSecurityLimitInformation           = 5
   1636 )
   1637 
   1638 const (
   1639 	KF_FLAG_DEFAULT                          = 0x00000000
   1640 	KF_FLAG_FORCE_APP_DATA_REDIRECTION       = 0x00080000
   1641 	KF_FLAG_RETURN_FILTER_REDIRECTION_TARGET = 0x00040000
   1642 	KF_FLAG_FORCE_PACKAGE_REDIRECTION        = 0x00020000
   1643 	KF_FLAG_NO_PACKAGE_REDIRECTION           = 0x00010000
   1644 	KF_FLAG_FORCE_APPCONTAINER_REDIRECTION   = 0x00020000
   1645 	KF_FLAG_NO_APPCONTAINER_REDIRECTION      = 0x00010000
   1646 	KF_FLAG_CREATE                           = 0x00008000
   1647 	KF_FLAG_DONT_VERIFY                      = 0x00004000
   1648 	KF_FLAG_DONT_UNEXPAND                    = 0x00002000
   1649 	KF_FLAG_NO_ALIAS                         = 0x00001000
   1650 	KF_FLAG_INIT                             = 0x00000800
   1651 	KF_FLAG_DEFAULT_PATH                     = 0x00000400
   1652 	KF_FLAG_NOT_PARENT_RELATIVE              = 0x00000200
   1653 	KF_FLAG_SIMPLE_IDLIST                    = 0x00000100
   1654 	KF_FLAG_ALIAS_ONLY                       = 0x80000000
   1655 )
   1656 
   1657 type OsVersionInfoEx struct {
   1658 	osVersionInfoSize uint32
   1659 	MajorVersion      uint32
   1660 	MinorVersion      uint32
   1661 	BuildNumber       uint32
   1662 	PlatformId        uint32
   1663 	CsdVersion        [128]uint16
   1664 	ServicePackMajor  uint16
   1665 	ServicePackMinor  uint16
   1666 	SuiteMask         uint16
   1667 	ProductType       byte
   1668 	_                 byte
   1669 }
   1670 
   1671 const (
   1672 	EWX_LOGOFF          = 0x00000000
   1673 	EWX_SHUTDOWN        = 0x00000001
   1674 	EWX_REBOOT          = 0x00000002
   1675 	EWX_FORCE           = 0x00000004
   1676 	EWX_POWEROFF        = 0x00000008
   1677 	EWX_FORCEIFHUNG     = 0x00000010
   1678 	EWX_QUICKRESOLVE    = 0x00000020
   1679 	EWX_RESTARTAPPS     = 0x00000040
   1680 	EWX_HYBRID_SHUTDOWN = 0x00400000
   1681 	EWX_BOOTOPTIONS     = 0x01000000
   1682 
   1683 	SHTDN_REASON_FLAG_COMMENT_REQUIRED          = 0x01000000
   1684 	SHTDN_REASON_FLAG_DIRTY_PROBLEM_ID_REQUIRED = 0x02000000
   1685 	SHTDN_REASON_FLAG_CLEAN_UI                  = 0x04000000
   1686 	SHTDN_REASON_FLAG_DIRTY_UI                  = 0x08000000
   1687 	SHTDN_REASON_FLAG_USER_DEFINED              = 0x40000000
   1688 	SHTDN_REASON_FLAG_PLANNED                   = 0x80000000
   1689 	SHTDN_REASON_MAJOR_OTHER                    = 0x00000000
   1690 	SHTDN_REASON_MAJOR_NONE                     = 0x00000000
   1691 	SHTDN_REASON_MAJOR_HARDWARE                 = 0x00010000
   1692 	SHTDN_REASON_MAJOR_OPERATINGSYSTEM          = 0x00020000
   1693 	SHTDN_REASON_MAJOR_SOFTWARE                 = 0x00030000
   1694 	SHTDN_REASON_MAJOR_APPLICATION              = 0x00040000
   1695 	SHTDN_REASON_MAJOR_SYSTEM                   = 0x00050000
   1696 	SHTDN_REASON_MAJOR_POWER                    = 0x00060000
   1697 	SHTDN_REASON_MAJOR_LEGACY_API               = 0x00070000
   1698 	SHTDN_REASON_MINOR_OTHER                    = 0x00000000
   1699 	SHTDN_REASON_MINOR_NONE                     = 0x000000ff
   1700 	SHTDN_REASON_MINOR_MAINTENANCE              = 0x00000001
   1701 	SHTDN_REASON_MINOR_INSTALLATION             = 0x00000002
   1702 	SHTDN_REASON_MINOR_UPGRADE                  = 0x00000003
   1703 	SHTDN_REASON_MINOR_RECONFIG                 = 0x00000004
   1704 	SHTDN_REASON_MINOR_HUNG                     = 0x00000005
   1705 	SHTDN_REASON_MINOR_UNSTABLE                 = 0x00000006
   1706 	SHTDN_REASON_MINOR_DISK                     = 0x00000007
   1707 	SHTDN_REASON_MINOR_PROCESSOR                = 0x00000008
   1708 	SHTDN_REASON_MINOR_NETWORKCARD              = 0x00000009
   1709 	SHTDN_REASON_MINOR_POWER_SUPPLY             = 0x0000000a
   1710 	SHTDN_REASON_MINOR_CORDUNPLUGGED            = 0x0000000b
   1711 	SHTDN_REASON_MINOR_ENVIRONMENT              = 0x0000000c
   1712 	SHTDN_REASON_MINOR_HARDWARE_DRIVER          = 0x0000000d
   1713 	SHTDN_REASON_MINOR_OTHERDRIVER              = 0x0000000e
   1714 	SHTDN_REASON_MINOR_BLUESCREEN               = 0x0000000F
   1715 	SHTDN_REASON_MINOR_SERVICEPACK              = 0x00000010
   1716 	SHTDN_REASON_MINOR_HOTFIX                   = 0x00000011
   1717 	SHTDN_REASON_MINOR_SECURITYFIX              = 0x00000012
   1718 	SHTDN_REASON_MINOR_SECURITY                 = 0x00000013
   1719 	SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY     = 0x00000014
   1720 	SHTDN_REASON_MINOR_WMI                      = 0x00000015
   1721 	SHTDN_REASON_MINOR_SERVICEPACK_UNINSTALL    = 0x00000016
   1722 	SHTDN_REASON_MINOR_HOTFIX_UNINSTALL         = 0x00000017
   1723 	SHTDN_REASON_MINOR_SECURITYFIX_UNINSTALL    = 0x00000018
   1724 	SHTDN_REASON_MINOR_MMC                      = 0x00000019
   1725 	SHTDN_REASON_MINOR_SYSTEMRESTORE            = 0x0000001a
   1726 	SHTDN_REASON_MINOR_TERMSRV                  = 0x00000020
   1727 	SHTDN_REASON_MINOR_DC_PROMOTION             = 0x00000021
   1728 	SHTDN_REASON_MINOR_DC_DEMOTION              = 0x00000022
   1729 	SHTDN_REASON_UNKNOWN                        = SHTDN_REASON_MINOR_NONE
   1730 	SHTDN_REASON_LEGACY_API                     = SHTDN_REASON_MAJOR_LEGACY_API | SHTDN_REASON_FLAG_PLANNED
   1731 	SHTDN_REASON_VALID_BIT_MASK                 = 0xc0ffffff
   1732 
   1733 	SHUTDOWN_NORETRY = 0x1
   1734 )
   1735 
   1736 // Flags used for GetModuleHandleEx
   1737 const (
   1738 	GET_MODULE_HANDLE_EX_FLAG_PIN                = 1
   1739 	GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT = 2
   1740 	GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS       = 4
   1741 )
   1742 
   1743 // MUI function flag values
   1744 const (
   1745 	MUI_LANGUAGE_ID                    = 0x4
   1746 	MUI_LANGUAGE_NAME                  = 0x8
   1747 	MUI_MERGE_SYSTEM_FALLBACK          = 0x10
   1748 	MUI_MERGE_USER_FALLBACK            = 0x20
   1749 	MUI_UI_FALLBACK                    = MUI_MERGE_SYSTEM_FALLBACK | MUI_MERGE_USER_FALLBACK
   1750 	MUI_THREAD_LANGUAGES               = 0x40
   1751 	MUI_CONSOLE_FILTER                 = 0x100
   1752 	MUI_COMPLEX_SCRIPT_FILTER          = 0x200
   1753 	MUI_RESET_FILTERS                  = 0x001
   1754 	MUI_USER_PREFERRED_UI_LANGUAGES    = 0x10
   1755 	MUI_USE_INSTALLED_LANGUAGES        = 0x20
   1756 	MUI_USE_SEARCH_ALL_LANGUAGES       = 0x40
   1757 	MUI_LANG_NEUTRAL_PE_FILE           = 0x100
   1758 	MUI_NON_LANG_NEUTRAL_FILE          = 0x200
   1759 	MUI_MACHINE_LANGUAGE_SETTINGS      = 0x400
   1760 	MUI_FILETYPE_NOT_LANGUAGE_NEUTRAL  = 0x001
   1761 	MUI_FILETYPE_LANGUAGE_NEUTRAL_MAIN = 0x002
   1762 	MUI_FILETYPE_LANGUAGE_NEUTRAL_MUI  = 0x004
   1763 	MUI_QUERY_TYPE                     = 0x001
   1764 	MUI_QUERY_CHECKSUM                 = 0x002
   1765 	MUI_QUERY_LANGUAGE_NAME            = 0x004
   1766 	MUI_QUERY_RESOURCE_TYPES           = 0x008
   1767 	MUI_FILEINFO_VERSION               = 0x001
   1768 
   1769 	MUI_FULL_LANGUAGE      = 0x01
   1770 	MUI_PARTIAL_LANGUAGE   = 0x02
   1771 	MUI_LIP_LANGUAGE       = 0x04
   1772 	MUI_LANGUAGE_INSTALLED = 0x20
   1773 	MUI_LANGUAGE_LICENSED  = 0x40
   1774 )