zorldo

Goofing around with Ebiten
git clone git://bsandro.tech/zorldo
Log | Files | Refs | README

types_windows.go (86366B)


      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 // NTStatus corresponds with NTSTATUS, error values returned by ntdll.dll and
     14 // other native functions.
     15 type NTStatus uint32
     16 
     17 const (
     18 	// Invented values to support what package os expects.
     19 	O_RDONLY   = 0x00000
     20 	O_WRONLY   = 0x00001
     21 	O_RDWR     = 0x00002
     22 	O_CREAT    = 0x00040
     23 	O_EXCL     = 0x00080
     24 	O_NOCTTY   = 0x00100
     25 	O_TRUNC    = 0x00200
     26 	O_NONBLOCK = 0x00800
     27 	O_APPEND   = 0x00400
     28 	O_SYNC     = 0x01000
     29 	O_ASYNC    = 0x02000
     30 	O_CLOEXEC  = 0x80000
     31 )
     32 
     33 const (
     34 	// More invented values for signals
     35 	SIGHUP  = Signal(0x1)
     36 	SIGINT  = Signal(0x2)
     37 	SIGQUIT = Signal(0x3)
     38 	SIGILL  = Signal(0x4)
     39 	SIGTRAP = Signal(0x5)
     40 	SIGABRT = Signal(0x6)
     41 	SIGBUS  = Signal(0x7)
     42 	SIGFPE  = Signal(0x8)
     43 	SIGKILL = Signal(0x9)
     44 	SIGSEGV = Signal(0xb)
     45 	SIGPIPE = Signal(0xd)
     46 	SIGALRM = Signal(0xe)
     47 	SIGTERM = Signal(0xf)
     48 )
     49 
     50 var signals = [...]string{
     51 	1:  "hangup",
     52 	2:  "interrupt",
     53 	3:  "quit",
     54 	4:  "illegal instruction",
     55 	5:  "trace/breakpoint trap",
     56 	6:  "aborted",
     57 	7:  "bus error",
     58 	8:  "floating point exception",
     59 	9:  "killed",
     60 	10: "user defined signal 1",
     61 	11: "segmentation fault",
     62 	12: "user defined signal 2",
     63 	13: "broken pipe",
     64 	14: "alarm clock",
     65 	15: "terminated",
     66 }
     67 
     68 const (
     69 	FILE_LIST_DIRECTORY   = 0x00000001
     70 	FILE_APPEND_DATA      = 0x00000004
     71 	FILE_WRITE_ATTRIBUTES = 0x00000100
     72 
     73 	FILE_SHARE_READ   = 0x00000001
     74 	FILE_SHARE_WRITE  = 0x00000002
     75 	FILE_SHARE_DELETE = 0x00000004
     76 
     77 	FILE_ATTRIBUTE_READONLY              = 0x00000001
     78 	FILE_ATTRIBUTE_HIDDEN                = 0x00000002
     79 	FILE_ATTRIBUTE_SYSTEM                = 0x00000004
     80 	FILE_ATTRIBUTE_DIRECTORY             = 0x00000010
     81 	FILE_ATTRIBUTE_ARCHIVE               = 0x00000020
     82 	FILE_ATTRIBUTE_DEVICE                = 0x00000040
     83 	FILE_ATTRIBUTE_NORMAL                = 0x00000080
     84 	FILE_ATTRIBUTE_TEMPORARY             = 0x00000100
     85 	FILE_ATTRIBUTE_SPARSE_FILE           = 0x00000200
     86 	FILE_ATTRIBUTE_REPARSE_POINT         = 0x00000400
     87 	FILE_ATTRIBUTE_COMPRESSED            = 0x00000800
     88 	FILE_ATTRIBUTE_OFFLINE               = 0x00001000
     89 	FILE_ATTRIBUTE_NOT_CONTENT_INDEXED   = 0x00002000
     90 	FILE_ATTRIBUTE_ENCRYPTED             = 0x00004000
     91 	FILE_ATTRIBUTE_INTEGRITY_STREAM      = 0x00008000
     92 	FILE_ATTRIBUTE_VIRTUAL               = 0x00010000
     93 	FILE_ATTRIBUTE_NO_SCRUB_DATA         = 0x00020000
     94 	FILE_ATTRIBUTE_RECALL_ON_OPEN        = 0x00040000
     95 	FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS = 0x00400000
     96 
     97 	INVALID_FILE_ATTRIBUTES = 0xffffffff
     98 
     99 	CREATE_NEW        = 1
    100 	CREATE_ALWAYS     = 2
    101 	OPEN_EXISTING     = 3
    102 	OPEN_ALWAYS       = 4
    103 	TRUNCATE_EXISTING = 5
    104 
    105 	FILE_FLAG_OPEN_REQUIRING_OPLOCK = 0x00040000
    106 	FILE_FLAG_FIRST_PIPE_INSTANCE   = 0x00080000
    107 	FILE_FLAG_OPEN_NO_RECALL        = 0x00100000
    108 	FILE_FLAG_OPEN_REPARSE_POINT    = 0x00200000
    109 	FILE_FLAG_SESSION_AWARE         = 0x00800000
    110 	FILE_FLAG_POSIX_SEMANTICS       = 0x01000000
    111 	FILE_FLAG_BACKUP_SEMANTICS      = 0x02000000
    112 	FILE_FLAG_DELETE_ON_CLOSE       = 0x04000000
    113 	FILE_FLAG_SEQUENTIAL_SCAN       = 0x08000000
    114 	FILE_FLAG_RANDOM_ACCESS         = 0x10000000
    115 	FILE_FLAG_NO_BUFFERING          = 0x20000000
    116 	FILE_FLAG_OVERLAPPED            = 0x40000000
    117 	FILE_FLAG_WRITE_THROUGH         = 0x80000000
    118 
    119 	HANDLE_FLAG_INHERIT    = 0x00000001
    120 	STARTF_USESTDHANDLES   = 0x00000100
    121 	STARTF_USESHOWWINDOW   = 0x00000001
    122 	DUPLICATE_CLOSE_SOURCE = 0x00000001
    123 	DUPLICATE_SAME_ACCESS  = 0x00000002
    124 
    125 	STD_INPUT_HANDLE  = -10 & (1<<32 - 1)
    126 	STD_OUTPUT_HANDLE = -11 & (1<<32 - 1)
    127 	STD_ERROR_HANDLE  = -12 & (1<<32 - 1)
    128 
    129 	FILE_BEGIN   = 0
    130 	FILE_CURRENT = 1
    131 	FILE_END     = 2
    132 
    133 	LANG_ENGLISH       = 0x09
    134 	SUBLANG_ENGLISH_US = 0x01
    135 
    136 	FORMAT_MESSAGE_ALLOCATE_BUFFER = 256
    137 	FORMAT_MESSAGE_IGNORE_INSERTS  = 512
    138 	FORMAT_MESSAGE_FROM_STRING     = 1024
    139 	FORMAT_MESSAGE_FROM_HMODULE    = 2048
    140 	FORMAT_MESSAGE_FROM_SYSTEM     = 4096
    141 	FORMAT_MESSAGE_ARGUMENT_ARRAY  = 8192
    142 	FORMAT_MESSAGE_MAX_WIDTH_MASK  = 255
    143 
    144 	MAX_PATH      = 260
    145 	MAX_LONG_PATH = 32768
    146 
    147 	MAX_COMPUTERNAME_LENGTH = 15
    148 
    149 	TIME_ZONE_ID_UNKNOWN  = 0
    150 	TIME_ZONE_ID_STANDARD = 1
    151 
    152 	TIME_ZONE_ID_DAYLIGHT = 2
    153 	IGNORE                = 0
    154 	INFINITE              = 0xffffffff
    155 
    156 	WAIT_ABANDONED = 0x00000080
    157 	WAIT_OBJECT_0  = 0x00000000
    158 	WAIT_FAILED    = 0xFFFFFFFF
    159 
    160 	// Access rights for process.
    161 	PROCESS_CREATE_PROCESS            = 0x0080
    162 	PROCESS_CREATE_THREAD             = 0x0002
    163 	PROCESS_DUP_HANDLE                = 0x0040
    164 	PROCESS_QUERY_INFORMATION         = 0x0400
    165 	PROCESS_QUERY_LIMITED_INFORMATION = 0x1000
    166 	PROCESS_SET_INFORMATION           = 0x0200
    167 	PROCESS_SET_QUOTA                 = 0x0100
    168 	PROCESS_SUSPEND_RESUME            = 0x0800
    169 	PROCESS_TERMINATE                 = 0x0001
    170 	PROCESS_VM_OPERATION              = 0x0008
    171 	PROCESS_VM_READ                   = 0x0010
    172 	PROCESS_VM_WRITE                  = 0x0020
    173 
    174 	// Access rights for thread.
    175 	THREAD_DIRECT_IMPERSONATION      = 0x0200
    176 	THREAD_GET_CONTEXT               = 0x0008
    177 	THREAD_IMPERSONATE               = 0x0100
    178 	THREAD_QUERY_INFORMATION         = 0x0040
    179 	THREAD_QUERY_LIMITED_INFORMATION = 0x0800
    180 	THREAD_SET_CONTEXT               = 0x0010
    181 	THREAD_SET_INFORMATION           = 0x0020
    182 	THREAD_SET_LIMITED_INFORMATION   = 0x0400
    183 	THREAD_SET_THREAD_TOKEN          = 0x0080
    184 	THREAD_SUSPEND_RESUME            = 0x0002
    185 	THREAD_TERMINATE                 = 0x0001
    186 
    187 	FILE_MAP_COPY    = 0x01
    188 	FILE_MAP_WRITE   = 0x02
    189 	FILE_MAP_READ    = 0x04
    190 	FILE_MAP_EXECUTE = 0x20
    191 
    192 	CTRL_C_EVENT        = 0
    193 	CTRL_BREAK_EVENT    = 1
    194 	CTRL_CLOSE_EVENT    = 2
    195 	CTRL_LOGOFF_EVENT   = 5
    196 	CTRL_SHUTDOWN_EVENT = 6
    197 
    198 	// Windows reserves errors >= 1<<29 for application use.
    199 	APPLICATION_ERROR = 1 << 29
    200 )
    201 
    202 const (
    203 	// Process creation flags.
    204 	CREATE_BREAKAWAY_FROM_JOB        = 0x01000000
    205 	CREATE_DEFAULT_ERROR_MODE        = 0x04000000
    206 	CREATE_NEW_CONSOLE               = 0x00000010
    207 	CREATE_NEW_PROCESS_GROUP         = 0x00000200
    208 	CREATE_NO_WINDOW                 = 0x08000000
    209 	CREATE_PROTECTED_PROCESS         = 0x00040000
    210 	CREATE_PRESERVE_CODE_AUTHZ_LEVEL = 0x02000000
    211 	CREATE_SEPARATE_WOW_VDM          = 0x00000800
    212 	CREATE_SHARED_WOW_VDM            = 0x00001000
    213 	CREATE_SUSPENDED                 = 0x00000004
    214 	CREATE_UNICODE_ENVIRONMENT       = 0x00000400
    215 	DEBUG_ONLY_THIS_PROCESS          = 0x00000002
    216 	DEBUG_PROCESS                    = 0x00000001
    217 	DETACHED_PROCESS                 = 0x00000008
    218 	EXTENDED_STARTUPINFO_PRESENT     = 0x00080000
    219 	INHERIT_PARENT_AFFINITY          = 0x00010000
    220 )
    221 
    222 const (
    223 	// attributes for ProcThreadAttributeList
    224 	PROC_THREAD_ATTRIBUTE_PARENT_PROCESS    = 0x00020000
    225 	PROC_THREAD_ATTRIBUTE_HANDLE_LIST       = 0x00020002
    226 	PROC_THREAD_ATTRIBUTE_GROUP_AFFINITY    = 0x00030003
    227 	PROC_THREAD_ATTRIBUTE_PREFERRED_NODE    = 0x00020004
    228 	PROC_THREAD_ATTRIBUTE_IDEAL_PROCESSOR   = 0x00030005
    229 	PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY = 0x00020007
    230 	PROC_THREAD_ATTRIBUTE_UMS_THREAD        = 0x00030006
    231 	PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL  = 0x0002000b
    232 )
    233 
    234 const (
    235 	// flags for CreateToolhelp32Snapshot
    236 	TH32CS_SNAPHEAPLIST = 0x01
    237 	TH32CS_SNAPPROCESS  = 0x02
    238 	TH32CS_SNAPTHREAD   = 0x04
    239 	TH32CS_SNAPMODULE   = 0x08
    240 	TH32CS_SNAPMODULE32 = 0x10
    241 	TH32CS_SNAPALL      = TH32CS_SNAPHEAPLIST | TH32CS_SNAPMODULE | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD
    242 	TH32CS_INHERIT      = 0x80000000
    243 )
    244 
    245 const (
    246 	// filters for ReadDirectoryChangesW and FindFirstChangeNotificationW
    247 	FILE_NOTIFY_CHANGE_FILE_NAME   = 0x001
    248 	FILE_NOTIFY_CHANGE_DIR_NAME    = 0x002
    249 	FILE_NOTIFY_CHANGE_ATTRIBUTES  = 0x004
    250 	FILE_NOTIFY_CHANGE_SIZE        = 0x008
    251 	FILE_NOTIFY_CHANGE_LAST_WRITE  = 0x010
    252 	FILE_NOTIFY_CHANGE_LAST_ACCESS = 0x020
    253 	FILE_NOTIFY_CHANGE_CREATION    = 0x040
    254 	FILE_NOTIFY_CHANGE_SECURITY    = 0x100
    255 )
    256 
    257 const (
    258 	// do not reorder
    259 	FILE_ACTION_ADDED = iota + 1
    260 	FILE_ACTION_REMOVED
    261 	FILE_ACTION_MODIFIED
    262 	FILE_ACTION_RENAMED_OLD_NAME
    263 	FILE_ACTION_RENAMED_NEW_NAME
    264 )
    265 
    266 const (
    267 	// wincrypt.h
    268 	/* certenrolld_begin -- PROV_RSA_*/
    269 	PROV_RSA_FULL      = 1
    270 	PROV_RSA_SIG       = 2
    271 	PROV_DSS           = 3
    272 	PROV_FORTEZZA      = 4
    273 	PROV_MS_EXCHANGE   = 5
    274 	PROV_SSL           = 6
    275 	PROV_RSA_SCHANNEL  = 12
    276 	PROV_DSS_DH        = 13
    277 	PROV_EC_ECDSA_SIG  = 14
    278 	PROV_EC_ECNRA_SIG  = 15
    279 	PROV_EC_ECDSA_FULL = 16
    280 	PROV_EC_ECNRA_FULL = 17
    281 	PROV_DH_SCHANNEL   = 18
    282 	PROV_SPYRUS_LYNKS  = 20
    283 	PROV_RNG           = 21
    284 	PROV_INTEL_SEC     = 22
    285 	PROV_REPLACE_OWF   = 23
    286 	PROV_RSA_AES       = 24
    287 
    288 	/* dwFlags definitions for CryptAcquireContext */
    289 	CRYPT_VERIFYCONTEXT              = 0xF0000000
    290 	CRYPT_NEWKEYSET                  = 0x00000008
    291 	CRYPT_DELETEKEYSET               = 0x00000010
    292 	CRYPT_MACHINE_KEYSET             = 0x00000020
    293 	CRYPT_SILENT                     = 0x00000040
    294 	CRYPT_DEFAULT_CONTAINER_OPTIONAL = 0x00000080
    295 
    296 	/* Flags for PFXImportCertStore */
    297 	CRYPT_EXPORTABLE                   = 0x00000001
    298 	CRYPT_USER_PROTECTED               = 0x00000002
    299 	CRYPT_USER_KEYSET                  = 0x00001000
    300 	PKCS12_PREFER_CNG_KSP              = 0x00000100
    301 	PKCS12_ALWAYS_CNG_KSP              = 0x00000200
    302 	PKCS12_ALLOW_OVERWRITE_KEY         = 0x00004000
    303 	PKCS12_NO_PERSIST_KEY              = 0x00008000
    304 	PKCS12_INCLUDE_EXTENDED_PROPERTIES = 0x00000010
    305 
    306 	/* Flags for CryptAcquireCertificatePrivateKey */
    307 	CRYPT_ACQUIRE_CACHE_FLAG             = 0x00000001
    308 	CRYPT_ACQUIRE_USE_PROV_INFO_FLAG     = 0x00000002
    309 	CRYPT_ACQUIRE_COMPARE_KEY_FLAG       = 0x00000004
    310 	CRYPT_ACQUIRE_NO_HEALING             = 0x00000008
    311 	CRYPT_ACQUIRE_SILENT_FLAG            = 0x00000040
    312 	CRYPT_ACQUIRE_WINDOW_HANDLE_FLAG     = 0x00000080
    313 	CRYPT_ACQUIRE_NCRYPT_KEY_FLAGS_MASK  = 0x00070000
    314 	CRYPT_ACQUIRE_ALLOW_NCRYPT_KEY_FLAG  = 0x00010000
    315 	CRYPT_ACQUIRE_PREFER_NCRYPT_KEY_FLAG = 0x00020000
    316 	CRYPT_ACQUIRE_ONLY_NCRYPT_KEY_FLAG   = 0x00040000
    317 
    318 	/* pdwKeySpec for CryptAcquireCertificatePrivateKey */
    319 	AT_KEYEXCHANGE       = 1
    320 	AT_SIGNATURE         = 2
    321 	CERT_NCRYPT_KEY_SPEC = 0xFFFFFFFF
    322 
    323 	/* Default usage match type is AND with value zero */
    324 	USAGE_MATCH_TYPE_AND = 0
    325 	USAGE_MATCH_TYPE_OR  = 1
    326 
    327 	/* msgAndCertEncodingType values for CertOpenStore function */
    328 	X509_ASN_ENCODING   = 0x00000001
    329 	PKCS_7_ASN_ENCODING = 0x00010000
    330 
    331 	/* storeProvider values for CertOpenStore function */
    332 	CERT_STORE_PROV_MSG               = 1
    333 	CERT_STORE_PROV_MEMORY            = 2
    334 	CERT_STORE_PROV_FILE              = 3
    335 	CERT_STORE_PROV_REG               = 4
    336 	CERT_STORE_PROV_PKCS7             = 5
    337 	CERT_STORE_PROV_SERIALIZED        = 6
    338 	CERT_STORE_PROV_FILENAME_A        = 7
    339 	CERT_STORE_PROV_FILENAME_W        = 8
    340 	CERT_STORE_PROV_FILENAME          = CERT_STORE_PROV_FILENAME_W
    341 	CERT_STORE_PROV_SYSTEM_A          = 9
    342 	CERT_STORE_PROV_SYSTEM_W          = 10
    343 	CERT_STORE_PROV_SYSTEM            = CERT_STORE_PROV_SYSTEM_W
    344 	CERT_STORE_PROV_COLLECTION        = 11
    345 	CERT_STORE_PROV_SYSTEM_REGISTRY_A = 12
    346 	CERT_STORE_PROV_SYSTEM_REGISTRY_W = 13
    347 	CERT_STORE_PROV_SYSTEM_REGISTRY   = CERT_STORE_PROV_SYSTEM_REGISTRY_W
    348 	CERT_STORE_PROV_PHYSICAL_W        = 14
    349 	CERT_STORE_PROV_PHYSICAL          = CERT_STORE_PROV_PHYSICAL_W
    350 	CERT_STORE_PROV_SMART_CARD_W      = 15
    351 	CERT_STORE_PROV_SMART_CARD        = CERT_STORE_PROV_SMART_CARD_W
    352 	CERT_STORE_PROV_LDAP_W            = 16
    353 	CERT_STORE_PROV_LDAP              = CERT_STORE_PROV_LDAP_W
    354 	CERT_STORE_PROV_PKCS12            = 17
    355 
    356 	/* store characteristics (low WORD of flag) for CertOpenStore function */
    357 	CERT_STORE_NO_CRYPT_RELEASE_FLAG            = 0x00000001
    358 	CERT_STORE_SET_LOCALIZED_NAME_FLAG          = 0x00000002
    359 	CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG = 0x00000004
    360 	CERT_STORE_DELETE_FLAG                      = 0x00000010
    361 	CERT_STORE_UNSAFE_PHYSICAL_FLAG             = 0x00000020
    362 	CERT_STORE_SHARE_STORE_FLAG                 = 0x00000040
    363 	CERT_STORE_SHARE_CONTEXT_FLAG               = 0x00000080
    364 	CERT_STORE_MANIFOLD_FLAG                    = 0x00000100
    365 	CERT_STORE_ENUM_ARCHIVED_FLAG               = 0x00000200
    366 	CERT_STORE_UPDATE_KEYID_FLAG                = 0x00000400
    367 	CERT_STORE_BACKUP_RESTORE_FLAG              = 0x00000800
    368 	CERT_STORE_MAXIMUM_ALLOWED_FLAG             = 0x00001000
    369 	CERT_STORE_CREATE_NEW_FLAG                  = 0x00002000
    370 	CERT_STORE_OPEN_EXISTING_FLAG               = 0x00004000
    371 	CERT_STORE_READONLY_FLAG                    = 0x00008000
    372 
    373 	/* store locations (high WORD of flag) for CertOpenStore function */
    374 	CERT_SYSTEM_STORE_CURRENT_USER               = 0x00010000
    375 	CERT_SYSTEM_STORE_LOCAL_MACHINE              = 0x00020000
    376 	CERT_SYSTEM_STORE_CURRENT_SERVICE            = 0x00040000
    377 	CERT_SYSTEM_STORE_SERVICES                   = 0x00050000
    378 	CERT_SYSTEM_STORE_USERS                      = 0x00060000
    379 	CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY  = 0x00070000
    380 	CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY = 0x00080000
    381 	CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE   = 0x00090000
    382 	CERT_SYSTEM_STORE_UNPROTECTED_FLAG           = 0x40000000
    383 	CERT_SYSTEM_STORE_RELOCATE_FLAG              = 0x80000000
    384 
    385 	/* Miscellaneous high-WORD flags for CertOpenStore function */
    386 	CERT_REGISTRY_STORE_REMOTE_FLAG      = 0x00010000
    387 	CERT_REGISTRY_STORE_SERIALIZED_FLAG  = 0x00020000
    388 	CERT_REGISTRY_STORE_ROAMING_FLAG     = 0x00040000
    389 	CERT_REGISTRY_STORE_MY_IE_DIRTY_FLAG = 0x00080000
    390 	CERT_REGISTRY_STORE_LM_GPT_FLAG      = 0x01000000
    391 	CERT_REGISTRY_STORE_CLIENT_GPT_FLAG  = 0x80000000
    392 	CERT_FILE_STORE_COMMIT_ENABLE_FLAG   = 0x00010000
    393 	CERT_LDAP_STORE_SIGN_FLAG            = 0x00010000
    394 	CERT_LDAP_STORE_AREC_EXCLUSIVE_FLAG  = 0x00020000
    395 	CERT_LDAP_STORE_OPENED_FLAG          = 0x00040000
    396 	CERT_LDAP_STORE_UNBIND_FLAG          = 0x00080000
    397 
    398 	/* addDisposition values for CertAddCertificateContextToStore function */
    399 	CERT_STORE_ADD_NEW                                 = 1
    400 	CERT_STORE_ADD_USE_EXISTING                        = 2
    401 	CERT_STORE_ADD_REPLACE_EXISTING                    = 3
    402 	CERT_STORE_ADD_ALWAYS                              = 4
    403 	CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES = 5
    404 	CERT_STORE_ADD_NEWER                               = 6
    405 	CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES            = 7
    406 
    407 	/* ErrorStatus values for CertTrustStatus struct */
    408 	CERT_TRUST_NO_ERROR                          = 0x00000000
    409 	CERT_TRUST_IS_NOT_TIME_VALID                 = 0x00000001
    410 	CERT_TRUST_IS_REVOKED                        = 0x00000004
    411 	CERT_TRUST_IS_NOT_SIGNATURE_VALID            = 0x00000008
    412 	CERT_TRUST_IS_NOT_VALID_FOR_USAGE            = 0x00000010
    413 	CERT_TRUST_IS_UNTRUSTED_ROOT                 = 0x00000020
    414 	CERT_TRUST_REVOCATION_STATUS_UNKNOWN         = 0x00000040
    415 	CERT_TRUST_IS_CYCLIC                         = 0x00000080
    416 	CERT_TRUST_INVALID_EXTENSION                 = 0x00000100
    417 	CERT_TRUST_INVALID_POLICY_CONSTRAINTS        = 0x00000200
    418 	CERT_TRUST_INVALID_BASIC_CONSTRAINTS         = 0x00000400
    419 	CERT_TRUST_INVALID_NAME_CONSTRAINTS          = 0x00000800
    420 	CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT = 0x00001000
    421 	CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT   = 0x00002000
    422 	CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT = 0x00004000
    423 	CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT      = 0x00008000
    424 	CERT_TRUST_IS_PARTIAL_CHAIN                  = 0x00010000
    425 	CERT_TRUST_CTL_IS_NOT_TIME_VALID             = 0x00020000
    426 	CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID        = 0x00040000
    427 	CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE        = 0x00080000
    428 	CERT_TRUST_HAS_WEAK_SIGNATURE                = 0x00100000
    429 	CERT_TRUST_IS_OFFLINE_REVOCATION             = 0x01000000
    430 	CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY          = 0x02000000
    431 	CERT_TRUST_IS_EXPLICIT_DISTRUST              = 0x04000000
    432 	CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT    = 0x08000000
    433 
    434 	/* InfoStatus values for CertTrustStatus struct */
    435 	CERT_TRUST_HAS_EXACT_MATCH_ISSUER        = 0x00000001
    436 	CERT_TRUST_HAS_KEY_MATCH_ISSUER          = 0x00000002
    437 	CERT_TRUST_HAS_NAME_MATCH_ISSUER         = 0x00000004
    438 	CERT_TRUST_IS_SELF_SIGNED                = 0x00000008
    439 	CERT_TRUST_HAS_PREFERRED_ISSUER          = 0x00000100
    440 	CERT_TRUST_HAS_ISSUANCE_CHAIN_POLICY     = 0x00000400
    441 	CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS    = 0x00000400
    442 	CERT_TRUST_IS_PEER_TRUSTED               = 0x00000800
    443 	CERT_TRUST_HAS_CRL_VALIDITY_EXTENDED     = 0x00001000
    444 	CERT_TRUST_IS_FROM_EXCLUSIVE_TRUST_STORE = 0x00002000
    445 	CERT_TRUST_IS_CA_TRUSTED                 = 0x00004000
    446 	CERT_TRUST_IS_COMPLEX_CHAIN              = 0x00010000
    447 
    448 	/* Certificate Information Flags */
    449 	CERT_INFO_VERSION_FLAG                 = 1
    450 	CERT_INFO_SERIAL_NUMBER_FLAG           = 2
    451 	CERT_INFO_SIGNATURE_ALGORITHM_FLAG     = 3
    452 	CERT_INFO_ISSUER_FLAG                  = 4
    453 	CERT_INFO_NOT_BEFORE_FLAG              = 5
    454 	CERT_INFO_NOT_AFTER_FLAG               = 6
    455 	CERT_INFO_SUBJECT_FLAG                 = 7
    456 	CERT_INFO_SUBJECT_PUBLIC_KEY_INFO_FLAG = 8
    457 	CERT_INFO_ISSUER_UNIQUE_ID_FLAG        = 9
    458 	CERT_INFO_SUBJECT_UNIQUE_ID_FLAG       = 10
    459 	CERT_INFO_EXTENSION_FLAG               = 11
    460 
    461 	/* dwFindType for CertFindCertificateInStore  */
    462 	CERT_COMPARE_MASK                     = 0xFFFF
    463 	CERT_COMPARE_SHIFT                    = 16
    464 	CERT_COMPARE_ANY                      = 0
    465 	CERT_COMPARE_SHA1_HASH                = 1
    466 	CERT_COMPARE_NAME                     = 2
    467 	CERT_COMPARE_ATTR                     = 3
    468 	CERT_COMPARE_MD5_HASH                 = 4
    469 	CERT_COMPARE_PROPERTY                 = 5
    470 	CERT_COMPARE_PUBLIC_KEY               = 6
    471 	CERT_COMPARE_HASH                     = CERT_COMPARE_SHA1_HASH
    472 	CERT_COMPARE_NAME_STR_A               = 7
    473 	CERT_COMPARE_NAME_STR_W               = 8
    474 	CERT_COMPARE_KEY_SPEC                 = 9
    475 	CERT_COMPARE_ENHKEY_USAGE             = 10
    476 	CERT_COMPARE_CTL_USAGE                = CERT_COMPARE_ENHKEY_USAGE
    477 	CERT_COMPARE_SUBJECT_CERT             = 11
    478 	CERT_COMPARE_ISSUER_OF                = 12
    479 	CERT_COMPARE_EXISTING                 = 13
    480 	CERT_COMPARE_SIGNATURE_HASH           = 14
    481 	CERT_COMPARE_KEY_IDENTIFIER           = 15
    482 	CERT_COMPARE_CERT_ID                  = 16
    483 	CERT_COMPARE_CROSS_CERT_DIST_POINTS   = 17
    484 	CERT_COMPARE_PUBKEY_MD5_HASH          = 18
    485 	CERT_COMPARE_SUBJECT_INFO_ACCESS      = 19
    486 	CERT_COMPARE_HASH_STR                 = 20
    487 	CERT_COMPARE_HAS_PRIVATE_KEY          = 21
    488 	CERT_FIND_ANY                         = (CERT_COMPARE_ANY << CERT_COMPARE_SHIFT)
    489 	CERT_FIND_SHA1_HASH                   = (CERT_COMPARE_SHA1_HASH << CERT_COMPARE_SHIFT)
    490 	CERT_FIND_MD5_HASH                    = (CERT_COMPARE_MD5_HASH << CERT_COMPARE_SHIFT)
    491 	CERT_FIND_SIGNATURE_HASH              = (CERT_COMPARE_SIGNATURE_HASH << CERT_COMPARE_SHIFT)
    492 	CERT_FIND_KEY_IDENTIFIER              = (CERT_COMPARE_KEY_IDENTIFIER << CERT_COMPARE_SHIFT)
    493 	CERT_FIND_HASH                        = CERT_FIND_SHA1_HASH
    494 	CERT_FIND_PROPERTY                    = (CERT_COMPARE_PROPERTY << CERT_COMPARE_SHIFT)
    495 	CERT_FIND_PUBLIC_KEY                  = (CERT_COMPARE_PUBLIC_KEY << CERT_COMPARE_SHIFT)
    496 	CERT_FIND_SUBJECT_NAME                = (CERT_COMPARE_NAME<<CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
    497 	CERT_FIND_SUBJECT_ATTR                = (CERT_COMPARE_ATTR<<CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
    498 	CERT_FIND_ISSUER_NAME                 = (CERT_COMPARE_NAME<<CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
    499 	CERT_FIND_ISSUER_ATTR                 = (CERT_COMPARE_ATTR<<CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
    500 	CERT_FIND_SUBJECT_STR_A               = (CERT_COMPARE_NAME_STR_A<<CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
    501 	CERT_FIND_SUBJECT_STR_W               = (CERT_COMPARE_NAME_STR_W<<CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
    502 	CERT_FIND_SUBJECT_STR                 = CERT_FIND_SUBJECT_STR_W
    503 	CERT_FIND_ISSUER_STR_A                = (CERT_COMPARE_NAME_STR_A<<CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
    504 	CERT_FIND_ISSUER_STR_W                = (CERT_COMPARE_NAME_STR_W<<CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
    505 	CERT_FIND_ISSUER_STR                  = CERT_FIND_ISSUER_STR_W
    506 	CERT_FIND_KEY_SPEC                    = (CERT_COMPARE_KEY_SPEC << CERT_COMPARE_SHIFT)
    507 	CERT_FIND_ENHKEY_USAGE                = (CERT_COMPARE_ENHKEY_USAGE << CERT_COMPARE_SHIFT)
    508 	CERT_FIND_CTL_USAGE                   = CERT_FIND_ENHKEY_USAGE
    509 	CERT_FIND_SUBJECT_CERT                = (CERT_COMPARE_SUBJECT_CERT << CERT_COMPARE_SHIFT)
    510 	CERT_FIND_ISSUER_OF                   = (CERT_COMPARE_ISSUER_OF << CERT_COMPARE_SHIFT)
    511 	CERT_FIND_EXISTING                    = (CERT_COMPARE_EXISTING << CERT_COMPARE_SHIFT)
    512 	CERT_FIND_CERT_ID                     = (CERT_COMPARE_CERT_ID << CERT_COMPARE_SHIFT)
    513 	CERT_FIND_CROSS_CERT_DIST_POINTS      = (CERT_COMPARE_CROSS_CERT_DIST_POINTS << CERT_COMPARE_SHIFT)
    514 	CERT_FIND_PUBKEY_MD5_HASH             = (CERT_COMPARE_PUBKEY_MD5_HASH << CERT_COMPARE_SHIFT)
    515 	CERT_FIND_SUBJECT_INFO_ACCESS         = (CERT_COMPARE_SUBJECT_INFO_ACCESS << CERT_COMPARE_SHIFT)
    516 	CERT_FIND_HASH_STR                    = (CERT_COMPARE_HASH_STR << CERT_COMPARE_SHIFT)
    517 	CERT_FIND_HAS_PRIVATE_KEY             = (CERT_COMPARE_HAS_PRIVATE_KEY << CERT_COMPARE_SHIFT)
    518 	CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG  = 0x1
    519 	CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG  = 0x2
    520 	CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG = 0x4
    521 	CERT_FIND_NO_ENHKEY_USAGE_FLAG        = 0x8
    522 	CERT_FIND_OR_ENHKEY_USAGE_FLAG        = 0x10
    523 	CERT_FIND_VALID_ENHKEY_USAGE_FLAG     = 0x20
    524 	CERT_FIND_OPTIONAL_CTL_USAGE_FLAG     = CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG
    525 	CERT_FIND_EXT_ONLY_CTL_USAGE_FLAG     = CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG
    526 	CERT_FIND_PROP_ONLY_CTL_USAGE_FLAG    = CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG
    527 	CERT_FIND_NO_CTL_USAGE_FLAG           = CERT_FIND_NO_ENHKEY_USAGE_FLAG
    528 	CERT_FIND_OR_CTL_USAGE_FLAG           = CERT_FIND_OR_ENHKEY_USAGE_FLAG
    529 	CERT_FIND_VALID_CTL_USAGE_FLAG        = CERT_FIND_VALID_ENHKEY_USAGE_FLAG
    530 
    531 	/* policyOID values for CertVerifyCertificateChainPolicy function */
    532 	CERT_CHAIN_POLICY_BASE              = 1
    533 	CERT_CHAIN_POLICY_AUTHENTICODE      = 2
    534 	CERT_CHAIN_POLICY_AUTHENTICODE_TS   = 3
    535 	CERT_CHAIN_POLICY_SSL               = 4
    536 	CERT_CHAIN_POLICY_BASIC_CONSTRAINTS = 5
    537 	CERT_CHAIN_POLICY_NT_AUTH           = 6
    538 	CERT_CHAIN_POLICY_MICROSOFT_ROOT    = 7
    539 	CERT_CHAIN_POLICY_EV                = 8
    540 	CERT_CHAIN_POLICY_SSL_F12           = 9
    541 
    542 	/* flag for dwFindType CertFindChainInStore  */
    543 	CERT_CHAIN_FIND_BY_ISSUER = 1
    544 
    545 	/* dwFindFlags for CertFindChainInStore when dwFindType == CERT_CHAIN_FIND_BY_ISSUER */
    546 	CERT_CHAIN_FIND_BY_ISSUER_COMPARE_KEY_FLAG    = 0x0001
    547 	CERT_CHAIN_FIND_BY_ISSUER_COMPLEX_CHAIN_FLAG  = 0x0002
    548 	CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_URL_FLAG = 0x0004
    549 	CERT_CHAIN_FIND_BY_ISSUER_LOCAL_MACHINE_FLAG  = 0x0008
    550 	CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG         = 0x4000
    551 	CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_FLAG     = 0x8000
    552 
    553 	/* Certificate Store close flags */
    554 	CERT_CLOSE_STORE_FORCE_FLAG = 0x00000001
    555 	CERT_CLOSE_STORE_CHECK_FLAG = 0x00000002
    556 
    557 	/* CryptQueryObject object type */
    558 	CERT_QUERY_OBJECT_FILE = 1
    559 	CERT_QUERY_OBJECT_BLOB = 2
    560 
    561 	/* CryptQueryObject content type flags */
    562 	CERT_QUERY_CONTENT_CERT                    = 1
    563 	CERT_QUERY_CONTENT_CTL                     = 2
    564 	CERT_QUERY_CONTENT_CRL                     = 3
    565 	CERT_QUERY_CONTENT_SERIALIZED_STORE        = 4
    566 	CERT_QUERY_CONTENT_SERIALIZED_CERT         = 5
    567 	CERT_QUERY_CONTENT_SERIALIZED_CTL          = 6
    568 	CERT_QUERY_CONTENT_SERIALIZED_CRL          = 7
    569 	CERT_QUERY_CONTENT_PKCS7_SIGNED            = 8
    570 	CERT_QUERY_CONTENT_PKCS7_UNSIGNED          = 9
    571 	CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED      = 10
    572 	CERT_QUERY_CONTENT_PKCS10                  = 11
    573 	CERT_QUERY_CONTENT_PFX                     = 12
    574 	CERT_QUERY_CONTENT_CERT_PAIR               = 13
    575 	CERT_QUERY_CONTENT_PFX_AND_LOAD            = 14
    576 	CERT_QUERY_CONTENT_FLAG_CERT               = (1 << CERT_QUERY_CONTENT_CERT)
    577 	CERT_QUERY_CONTENT_FLAG_CTL                = (1 << CERT_QUERY_CONTENT_CTL)
    578 	CERT_QUERY_CONTENT_FLAG_CRL                = (1 << CERT_QUERY_CONTENT_CRL)
    579 	CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE   = (1 << CERT_QUERY_CONTENT_SERIALIZED_STORE)
    580 	CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT    = (1 << CERT_QUERY_CONTENT_SERIALIZED_CERT)
    581 	CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL     = (1 << CERT_QUERY_CONTENT_SERIALIZED_CTL)
    582 	CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL     = (1 << CERT_QUERY_CONTENT_SERIALIZED_CRL)
    583 	CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED       = (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED)
    584 	CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED     = (1 << CERT_QUERY_CONTENT_PKCS7_UNSIGNED)
    585 	CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED = (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED)
    586 	CERT_QUERY_CONTENT_FLAG_PKCS10             = (1 << CERT_QUERY_CONTENT_PKCS10)
    587 	CERT_QUERY_CONTENT_FLAG_PFX                = (1 << CERT_QUERY_CONTENT_PFX)
    588 	CERT_QUERY_CONTENT_FLAG_CERT_PAIR          = (1 << CERT_QUERY_CONTENT_CERT_PAIR)
    589 	CERT_QUERY_CONTENT_FLAG_PFX_AND_LOAD       = (1 << CERT_QUERY_CONTENT_PFX_AND_LOAD)
    590 	CERT_QUERY_CONTENT_FLAG_ALL                = (CERT_QUERY_CONTENT_FLAG_CERT | CERT_QUERY_CONTENT_FLAG_CTL | CERT_QUERY_CONTENT_FLAG_CRL | CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED | CERT_QUERY_CONTENT_FLAG_PKCS10 | CERT_QUERY_CONTENT_FLAG_PFX | CERT_QUERY_CONTENT_FLAG_CERT_PAIR)
    591 	CERT_QUERY_CONTENT_FLAG_ALL_ISSUER_CERT    = (CERT_QUERY_CONTENT_FLAG_CERT | CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE | CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT | CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED | CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED)
    592 
    593 	/* CryptQueryObject format type flags */
    594 	CERT_QUERY_FORMAT_BINARY                     = 1
    595 	CERT_QUERY_FORMAT_BASE64_ENCODED             = 2
    596 	CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED      = 3
    597 	CERT_QUERY_FORMAT_FLAG_BINARY                = (1 << CERT_QUERY_FORMAT_BINARY)
    598 	CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED        = (1 << CERT_QUERY_FORMAT_BASE64_ENCODED)
    599 	CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED = (1 << CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED)
    600 	CERT_QUERY_FORMAT_FLAG_ALL                   = (CERT_QUERY_FORMAT_FLAG_BINARY | CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED | CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED)
    601 
    602 	/* CertGetNameString name types */
    603 	CERT_NAME_EMAIL_TYPE            = 1
    604 	CERT_NAME_RDN_TYPE              = 2
    605 	CERT_NAME_ATTR_TYPE             = 3
    606 	CERT_NAME_SIMPLE_DISPLAY_TYPE   = 4
    607 	CERT_NAME_FRIENDLY_DISPLAY_TYPE = 5
    608 	CERT_NAME_DNS_TYPE              = 6
    609 	CERT_NAME_URL_TYPE              = 7
    610 	CERT_NAME_UPN_TYPE              = 8
    611 
    612 	/* CertGetNameString flags */
    613 	CERT_NAME_ISSUER_FLAG              = 0x1
    614 	CERT_NAME_DISABLE_IE4_UTF8_FLAG    = 0x10000
    615 	CERT_NAME_SEARCH_ALL_NAMES_FLAG    = 0x2
    616 	CERT_NAME_STR_ENABLE_PUNYCODE_FLAG = 0x00200000
    617 
    618 	/* AuthType values for SSLExtraCertChainPolicyPara struct */
    619 	AUTHTYPE_CLIENT = 1
    620 	AUTHTYPE_SERVER = 2
    621 
    622 	/* Checks values for SSLExtraCertChainPolicyPara struct */
    623 	SECURITY_FLAG_IGNORE_REVOCATION        = 0x00000080
    624 	SECURITY_FLAG_IGNORE_UNKNOWN_CA        = 0x00000100
    625 	SECURITY_FLAG_IGNORE_WRONG_USAGE       = 0x00000200
    626 	SECURITY_FLAG_IGNORE_CERT_CN_INVALID   = 0x00001000
    627 	SECURITY_FLAG_IGNORE_CERT_DATE_INVALID = 0x00002000
    628 
    629 	/* Flags for Crypt[Un]ProtectData */
    630 	CRYPTPROTECT_UI_FORBIDDEN      = 0x1
    631 	CRYPTPROTECT_LOCAL_MACHINE     = 0x4
    632 	CRYPTPROTECT_CRED_SYNC         = 0x8
    633 	CRYPTPROTECT_AUDIT             = 0x10
    634 	CRYPTPROTECT_NO_RECOVERY       = 0x20
    635 	CRYPTPROTECT_VERIFY_PROTECTION = 0x40
    636 	CRYPTPROTECT_CRED_REGENERATE   = 0x80
    637 
    638 	/* Flags for CryptProtectPromptStruct */
    639 	CRYPTPROTECT_PROMPT_ON_UNPROTECT   = 1
    640 	CRYPTPROTECT_PROMPT_ON_PROTECT     = 2
    641 	CRYPTPROTECT_PROMPT_RESERVED       = 4
    642 	CRYPTPROTECT_PROMPT_STRONG         = 8
    643 	CRYPTPROTECT_PROMPT_REQUIRE_STRONG = 16
    644 )
    645 
    646 const (
    647 	// flags for SetErrorMode
    648 	SEM_FAILCRITICALERRORS     = 0x0001
    649 	SEM_NOALIGNMENTFAULTEXCEPT = 0x0004
    650 	SEM_NOGPFAULTERRORBOX      = 0x0002
    651 	SEM_NOOPENFILEERRORBOX     = 0x8000
    652 )
    653 
    654 const (
    655 	// Priority class.
    656 	ABOVE_NORMAL_PRIORITY_CLASS   = 0x00008000
    657 	BELOW_NORMAL_PRIORITY_CLASS   = 0x00004000
    658 	HIGH_PRIORITY_CLASS           = 0x00000080
    659 	IDLE_PRIORITY_CLASS           = 0x00000040
    660 	NORMAL_PRIORITY_CLASS         = 0x00000020
    661 	PROCESS_MODE_BACKGROUND_BEGIN = 0x00100000
    662 	PROCESS_MODE_BACKGROUND_END   = 0x00200000
    663 	REALTIME_PRIORITY_CLASS       = 0x00000100
    664 )
    665 
    666 /* wintrust.h constants for WinVerifyTrustEx */
    667 const (
    668 	WTD_UI_ALL    = 1
    669 	WTD_UI_NONE   = 2
    670 	WTD_UI_NOBAD  = 3
    671 	WTD_UI_NOGOOD = 4
    672 
    673 	WTD_REVOKE_NONE       = 0
    674 	WTD_REVOKE_WHOLECHAIN = 1
    675 
    676 	WTD_CHOICE_FILE    = 1
    677 	WTD_CHOICE_CATALOG = 2
    678 	WTD_CHOICE_BLOB    = 3
    679 	WTD_CHOICE_SIGNER  = 4
    680 	WTD_CHOICE_CERT    = 5
    681 
    682 	WTD_STATEACTION_IGNORE           = 0x00000000
    683 	WTD_STATEACTION_VERIFY           = 0x00000001
    684 	WTD_STATEACTION_CLOSE            = 0x00000002
    685 	WTD_STATEACTION_AUTO_CACHE       = 0x00000003
    686 	WTD_STATEACTION_AUTO_CACHE_FLUSH = 0x00000004
    687 
    688 	WTD_USE_IE4_TRUST_FLAG                  = 0x1
    689 	WTD_NO_IE4_CHAIN_FLAG                   = 0x2
    690 	WTD_NO_POLICY_USAGE_FLAG                = 0x4
    691 	WTD_REVOCATION_CHECK_NONE               = 0x10
    692 	WTD_REVOCATION_CHECK_END_CERT           = 0x20
    693 	WTD_REVOCATION_CHECK_CHAIN              = 0x40
    694 	WTD_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT = 0x80
    695 	WTD_SAFER_FLAG                          = 0x100
    696 	WTD_HASH_ONLY_FLAG                      = 0x200
    697 	WTD_USE_DEFAULT_OSVER_CHECK             = 0x400
    698 	WTD_LIFETIME_SIGNING_FLAG               = 0x800
    699 	WTD_CACHE_ONLY_URL_RETRIEVAL            = 0x1000
    700 	WTD_DISABLE_MD2_MD4                     = 0x2000
    701 	WTD_MOTW                                = 0x4000
    702 
    703 	WTD_UICONTEXT_EXECUTE = 0
    704 	WTD_UICONTEXT_INSTALL = 1
    705 )
    706 
    707 var (
    708 	OID_PKIX_KP_SERVER_AUTH = []byte("1.3.6.1.5.5.7.3.1\x00")
    709 	OID_SERVER_GATED_CRYPTO = []byte("1.3.6.1.4.1.311.10.3.3\x00")
    710 	OID_SGC_NETSCAPE        = []byte("2.16.840.1.113730.4.1\x00")
    711 
    712 	WINTRUST_ACTION_GENERIC_VERIFY_V2 = GUID{
    713 		Data1: 0xaac56b,
    714 		Data2: 0xcd44,
    715 		Data3: 0x11d0,
    716 		Data4: [8]byte{0x8c, 0xc2, 0x0, 0xc0, 0x4f, 0xc2, 0x95, 0xee},
    717 	}
    718 )
    719 
    720 // Pointer represents a pointer to an arbitrary Windows type.
    721 //
    722 // Pointer-typed fields may point to one of many different types. It's
    723 // up to the caller to provide a pointer to the appropriate type, cast
    724 // to Pointer. The caller must obey the unsafe.Pointer rules while
    725 // doing so.
    726 type Pointer *struct{}
    727 
    728 // Invented values to support what package os expects.
    729 type Timeval struct {
    730 	Sec  int32
    731 	Usec int32
    732 }
    733 
    734 func (tv *Timeval) Nanoseconds() int64 {
    735 	return (int64(tv.Sec)*1e6 + int64(tv.Usec)) * 1e3
    736 }
    737 
    738 func NsecToTimeval(nsec int64) (tv Timeval) {
    739 	tv.Sec = int32(nsec / 1e9)
    740 	tv.Usec = int32(nsec % 1e9 / 1e3)
    741 	return
    742 }
    743 
    744 type Overlapped struct {
    745 	Internal     uintptr
    746 	InternalHigh uintptr
    747 	Offset       uint32
    748 	OffsetHigh   uint32
    749 	HEvent       Handle
    750 }
    751 
    752 type FileNotifyInformation struct {
    753 	NextEntryOffset uint32
    754 	Action          uint32
    755 	FileNameLength  uint32
    756 	FileName        uint16
    757 }
    758 
    759 type Filetime struct {
    760 	LowDateTime  uint32
    761 	HighDateTime uint32
    762 }
    763 
    764 // Nanoseconds returns Filetime ft in nanoseconds
    765 // since Epoch (00:00:00 UTC, January 1, 1970).
    766 func (ft *Filetime) Nanoseconds() int64 {
    767 	// 100-nanosecond intervals since January 1, 1601
    768 	nsec := int64(ft.HighDateTime)<<32 + int64(ft.LowDateTime)
    769 	// change starting time to the Epoch (00:00:00 UTC, January 1, 1970)
    770 	nsec -= 116444736000000000
    771 	// convert into nanoseconds
    772 	nsec *= 100
    773 	return nsec
    774 }
    775 
    776 func NsecToFiletime(nsec int64) (ft Filetime) {
    777 	// convert into 100-nanosecond
    778 	nsec /= 100
    779 	// change starting time to January 1, 1601
    780 	nsec += 116444736000000000
    781 	// split into high / low
    782 	ft.LowDateTime = uint32(nsec & 0xffffffff)
    783 	ft.HighDateTime = uint32(nsec >> 32 & 0xffffffff)
    784 	return ft
    785 }
    786 
    787 type Win32finddata struct {
    788 	FileAttributes    uint32
    789 	CreationTime      Filetime
    790 	LastAccessTime    Filetime
    791 	LastWriteTime     Filetime
    792 	FileSizeHigh      uint32
    793 	FileSizeLow       uint32
    794 	Reserved0         uint32
    795 	Reserved1         uint32
    796 	FileName          [MAX_PATH - 1]uint16
    797 	AlternateFileName [13]uint16
    798 }
    799 
    800 // This is the actual system call structure.
    801 // Win32finddata is what we committed to in Go 1.
    802 type win32finddata1 struct {
    803 	FileAttributes    uint32
    804 	CreationTime      Filetime
    805 	LastAccessTime    Filetime
    806 	LastWriteTime     Filetime
    807 	FileSizeHigh      uint32
    808 	FileSizeLow       uint32
    809 	Reserved0         uint32
    810 	Reserved1         uint32
    811 	FileName          [MAX_PATH]uint16
    812 	AlternateFileName [14]uint16
    813 
    814 	// The Microsoft documentation for this struct¹ describes three additional
    815 	// fields: dwFileType, dwCreatorType, and wFinderFlags. However, those fields
    816 	// are empirically only present in the macOS port of the Win32 API,² and thus
    817 	// not needed for binaries built for Windows.
    818 	//
    819 	// ¹ https://docs.microsoft.com/en-us/windows/win32/api/minwinbase/ns-minwinbase-win32_find_dataw describe
    820 	// ² https://golang.org/issue/42637#issuecomment-760715755.
    821 }
    822 
    823 func copyFindData(dst *Win32finddata, src *win32finddata1) {
    824 	dst.FileAttributes = src.FileAttributes
    825 	dst.CreationTime = src.CreationTime
    826 	dst.LastAccessTime = src.LastAccessTime
    827 	dst.LastWriteTime = src.LastWriteTime
    828 	dst.FileSizeHigh = src.FileSizeHigh
    829 	dst.FileSizeLow = src.FileSizeLow
    830 	dst.Reserved0 = src.Reserved0
    831 	dst.Reserved1 = src.Reserved1
    832 
    833 	// The src is 1 element bigger than dst, but it must be NUL.
    834 	copy(dst.FileName[:], src.FileName[:])
    835 	copy(dst.AlternateFileName[:], src.AlternateFileName[:])
    836 }
    837 
    838 type ByHandleFileInformation struct {
    839 	FileAttributes     uint32
    840 	CreationTime       Filetime
    841 	LastAccessTime     Filetime
    842 	LastWriteTime      Filetime
    843 	VolumeSerialNumber uint32
    844 	FileSizeHigh       uint32
    845 	FileSizeLow        uint32
    846 	NumberOfLinks      uint32
    847 	FileIndexHigh      uint32
    848 	FileIndexLow       uint32
    849 }
    850 
    851 const (
    852 	GetFileExInfoStandard = 0
    853 	GetFileExMaxInfoLevel = 1
    854 )
    855 
    856 type Win32FileAttributeData struct {
    857 	FileAttributes uint32
    858 	CreationTime   Filetime
    859 	LastAccessTime Filetime
    860 	LastWriteTime  Filetime
    861 	FileSizeHigh   uint32
    862 	FileSizeLow    uint32
    863 }
    864 
    865 // ShowWindow constants
    866 const (
    867 	// winuser.h
    868 	SW_HIDE            = 0
    869 	SW_NORMAL          = 1
    870 	SW_SHOWNORMAL      = 1
    871 	SW_SHOWMINIMIZED   = 2
    872 	SW_SHOWMAXIMIZED   = 3
    873 	SW_MAXIMIZE        = 3
    874 	SW_SHOWNOACTIVATE  = 4
    875 	SW_SHOW            = 5
    876 	SW_MINIMIZE        = 6
    877 	SW_SHOWMINNOACTIVE = 7
    878 	SW_SHOWNA          = 8
    879 	SW_RESTORE         = 9
    880 	SW_SHOWDEFAULT     = 10
    881 	SW_FORCEMINIMIZE   = 11
    882 )
    883 
    884 type StartupInfo struct {
    885 	Cb            uint32
    886 	_             *uint16
    887 	Desktop       *uint16
    888 	Title         *uint16
    889 	X             uint32
    890 	Y             uint32
    891 	XSize         uint32
    892 	YSize         uint32
    893 	XCountChars   uint32
    894 	YCountChars   uint32
    895 	FillAttribute uint32
    896 	Flags         uint32
    897 	ShowWindow    uint16
    898 	_             uint16
    899 	_             *byte
    900 	StdInput      Handle
    901 	StdOutput     Handle
    902 	StdErr        Handle
    903 }
    904 
    905 type StartupInfoEx struct {
    906 	StartupInfo
    907 	ProcThreadAttributeList *ProcThreadAttributeList
    908 }
    909 
    910 // ProcThreadAttributeList is a placeholder type to represent a PROC_THREAD_ATTRIBUTE_LIST.
    911 //
    912 // To create a *ProcThreadAttributeList, use NewProcThreadAttributeList, update
    913 // it with ProcThreadAttributeListContainer.Update, free its memory using
    914 // ProcThreadAttributeListContainer.Delete, and access the list itself using
    915 // ProcThreadAttributeListContainer.List.
    916 type ProcThreadAttributeList struct{}
    917 
    918 type ProcThreadAttributeListContainer struct {
    919 	data            *ProcThreadAttributeList
    920 	heapAllocations []uintptr
    921 }
    922 
    923 type ProcessInformation struct {
    924 	Process   Handle
    925 	Thread    Handle
    926 	ProcessId uint32
    927 	ThreadId  uint32
    928 }
    929 
    930 type ProcessEntry32 struct {
    931 	Size            uint32
    932 	Usage           uint32
    933 	ProcessID       uint32
    934 	DefaultHeapID   uintptr
    935 	ModuleID        uint32
    936 	Threads         uint32
    937 	ParentProcessID uint32
    938 	PriClassBase    int32
    939 	Flags           uint32
    940 	ExeFile         [MAX_PATH]uint16
    941 }
    942 
    943 type ThreadEntry32 struct {
    944 	Size           uint32
    945 	Usage          uint32
    946 	ThreadID       uint32
    947 	OwnerProcessID uint32
    948 	BasePri        int32
    949 	DeltaPri       int32
    950 	Flags          uint32
    951 }
    952 
    953 type Systemtime struct {
    954 	Year         uint16
    955 	Month        uint16
    956 	DayOfWeek    uint16
    957 	Day          uint16
    958 	Hour         uint16
    959 	Minute       uint16
    960 	Second       uint16
    961 	Milliseconds uint16
    962 }
    963 
    964 type Timezoneinformation struct {
    965 	Bias         int32
    966 	StandardName [32]uint16
    967 	StandardDate Systemtime
    968 	StandardBias int32
    969 	DaylightName [32]uint16
    970 	DaylightDate Systemtime
    971 	DaylightBias int32
    972 }
    973 
    974 // Socket related.
    975 
    976 const (
    977 	AF_UNSPEC  = 0
    978 	AF_UNIX    = 1
    979 	AF_INET    = 2
    980 	AF_NETBIOS = 17
    981 	AF_INET6   = 23
    982 	AF_IRDA    = 26
    983 	AF_BTH     = 32
    984 
    985 	SOCK_STREAM    = 1
    986 	SOCK_DGRAM     = 2
    987 	SOCK_RAW       = 3
    988 	SOCK_RDM       = 4
    989 	SOCK_SEQPACKET = 5
    990 
    991 	IPPROTO_IP      = 0
    992 	IPPROTO_ICMP    = 1
    993 	IPPROTO_IGMP    = 2
    994 	BTHPROTO_RFCOMM = 3
    995 	IPPROTO_TCP     = 6
    996 	IPPROTO_UDP     = 17
    997 	IPPROTO_IPV6    = 41
    998 	IPPROTO_ICMPV6  = 58
    999 	IPPROTO_RM      = 113
   1000 
   1001 	SOL_SOCKET                = 0xffff
   1002 	SO_REUSEADDR              = 4
   1003 	SO_KEEPALIVE              = 8
   1004 	SO_DONTROUTE              = 16
   1005 	SO_BROADCAST              = 32
   1006 	SO_LINGER                 = 128
   1007 	SO_RCVBUF                 = 0x1002
   1008 	SO_RCVTIMEO               = 0x1006
   1009 	SO_SNDBUF                 = 0x1001
   1010 	SO_UPDATE_ACCEPT_CONTEXT  = 0x700b
   1011 	SO_UPDATE_CONNECT_CONTEXT = 0x7010
   1012 
   1013 	IOC_OUT                            = 0x40000000
   1014 	IOC_IN                             = 0x80000000
   1015 	IOC_VENDOR                         = 0x18000000
   1016 	IOC_INOUT                          = IOC_IN | IOC_OUT
   1017 	IOC_WS2                            = 0x08000000
   1018 	SIO_GET_EXTENSION_FUNCTION_POINTER = IOC_INOUT | IOC_WS2 | 6
   1019 	SIO_KEEPALIVE_VALS                 = IOC_IN | IOC_VENDOR | 4
   1020 	SIO_UDP_CONNRESET                  = IOC_IN | IOC_VENDOR | 12
   1021 
   1022 	// cf. http://support.microsoft.com/default.aspx?scid=kb;en-us;257460
   1023 
   1024 	IP_HDRINCL         = 0x2
   1025 	IP_TOS             = 0x3
   1026 	IP_TTL             = 0x4
   1027 	IP_MULTICAST_IF    = 0x9
   1028 	IP_MULTICAST_TTL   = 0xa
   1029 	IP_MULTICAST_LOOP  = 0xb
   1030 	IP_ADD_MEMBERSHIP  = 0xc
   1031 	IP_DROP_MEMBERSHIP = 0xd
   1032 	IP_PKTINFO         = 0x13
   1033 
   1034 	IPV6_V6ONLY         = 0x1b
   1035 	IPV6_UNICAST_HOPS   = 0x4
   1036 	IPV6_MULTICAST_IF   = 0x9
   1037 	IPV6_MULTICAST_HOPS = 0xa
   1038 	IPV6_MULTICAST_LOOP = 0xb
   1039 	IPV6_JOIN_GROUP     = 0xc
   1040 	IPV6_LEAVE_GROUP    = 0xd
   1041 	IPV6_PKTINFO        = 0x13
   1042 
   1043 	MSG_OOB       = 0x1
   1044 	MSG_PEEK      = 0x2
   1045 	MSG_DONTROUTE = 0x4
   1046 	MSG_WAITALL   = 0x8
   1047 
   1048 	MSG_TRUNC  = 0x0100
   1049 	MSG_CTRUNC = 0x0200
   1050 	MSG_BCAST  = 0x0400
   1051 	MSG_MCAST  = 0x0800
   1052 
   1053 	SOMAXCONN = 0x7fffffff
   1054 
   1055 	TCP_NODELAY = 1
   1056 
   1057 	SHUT_RD   = 0
   1058 	SHUT_WR   = 1
   1059 	SHUT_RDWR = 2
   1060 
   1061 	WSADESCRIPTION_LEN = 256
   1062 	WSASYS_STATUS_LEN  = 128
   1063 )
   1064 
   1065 type WSABuf struct {
   1066 	Len uint32
   1067 	Buf *byte
   1068 }
   1069 
   1070 type WSAMsg struct {
   1071 	Name        *syscall.RawSockaddrAny
   1072 	Namelen     int32
   1073 	Buffers     *WSABuf
   1074 	BufferCount uint32
   1075 	Control     WSABuf
   1076 	Flags       uint32
   1077 }
   1078 
   1079 // Flags for WSASocket
   1080 const (
   1081 	WSA_FLAG_OVERLAPPED             = 0x01
   1082 	WSA_FLAG_MULTIPOINT_C_ROOT      = 0x02
   1083 	WSA_FLAG_MULTIPOINT_C_LEAF      = 0x04
   1084 	WSA_FLAG_MULTIPOINT_D_ROOT      = 0x08
   1085 	WSA_FLAG_MULTIPOINT_D_LEAF      = 0x10
   1086 	WSA_FLAG_ACCESS_SYSTEM_SECURITY = 0x40
   1087 	WSA_FLAG_NO_HANDLE_INHERIT      = 0x80
   1088 	WSA_FLAG_REGISTERED_IO          = 0x100
   1089 )
   1090 
   1091 // Invented values to support what package os expects.
   1092 const (
   1093 	S_IFMT   = 0x1f000
   1094 	S_IFIFO  = 0x1000
   1095 	S_IFCHR  = 0x2000
   1096 	S_IFDIR  = 0x4000
   1097 	S_IFBLK  = 0x6000
   1098 	S_IFREG  = 0x8000
   1099 	S_IFLNK  = 0xa000
   1100 	S_IFSOCK = 0xc000
   1101 	S_ISUID  = 0x800
   1102 	S_ISGID  = 0x400
   1103 	S_ISVTX  = 0x200
   1104 	S_IRUSR  = 0x100
   1105 	S_IWRITE = 0x80
   1106 	S_IWUSR  = 0x80
   1107 	S_IXUSR  = 0x40
   1108 )
   1109 
   1110 const (
   1111 	FILE_TYPE_CHAR    = 0x0002
   1112 	FILE_TYPE_DISK    = 0x0001
   1113 	FILE_TYPE_PIPE    = 0x0003
   1114 	FILE_TYPE_REMOTE  = 0x8000
   1115 	FILE_TYPE_UNKNOWN = 0x0000
   1116 )
   1117 
   1118 type Hostent struct {
   1119 	Name     *byte
   1120 	Aliases  **byte
   1121 	AddrType uint16
   1122 	Length   uint16
   1123 	AddrList **byte
   1124 }
   1125 
   1126 type Protoent struct {
   1127 	Name    *byte
   1128 	Aliases **byte
   1129 	Proto   uint16
   1130 }
   1131 
   1132 const (
   1133 	DNS_TYPE_A       = 0x0001
   1134 	DNS_TYPE_NS      = 0x0002
   1135 	DNS_TYPE_MD      = 0x0003
   1136 	DNS_TYPE_MF      = 0x0004
   1137 	DNS_TYPE_CNAME   = 0x0005
   1138 	DNS_TYPE_SOA     = 0x0006
   1139 	DNS_TYPE_MB      = 0x0007
   1140 	DNS_TYPE_MG      = 0x0008
   1141 	DNS_TYPE_MR      = 0x0009
   1142 	DNS_TYPE_NULL    = 0x000a
   1143 	DNS_TYPE_WKS     = 0x000b
   1144 	DNS_TYPE_PTR     = 0x000c
   1145 	DNS_TYPE_HINFO   = 0x000d
   1146 	DNS_TYPE_MINFO   = 0x000e
   1147 	DNS_TYPE_MX      = 0x000f
   1148 	DNS_TYPE_TEXT    = 0x0010
   1149 	DNS_TYPE_RP      = 0x0011
   1150 	DNS_TYPE_AFSDB   = 0x0012
   1151 	DNS_TYPE_X25     = 0x0013
   1152 	DNS_TYPE_ISDN    = 0x0014
   1153 	DNS_TYPE_RT      = 0x0015
   1154 	DNS_TYPE_NSAP    = 0x0016
   1155 	DNS_TYPE_NSAPPTR = 0x0017
   1156 	DNS_TYPE_SIG     = 0x0018
   1157 	DNS_TYPE_KEY     = 0x0019
   1158 	DNS_TYPE_PX      = 0x001a
   1159 	DNS_TYPE_GPOS    = 0x001b
   1160 	DNS_TYPE_AAAA    = 0x001c
   1161 	DNS_TYPE_LOC     = 0x001d
   1162 	DNS_TYPE_NXT     = 0x001e
   1163 	DNS_TYPE_EID     = 0x001f
   1164 	DNS_TYPE_NIMLOC  = 0x0020
   1165 	DNS_TYPE_SRV     = 0x0021
   1166 	DNS_TYPE_ATMA    = 0x0022
   1167 	DNS_TYPE_NAPTR   = 0x0023
   1168 	DNS_TYPE_KX      = 0x0024
   1169 	DNS_TYPE_CERT    = 0x0025
   1170 	DNS_TYPE_A6      = 0x0026
   1171 	DNS_TYPE_DNAME   = 0x0027
   1172 	DNS_TYPE_SINK    = 0x0028
   1173 	DNS_TYPE_OPT     = 0x0029
   1174 	DNS_TYPE_DS      = 0x002B
   1175 	DNS_TYPE_RRSIG   = 0x002E
   1176 	DNS_TYPE_NSEC    = 0x002F
   1177 	DNS_TYPE_DNSKEY  = 0x0030
   1178 	DNS_TYPE_DHCID   = 0x0031
   1179 	DNS_TYPE_UINFO   = 0x0064
   1180 	DNS_TYPE_UID     = 0x0065
   1181 	DNS_TYPE_GID     = 0x0066
   1182 	DNS_TYPE_UNSPEC  = 0x0067
   1183 	DNS_TYPE_ADDRS   = 0x00f8
   1184 	DNS_TYPE_TKEY    = 0x00f9
   1185 	DNS_TYPE_TSIG    = 0x00fa
   1186 	DNS_TYPE_IXFR    = 0x00fb
   1187 	DNS_TYPE_AXFR    = 0x00fc
   1188 	DNS_TYPE_MAILB   = 0x00fd
   1189 	DNS_TYPE_MAILA   = 0x00fe
   1190 	DNS_TYPE_ALL     = 0x00ff
   1191 	DNS_TYPE_ANY     = 0x00ff
   1192 	DNS_TYPE_WINS    = 0xff01
   1193 	DNS_TYPE_WINSR   = 0xff02
   1194 	DNS_TYPE_NBSTAT  = 0xff01
   1195 )
   1196 
   1197 const (
   1198 	// flags inside DNSRecord.Dw
   1199 	DnsSectionQuestion   = 0x0000
   1200 	DnsSectionAnswer     = 0x0001
   1201 	DnsSectionAuthority  = 0x0002
   1202 	DnsSectionAdditional = 0x0003
   1203 )
   1204 
   1205 type DNSSRVData struct {
   1206 	Target   *uint16
   1207 	Priority uint16
   1208 	Weight   uint16
   1209 	Port     uint16
   1210 	Pad      uint16
   1211 }
   1212 
   1213 type DNSPTRData struct {
   1214 	Host *uint16
   1215 }
   1216 
   1217 type DNSMXData struct {
   1218 	NameExchange *uint16
   1219 	Preference   uint16
   1220 	Pad          uint16
   1221 }
   1222 
   1223 type DNSTXTData struct {
   1224 	StringCount uint16
   1225 	StringArray [1]*uint16
   1226 }
   1227 
   1228 type DNSRecord struct {
   1229 	Next     *DNSRecord
   1230 	Name     *uint16
   1231 	Type     uint16
   1232 	Length   uint16
   1233 	Dw       uint32
   1234 	Ttl      uint32
   1235 	Reserved uint32
   1236 	Data     [40]byte
   1237 }
   1238 
   1239 const (
   1240 	TF_DISCONNECT         = 1
   1241 	TF_REUSE_SOCKET       = 2
   1242 	TF_WRITE_BEHIND       = 4
   1243 	TF_USE_DEFAULT_WORKER = 0
   1244 	TF_USE_SYSTEM_THREAD  = 16
   1245 	TF_USE_KERNEL_APC     = 32
   1246 )
   1247 
   1248 type TransmitFileBuffers struct {
   1249 	Head       uintptr
   1250 	HeadLength uint32
   1251 	Tail       uintptr
   1252 	TailLength uint32
   1253 }
   1254 
   1255 const (
   1256 	IFF_UP           = 1
   1257 	IFF_BROADCAST    = 2
   1258 	IFF_LOOPBACK     = 4
   1259 	IFF_POINTTOPOINT = 8
   1260 	IFF_MULTICAST    = 16
   1261 )
   1262 
   1263 const SIO_GET_INTERFACE_LIST = 0x4004747F
   1264 
   1265 // TODO(mattn): SockaddrGen is union of sockaddr/sockaddr_in/sockaddr_in6_old.
   1266 // will be fixed to change variable type as suitable.
   1267 
   1268 type SockaddrGen [24]byte
   1269 
   1270 type InterfaceInfo struct {
   1271 	Flags            uint32
   1272 	Address          SockaddrGen
   1273 	BroadcastAddress SockaddrGen
   1274 	Netmask          SockaddrGen
   1275 }
   1276 
   1277 type IpAddressString struct {
   1278 	String [16]byte
   1279 }
   1280 
   1281 type IpMaskString IpAddressString
   1282 
   1283 type IpAddrString struct {
   1284 	Next      *IpAddrString
   1285 	IpAddress IpAddressString
   1286 	IpMask    IpMaskString
   1287 	Context   uint32
   1288 }
   1289 
   1290 const MAX_ADAPTER_NAME_LENGTH = 256
   1291 const MAX_ADAPTER_DESCRIPTION_LENGTH = 128
   1292 const MAX_ADAPTER_ADDRESS_LENGTH = 8
   1293 
   1294 type IpAdapterInfo struct {
   1295 	Next                *IpAdapterInfo
   1296 	ComboIndex          uint32
   1297 	AdapterName         [MAX_ADAPTER_NAME_LENGTH + 4]byte
   1298 	Description         [MAX_ADAPTER_DESCRIPTION_LENGTH + 4]byte
   1299 	AddressLength       uint32
   1300 	Address             [MAX_ADAPTER_ADDRESS_LENGTH]byte
   1301 	Index               uint32
   1302 	Type                uint32
   1303 	DhcpEnabled         uint32
   1304 	CurrentIpAddress    *IpAddrString
   1305 	IpAddressList       IpAddrString
   1306 	GatewayList         IpAddrString
   1307 	DhcpServer          IpAddrString
   1308 	HaveWins            bool
   1309 	PrimaryWinsServer   IpAddrString
   1310 	SecondaryWinsServer IpAddrString
   1311 	LeaseObtained       int64
   1312 	LeaseExpires        int64
   1313 }
   1314 
   1315 const MAXLEN_PHYSADDR = 8
   1316 const MAX_INTERFACE_NAME_LEN = 256
   1317 const MAXLEN_IFDESCR = 256
   1318 
   1319 type MibIfRow struct {
   1320 	Name            [MAX_INTERFACE_NAME_LEN]uint16
   1321 	Index           uint32
   1322 	Type            uint32
   1323 	Mtu             uint32
   1324 	Speed           uint32
   1325 	PhysAddrLen     uint32
   1326 	PhysAddr        [MAXLEN_PHYSADDR]byte
   1327 	AdminStatus     uint32
   1328 	OperStatus      uint32
   1329 	LastChange      uint32
   1330 	InOctets        uint32
   1331 	InUcastPkts     uint32
   1332 	InNUcastPkts    uint32
   1333 	InDiscards      uint32
   1334 	InErrors        uint32
   1335 	InUnknownProtos uint32
   1336 	OutOctets       uint32
   1337 	OutUcastPkts    uint32
   1338 	OutNUcastPkts   uint32
   1339 	OutDiscards     uint32
   1340 	OutErrors       uint32
   1341 	OutQLen         uint32
   1342 	DescrLen        uint32
   1343 	Descr           [MAXLEN_IFDESCR]byte
   1344 }
   1345 
   1346 type CertInfo struct {
   1347 	Version              uint32
   1348 	SerialNumber         CryptIntegerBlob
   1349 	SignatureAlgorithm   CryptAlgorithmIdentifier
   1350 	Issuer               CertNameBlob
   1351 	NotBefore            Filetime
   1352 	NotAfter             Filetime
   1353 	Subject              CertNameBlob
   1354 	SubjectPublicKeyInfo CertPublicKeyInfo
   1355 	IssuerUniqueId       CryptBitBlob
   1356 	SubjectUniqueId      CryptBitBlob
   1357 	CountExtensions      uint32
   1358 	Extensions           *CertExtension
   1359 }
   1360 
   1361 type CertExtension struct {
   1362 	ObjId    *byte
   1363 	Critical int32
   1364 	Value    CryptObjidBlob
   1365 }
   1366 
   1367 type CryptAlgorithmIdentifier struct {
   1368 	ObjId      *byte
   1369 	Parameters CryptObjidBlob
   1370 }
   1371 
   1372 type CertPublicKeyInfo struct {
   1373 	Algorithm CryptAlgorithmIdentifier
   1374 	PublicKey CryptBitBlob
   1375 }
   1376 
   1377 type DataBlob struct {
   1378 	Size uint32
   1379 	Data *byte
   1380 }
   1381 type CryptIntegerBlob DataBlob
   1382 type CryptUintBlob DataBlob
   1383 type CryptObjidBlob DataBlob
   1384 type CertNameBlob DataBlob
   1385 type CertRdnValueBlob DataBlob
   1386 type CertBlob DataBlob
   1387 type CrlBlob DataBlob
   1388 type CryptDataBlob DataBlob
   1389 type CryptHashBlob DataBlob
   1390 type CryptDigestBlob DataBlob
   1391 type CryptDerBlob DataBlob
   1392 type CryptAttrBlob DataBlob
   1393 
   1394 type CryptBitBlob struct {
   1395 	Size       uint32
   1396 	Data       *byte
   1397 	UnusedBits uint32
   1398 }
   1399 
   1400 type CertContext struct {
   1401 	EncodingType uint32
   1402 	EncodedCert  *byte
   1403 	Length       uint32
   1404 	CertInfo     *CertInfo
   1405 	Store        Handle
   1406 }
   1407 
   1408 type CertChainContext struct {
   1409 	Size                       uint32
   1410 	TrustStatus                CertTrustStatus
   1411 	ChainCount                 uint32
   1412 	Chains                     **CertSimpleChain
   1413 	LowerQualityChainCount     uint32
   1414 	LowerQualityChains         **CertChainContext
   1415 	HasRevocationFreshnessTime uint32
   1416 	RevocationFreshnessTime    uint32
   1417 }
   1418 
   1419 type CertTrustListInfo struct {
   1420 	// Not implemented
   1421 }
   1422 
   1423 type CertSimpleChain struct {
   1424 	Size                       uint32
   1425 	TrustStatus                CertTrustStatus
   1426 	NumElements                uint32
   1427 	Elements                   **CertChainElement
   1428 	TrustListInfo              *CertTrustListInfo
   1429 	HasRevocationFreshnessTime uint32
   1430 	RevocationFreshnessTime    uint32
   1431 }
   1432 
   1433 type CertChainElement struct {
   1434 	Size              uint32
   1435 	CertContext       *CertContext
   1436 	TrustStatus       CertTrustStatus
   1437 	RevocationInfo    *CertRevocationInfo
   1438 	IssuanceUsage     *CertEnhKeyUsage
   1439 	ApplicationUsage  *CertEnhKeyUsage
   1440 	ExtendedErrorInfo *uint16
   1441 }
   1442 
   1443 type CertRevocationCrlInfo struct {
   1444 	// Not implemented
   1445 }
   1446 
   1447 type CertRevocationInfo struct {
   1448 	Size             uint32
   1449 	RevocationResult uint32
   1450 	RevocationOid    *byte
   1451 	OidSpecificInfo  Pointer
   1452 	HasFreshnessTime uint32
   1453 	FreshnessTime    uint32
   1454 	CrlInfo          *CertRevocationCrlInfo
   1455 }
   1456 
   1457 type CertTrustStatus struct {
   1458 	ErrorStatus uint32
   1459 	InfoStatus  uint32
   1460 }
   1461 
   1462 type CertUsageMatch struct {
   1463 	Type  uint32
   1464 	Usage CertEnhKeyUsage
   1465 }
   1466 
   1467 type CertEnhKeyUsage struct {
   1468 	Length           uint32
   1469 	UsageIdentifiers **byte
   1470 }
   1471 
   1472 type CertChainPara struct {
   1473 	Size                         uint32
   1474 	RequestedUsage               CertUsageMatch
   1475 	RequstedIssuancePolicy       CertUsageMatch
   1476 	URLRetrievalTimeout          uint32
   1477 	CheckRevocationFreshnessTime uint32
   1478 	RevocationFreshnessTime      uint32
   1479 	CacheResync                  *Filetime
   1480 }
   1481 
   1482 type CertChainPolicyPara struct {
   1483 	Size            uint32
   1484 	Flags           uint32
   1485 	ExtraPolicyPara Pointer
   1486 }
   1487 
   1488 type SSLExtraCertChainPolicyPara struct {
   1489 	Size       uint32
   1490 	AuthType   uint32
   1491 	Checks     uint32
   1492 	ServerName *uint16
   1493 }
   1494 
   1495 type CertChainPolicyStatus struct {
   1496 	Size              uint32
   1497 	Error             uint32
   1498 	ChainIndex        uint32
   1499 	ElementIndex      uint32
   1500 	ExtraPolicyStatus Pointer
   1501 }
   1502 
   1503 type CertPolicyInfo struct {
   1504 	Identifier      *byte
   1505 	CountQualifiers uint32
   1506 	Qualifiers      *CertPolicyQualifierInfo
   1507 }
   1508 
   1509 type CertPoliciesInfo struct {
   1510 	Count       uint32
   1511 	PolicyInfos *CertPolicyInfo
   1512 }
   1513 
   1514 type CertPolicyQualifierInfo struct {
   1515 	// Not implemented
   1516 }
   1517 
   1518 type CertStrongSignPara struct {
   1519 	Size                      uint32
   1520 	InfoChoice                uint32
   1521 	InfoOrSerializedInfoOrOID unsafe.Pointer
   1522 }
   1523 
   1524 type CryptProtectPromptStruct struct {
   1525 	Size        uint32
   1526 	PromptFlags uint32
   1527 	App         HWND
   1528 	Prompt      *uint16
   1529 }
   1530 
   1531 type CertChainFindByIssuerPara struct {
   1532 	Size                   uint32
   1533 	UsageIdentifier        *byte
   1534 	KeySpec                uint32
   1535 	AcquirePrivateKeyFlags uint32
   1536 	IssuerCount            uint32
   1537 	Issuer                 Pointer
   1538 	FindCallback           Pointer
   1539 	FindArg                Pointer
   1540 	IssuerChainIndex       *uint32
   1541 	IssuerElementIndex     *uint32
   1542 }
   1543 
   1544 type WinTrustData struct {
   1545 	Size                            uint32
   1546 	PolicyCallbackData              uintptr
   1547 	SIPClientData                   uintptr
   1548 	UIChoice                        uint32
   1549 	RevocationChecks                uint32
   1550 	UnionChoice                     uint32
   1551 	FileOrCatalogOrBlobOrSgnrOrCert unsafe.Pointer
   1552 	StateAction                     uint32
   1553 	StateData                       Handle
   1554 	URLReference                    *uint16
   1555 	ProvFlags                       uint32
   1556 	UIContext                       uint32
   1557 	SignatureSettings               *WinTrustSignatureSettings
   1558 }
   1559 
   1560 type WinTrustFileInfo struct {
   1561 	Size         uint32
   1562 	FilePath     *uint16
   1563 	File         Handle
   1564 	KnownSubject *GUID
   1565 }
   1566 
   1567 type WinTrustSignatureSettings struct {
   1568 	Size             uint32
   1569 	Index            uint32
   1570 	Flags            uint32
   1571 	SecondarySigs    uint32
   1572 	VerifiedSigIndex uint32
   1573 	CryptoPolicy     *CertStrongSignPara
   1574 }
   1575 
   1576 const (
   1577 	// do not reorder
   1578 	HKEY_CLASSES_ROOT = 0x80000000 + iota
   1579 	HKEY_CURRENT_USER
   1580 	HKEY_LOCAL_MACHINE
   1581 	HKEY_USERS
   1582 	HKEY_PERFORMANCE_DATA
   1583 	HKEY_CURRENT_CONFIG
   1584 	HKEY_DYN_DATA
   1585 
   1586 	KEY_QUERY_VALUE        = 1
   1587 	KEY_SET_VALUE          = 2
   1588 	KEY_CREATE_SUB_KEY     = 4
   1589 	KEY_ENUMERATE_SUB_KEYS = 8
   1590 	KEY_NOTIFY             = 16
   1591 	KEY_CREATE_LINK        = 32
   1592 	KEY_WRITE              = 0x20006
   1593 	KEY_EXECUTE            = 0x20019
   1594 	KEY_READ               = 0x20019
   1595 	KEY_WOW64_64KEY        = 0x0100
   1596 	KEY_WOW64_32KEY        = 0x0200
   1597 	KEY_ALL_ACCESS         = 0xf003f
   1598 )
   1599 
   1600 const (
   1601 	// do not reorder
   1602 	REG_NONE = iota
   1603 	REG_SZ
   1604 	REG_EXPAND_SZ
   1605 	REG_BINARY
   1606 	REG_DWORD_LITTLE_ENDIAN
   1607 	REG_DWORD_BIG_ENDIAN
   1608 	REG_LINK
   1609 	REG_MULTI_SZ
   1610 	REG_RESOURCE_LIST
   1611 	REG_FULL_RESOURCE_DESCRIPTOR
   1612 	REG_RESOURCE_REQUIREMENTS_LIST
   1613 	REG_QWORD_LITTLE_ENDIAN
   1614 	REG_DWORD = REG_DWORD_LITTLE_ENDIAN
   1615 	REG_QWORD = REG_QWORD_LITTLE_ENDIAN
   1616 )
   1617 
   1618 const (
   1619 	EVENT_MODIFY_STATE = 0x0002
   1620 	EVENT_ALL_ACCESS   = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3
   1621 
   1622 	MUTANT_QUERY_STATE = 0x0001
   1623 	MUTANT_ALL_ACCESS  = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | MUTANT_QUERY_STATE
   1624 
   1625 	SEMAPHORE_MODIFY_STATE = 0x0002
   1626 	SEMAPHORE_ALL_ACCESS   = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3
   1627 
   1628 	TIMER_QUERY_STATE  = 0x0001
   1629 	TIMER_MODIFY_STATE = 0x0002
   1630 	TIMER_ALL_ACCESS   = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | TIMER_QUERY_STATE | TIMER_MODIFY_STATE
   1631 
   1632 	MUTEX_MODIFY_STATE = MUTANT_QUERY_STATE
   1633 	MUTEX_ALL_ACCESS   = MUTANT_ALL_ACCESS
   1634 
   1635 	CREATE_EVENT_MANUAL_RESET  = 0x1
   1636 	CREATE_EVENT_INITIAL_SET   = 0x2
   1637 	CREATE_MUTEX_INITIAL_OWNER = 0x1
   1638 )
   1639 
   1640 type AddrinfoW struct {
   1641 	Flags     int32
   1642 	Family    int32
   1643 	Socktype  int32
   1644 	Protocol  int32
   1645 	Addrlen   uintptr
   1646 	Canonname *uint16
   1647 	Addr      uintptr
   1648 	Next      *AddrinfoW
   1649 }
   1650 
   1651 const (
   1652 	AI_PASSIVE     = 1
   1653 	AI_CANONNAME   = 2
   1654 	AI_NUMERICHOST = 4
   1655 )
   1656 
   1657 type GUID struct {
   1658 	Data1 uint32
   1659 	Data2 uint16
   1660 	Data3 uint16
   1661 	Data4 [8]byte
   1662 }
   1663 
   1664 var WSAID_CONNECTEX = GUID{
   1665 	0x25a207b9,
   1666 	0xddf3,
   1667 	0x4660,
   1668 	[8]byte{0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e},
   1669 }
   1670 
   1671 var WSAID_WSASENDMSG = GUID{
   1672 	0xa441e712,
   1673 	0x754f,
   1674 	0x43ca,
   1675 	[8]byte{0x84, 0xa7, 0x0d, 0xee, 0x44, 0xcf, 0x60, 0x6d},
   1676 }
   1677 
   1678 var WSAID_WSARECVMSG = GUID{
   1679 	0xf689d7c8,
   1680 	0x6f1f,
   1681 	0x436b,
   1682 	[8]byte{0x8a, 0x53, 0xe5, 0x4f, 0xe3, 0x51, 0xc3, 0x22},
   1683 }
   1684 
   1685 const (
   1686 	FILE_SKIP_COMPLETION_PORT_ON_SUCCESS = 1
   1687 	FILE_SKIP_SET_EVENT_ON_HANDLE        = 2
   1688 )
   1689 
   1690 const (
   1691 	WSAPROTOCOL_LEN    = 255
   1692 	MAX_PROTOCOL_CHAIN = 7
   1693 	BASE_PROTOCOL      = 1
   1694 	LAYERED_PROTOCOL   = 0
   1695 
   1696 	XP1_CONNECTIONLESS           = 0x00000001
   1697 	XP1_GUARANTEED_DELIVERY      = 0x00000002
   1698 	XP1_GUARANTEED_ORDER         = 0x00000004
   1699 	XP1_MESSAGE_ORIENTED         = 0x00000008
   1700 	XP1_PSEUDO_STREAM            = 0x00000010
   1701 	XP1_GRACEFUL_CLOSE           = 0x00000020
   1702 	XP1_EXPEDITED_DATA           = 0x00000040
   1703 	XP1_CONNECT_DATA             = 0x00000080
   1704 	XP1_DISCONNECT_DATA          = 0x00000100
   1705 	XP1_SUPPORT_BROADCAST        = 0x00000200
   1706 	XP1_SUPPORT_MULTIPOINT       = 0x00000400
   1707 	XP1_MULTIPOINT_CONTROL_PLANE = 0x00000800
   1708 	XP1_MULTIPOINT_DATA_PLANE    = 0x00001000
   1709 	XP1_QOS_SUPPORTED            = 0x00002000
   1710 	XP1_UNI_SEND                 = 0x00008000
   1711 	XP1_UNI_RECV                 = 0x00010000
   1712 	XP1_IFS_HANDLES              = 0x00020000
   1713 	XP1_PARTIAL_MESSAGE          = 0x00040000
   1714 	XP1_SAN_SUPPORT_SDP          = 0x00080000
   1715 
   1716 	PFL_MULTIPLE_PROTO_ENTRIES  = 0x00000001
   1717 	PFL_RECOMMENDED_PROTO_ENTRY = 0x00000002
   1718 	PFL_HIDDEN                  = 0x00000004
   1719 	PFL_MATCHES_PROTOCOL_ZERO   = 0x00000008
   1720 	PFL_NETWORKDIRECT_PROVIDER  = 0x00000010
   1721 )
   1722 
   1723 type WSAProtocolInfo struct {
   1724 	ServiceFlags1     uint32
   1725 	ServiceFlags2     uint32
   1726 	ServiceFlags3     uint32
   1727 	ServiceFlags4     uint32
   1728 	ProviderFlags     uint32
   1729 	ProviderId        GUID
   1730 	CatalogEntryId    uint32
   1731 	ProtocolChain     WSAProtocolChain
   1732 	Version           int32
   1733 	AddressFamily     int32
   1734 	MaxSockAddr       int32
   1735 	MinSockAddr       int32
   1736 	SocketType        int32
   1737 	Protocol          int32
   1738 	ProtocolMaxOffset int32
   1739 	NetworkByteOrder  int32
   1740 	SecurityScheme    int32
   1741 	MessageSize       uint32
   1742 	ProviderReserved  uint32
   1743 	ProtocolName      [WSAPROTOCOL_LEN + 1]uint16
   1744 }
   1745 
   1746 type WSAProtocolChain struct {
   1747 	ChainLen     int32
   1748 	ChainEntries [MAX_PROTOCOL_CHAIN]uint32
   1749 }
   1750 
   1751 type TCPKeepalive struct {
   1752 	OnOff    uint32
   1753 	Time     uint32
   1754 	Interval uint32
   1755 }
   1756 
   1757 type symbolicLinkReparseBuffer struct {
   1758 	SubstituteNameOffset uint16
   1759 	SubstituteNameLength uint16
   1760 	PrintNameOffset      uint16
   1761 	PrintNameLength      uint16
   1762 	Flags                uint32
   1763 	PathBuffer           [1]uint16
   1764 }
   1765 
   1766 type mountPointReparseBuffer struct {
   1767 	SubstituteNameOffset uint16
   1768 	SubstituteNameLength uint16
   1769 	PrintNameOffset      uint16
   1770 	PrintNameLength      uint16
   1771 	PathBuffer           [1]uint16
   1772 }
   1773 
   1774 type reparseDataBuffer struct {
   1775 	ReparseTag        uint32
   1776 	ReparseDataLength uint16
   1777 	Reserved          uint16
   1778 
   1779 	// GenericReparseBuffer
   1780 	reparseBuffer byte
   1781 }
   1782 
   1783 const (
   1784 	FSCTL_GET_REPARSE_POINT          = 0x900A8
   1785 	MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16 * 1024
   1786 	IO_REPARSE_TAG_MOUNT_POINT       = 0xA0000003
   1787 	IO_REPARSE_TAG_SYMLINK           = 0xA000000C
   1788 	SYMBOLIC_LINK_FLAG_DIRECTORY     = 0x1
   1789 )
   1790 
   1791 const (
   1792 	ComputerNameNetBIOS                   = 0
   1793 	ComputerNameDnsHostname               = 1
   1794 	ComputerNameDnsDomain                 = 2
   1795 	ComputerNameDnsFullyQualified         = 3
   1796 	ComputerNamePhysicalNetBIOS           = 4
   1797 	ComputerNamePhysicalDnsHostname       = 5
   1798 	ComputerNamePhysicalDnsDomain         = 6
   1799 	ComputerNamePhysicalDnsFullyQualified = 7
   1800 	ComputerNameMax                       = 8
   1801 )
   1802 
   1803 // For MessageBox()
   1804 const (
   1805 	MB_OK                   = 0x00000000
   1806 	MB_OKCANCEL             = 0x00000001
   1807 	MB_ABORTRETRYIGNORE     = 0x00000002
   1808 	MB_YESNOCANCEL          = 0x00000003
   1809 	MB_YESNO                = 0x00000004
   1810 	MB_RETRYCANCEL          = 0x00000005
   1811 	MB_CANCELTRYCONTINUE    = 0x00000006
   1812 	MB_ICONHAND             = 0x00000010
   1813 	MB_ICONQUESTION         = 0x00000020
   1814 	MB_ICONEXCLAMATION      = 0x00000030
   1815 	MB_ICONASTERISK         = 0x00000040
   1816 	MB_USERICON             = 0x00000080
   1817 	MB_ICONWARNING          = MB_ICONEXCLAMATION
   1818 	MB_ICONERROR            = MB_ICONHAND
   1819 	MB_ICONINFORMATION      = MB_ICONASTERISK
   1820 	MB_ICONSTOP             = MB_ICONHAND
   1821 	MB_DEFBUTTON1           = 0x00000000
   1822 	MB_DEFBUTTON2           = 0x00000100
   1823 	MB_DEFBUTTON3           = 0x00000200
   1824 	MB_DEFBUTTON4           = 0x00000300
   1825 	MB_APPLMODAL            = 0x00000000
   1826 	MB_SYSTEMMODAL          = 0x00001000
   1827 	MB_TASKMODAL            = 0x00002000
   1828 	MB_HELP                 = 0x00004000
   1829 	MB_NOFOCUS              = 0x00008000
   1830 	MB_SETFOREGROUND        = 0x00010000
   1831 	MB_DEFAULT_DESKTOP_ONLY = 0x00020000
   1832 	MB_TOPMOST              = 0x00040000
   1833 	MB_RIGHT                = 0x00080000
   1834 	MB_RTLREADING           = 0x00100000
   1835 	MB_SERVICE_NOTIFICATION = 0x00200000
   1836 )
   1837 
   1838 const (
   1839 	MOVEFILE_REPLACE_EXISTING      = 0x1
   1840 	MOVEFILE_COPY_ALLOWED          = 0x2
   1841 	MOVEFILE_DELAY_UNTIL_REBOOT    = 0x4
   1842 	MOVEFILE_WRITE_THROUGH         = 0x8
   1843 	MOVEFILE_CREATE_HARDLINK       = 0x10
   1844 	MOVEFILE_FAIL_IF_NOT_TRACKABLE = 0x20
   1845 )
   1846 
   1847 const GAA_FLAG_INCLUDE_PREFIX = 0x00000010
   1848 
   1849 const (
   1850 	IF_TYPE_OTHER              = 1
   1851 	IF_TYPE_ETHERNET_CSMACD    = 6
   1852 	IF_TYPE_ISO88025_TOKENRING = 9
   1853 	IF_TYPE_PPP                = 23
   1854 	IF_TYPE_SOFTWARE_LOOPBACK  = 24
   1855 	IF_TYPE_ATM                = 37
   1856 	IF_TYPE_IEEE80211          = 71
   1857 	IF_TYPE_TUNNEL             = 131
   1858 	IF_TYPE_IEEE1394           = 144
   1859 )
   1860 
   1861 type SocketAddress struct {
   1862 	Sockaddr       *syscall.RawSockaddrAny
   1863 	SockaddrLength int32
   1864 }
   1865 
   1866 // IP returns an IPv4 or IPv6 address, or nil if the underlying SocketAddress is neither.
   1867 func (addr *SocketAddress) IP() net.IP {
   1868 	if uintptr(addr.SockaddrLength) >= unsafe.Sizeof(RawSockaddrInet4{}) && addr.Sockaddr.Addr.Family == AF_INET {
   1869 		return (*RawSockaddrInet4)(unsafe.Pointer(addr.Sockaddr)).Addr[:]
   1870 	} else if uintptr(addr.SockaddrLength) >= unsafe.Sizeof(RawSockaddrInet6{}) && addr.Sockaddr.Addr.Family == AF_INET6 {
   1871 		return (*RawSockaddrInet6)(unsafe.Pointer(addr.Sockaddr)).Addr[:]
   1872 	}
   1873 	return nil
   1874 }
   1875 
   1876 type IpAdapterUnicastAddress struct {
   1877 	Length             uint32
   1878 	Flags              uint32
   1879 	Next               *IpAdapterUnicastAddress
   1880 	Address            SocketAddress
   1881 	PrefixOrigin       int32
   1882 	SuffixOrigin       int32
   1883 	DadState           int32
   1884 	ValidLifetime      uint32
   1885 	PreferredLifetime  uint32
   1886 	LeaseLifetime      uint32
   1887 	OnLinkPrefixLength uint8
   1888 }
   1889 
   1890 type IpAdapterAnycastAddress struct {
   1891 	Length  uint32
   1892 	Flags   uint32
   1893 	Next    *IpAdapterAnycastAddress
   1894 	Address SocketAddress
   1895 }
   1896 
   1897 type IpAdapterMulticastAddress struct {
   1898 	Length  uint32
   1899 	Flags   uint32
   1900 	Next    *IpAdapterMulticastAddress
   1901 	Address SocketAddress
   1902 }
   1903 
   1904 type IpAdapterDnsServerAdapter struct {
   1905 	Length   uint32
   1906 	Reserved uint32
   1907 	Next     *IpAdapterDnsServerAdapter
   1908 	Address  SocketAddress
   1909 }
   1910 
   1911 type IpAdapterPrefix struct {
   1912 	Length       uint32
   1913 	Flags        uint32
   1914 	Next         *IpAdapterPrefix
   1915 	Address      SocketAddress
   1916 	PrefixLength uint32
   1917 }
   1918 
   1919 type IpAdapterAddresses struct {
   1920 	Length                uint32
   1921 	IfIndex               uint32
   1922 	Next                  *IpAdapterAddresses
   1923 	AdapterName           *byte
   1924 	FirstUnicastAddress   *IpAdapterUnicastAddress
   1925 	FirstAnycastAddress   *IpAdapterAnycastAddress
   1926 	FirstMulticastAddress *IpAdapterMulticastAddress
   1927 	FirstDnsServerAddress *IpAdapterDnsServerAdapter
   1928 	DnsSuffix             *uint16
   1929 	Description           *uint16
   1930 	FriendlyName          *uint16
   1931 	PhysicalAddress       [syscall.MAX_ADAPTER_ADDRESS_LENGTH]byte
   1932 	PhysicalAddressLength uint32
   1933 	Flags                 uint32
   1934 	Mtu                   uint32
   1935 	IfType                uint32
   1936 	OperStatus            uint32
   1937 	Ipv6IfIndex           uint32
   1938 	ZoneIndices           [16]uint32
   1939 	FirstPrefix           *IpAdapterPrefix
   1940 	/* more fields might be present here. */
   1941 }
   1942 
   1943 const (
   1944 	IfOperStatusUp             = 1
   1945 	IfOperStatusDown           = 2
   1946 	IfOperStatusTesting        = 3
   1947 	IfOperStatusUnknown        = 4
   1948 	IfOperStatusDormant        = 5
   1949 	IfOperStatusNotPresent     = 6
   1950 	IfOperStatusLowerLayerDown = 7
   1951 )
   1952 
   1953 // Console related constants used for the mode parameter to SetConsoleMode. See
   1954 // https://docs.microsoft.com/en-us/windows/console/setconsolemode for details.
   1955 
   1956 const (
   1957 	ENABLE_PROCESSED_INPUT        = 0x1
   1958 	ENABLE_LINE_INPUT             = 0x2
   1959 	ENABLE_ECHO_INPUT             = 0x4
   1960 	ENABLE_WINDOW_INPUT           = 0x8
   1961 	ENABLE_MOUSE_INPUT            = 0x10
   1962 	ENABLE_INSERT_MODE            = 0x20
   1963 	ENABLE_QUICK_EDIT_MODE        = 0x40
   1964 	ENABLE_EXTENDED_FLAGS         = 0x80
   1965 	ENABLE_AUTO_POSITION          = 0x100
   1966 	ENABLE_VIRTUAL_TERMINAL_INPUT = 0x200
   1967 
   1968 	ENABLE_PROCESSED_OUTPUT            = 0x1
   1969 	ENABLE_WRAP_AT_EOL_OUTPUT          = 0x2
   1970 	ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x4
   1971 	DISABLE_NEWLINE_AUTO_RETURN        = 0x8
   1972 	ENABLE_LVB_GRID_WORLDWIDE          = 0x10
   1973 )
   1974 
   1975 type Coord struct {
   1976 	X int16
   1977 	Y int16
   1978 }
   1979 
   1980 type SmallRect struct {
   1981 	Left   int16
   1982 	Top    int16
   1983 	Right  int16
   1984 	Bottom int16
   1985 }
   1986 
   1987 // Used with GetConsoleScreenBuffer to retrieve information about a console
   1988 // screen buffer. See
   1989 // https://docs.microsoft.com/en-us/windows/console/console-screen-buffer-info-str
   1990 // for details.
   1991 
   1992 type ConsoleScreenBufferInfo struct {
   1993 	Size              Coord
   1994 	CursorPosition    Coord
   1995 	Attributes        uint16
   1996 	Window            SmallRect
   1997 	MaximumWindowSize Coord
   1998 }
   1999 
   2000 const UNIX_PATH_MAX = 108 // defined in afunix.h
   2001 
   2002 const (
   2003 	// flags for JOBOBJECT_BASIC_LIMIT_INFORMATION.LimitFlags
   2004 	JOB_OBJECT_LIMIT_ACTIVE_PROCESS             = 0x00000008
   2005 	JOB_OBJECT_LIMIT_AFFINITY                   = 0x00000010
   2006 	JOB_OBJECT_LIMIT_BREAKAWAY_OK               = 0x00000800
   2007 	JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION = 0x00000400
   2008 	JOB_OBJECT_LIMIT_JOB_MEMORY                 = 0x00000200
   2009 	JOB_OBJECT_LIMIT_JOB_TIME                   = 0x00000004
   2010 	JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE          = 0x00002000
   2011 	JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME          = 0x00000040
   2012 	JOB_OBJECT_LIMIT_PRIORITY_CLASS             = 0x00000020
   2013 	JOB_OBJECT_LIMIT_PROCESS_MEMORY             = 0x00000100
   2014 	JOB_OBJECT_LIMIT_PROCESS_TIME               = 0x00000002
   2015 	JOB_OBJECT_LIMIT_SCHEDULING_CLASS           = 0x00000080
   2016 	JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK        = 0x00001000
   2017 	JOB_OBJECT_LIMIT_SUBSET_AFFINITY            = 0x00004000
   2018 	JOB_OBJECT_LIMIT_WORKINGSET                 = 0x00000001
   2019 )
   2020 
   2021 type IO_COUNTERS struct {
   2022 	ReadOperationCount  uint64
   2023 	WriteOperationCount uint64
   2024 	OtherOperationCount uint64
   2025 	ReadTransferCount   uint64
   2026 	WriteTransferCount  uint64
   2027 	OtherTransferCount  uint64
   2028 }
   2029 
   2030 type JOBOBJECT_EXTENDED_LIMIT_INFORMATION struct {
   2031 	BasicLimitInformation JOBOBJECT_BASIC_LIMIT_INFORMATION
   2032 	IoInfo                IO_COUNTERS
   2033 	ProcessMemoryLimit    uintptr
   2034 	JobMemoryLimit        uintptr
   2035 	PeakProcessMemoryUsed uintptr
   2036 	PeakJobMemoryUsed     uintptr
   2037 }
   2038 
   2039 const (
   2040 	// UIRestrictionsClass
   2041 	JOB_OBJECT_UILIMIT_DESKTOP          = 0x00000040
   2042 	JOB_OBJECT_UILIMIT_DISPLAYSETTINGS  = 0x00000010
   2043 	JOB_OBJECT_UILIMIT_EXITWINDOWS      = 0x00000080
   2044 	JOB_OBJECT_UILIMIT_GLOBALATOMS      = 0x00000020
   2045 	JOB_OBJECT_UILIMIT_HANDLES          = 0x00000001
   2046 	JOB_OBJECT_UILIMIT_READCLIPBOARD    = 0x00000002
   2047 	JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS = 0x00000008
   2048 	JOB_OBJECT_UILIMIT_WRITECLIPBOARD   = 0x00000004
   2049 )
   2050 
   2051 type JOBOBJECT_BASIC_UI_RESTRICTIONS struct {
   2052 	UIRestrictionsClass uint32
   2053 }
   2054 
   2055 const (
   2056 	// JobObjectInformationClass
   2057 	JobObjectAssociateCompletionPortInformation = 7
   2058 	JobObjectBasicLimitInformation              = 2
   2059 	JobObjectBasicUIRestrictions                = 4
   2060 	JobObjectCpuRateControlInformation          = 15
   2061 	JobObjectEndOfJobTimeInformation            = 6
   2062 	JobObjectExtendedLimitInformation           = 9
   2063 	JobObjectGroupInformation                   = 11
   2064 	JobObjectGroupInformationEx                 = 14
   2065 	JobObjectLimitViolationInformation2         = 35
   2066 	JobObjectNetRateControlInformation          = 32
   2067 	JobObjectNotificationLimitInformation       = 12
   2068 	JobObjectNotificationLimitInformation2      = 34
   2069 	JobObjectSecurityLimitInformation           = 5
   2070 )
   2071 
   2072 const (
   2073 	KF_FLAG_DEFAULT                          = 0x00000000
   2074 	KF_FLAG_FORCE_APP_DATA_REDIRECTION       = 0x00080000
   2075 	KF_FLAG_RETURN_FILTER_REDIRECTION_TARGET = 0x00040000
   2076 	KF_FLAG_FORCE_PACKAGE_REDIRECTION        = 0x00020000
   2077 	KF_FLAG_NO_PACKAGE_REDIRECTION           = 0x00010000
   2078 	KF_FLAG_FORCE_APPCONTAINER_REDIRECTION   = 0x00020000
   2079 	KF_FLAG_NO_APPCONTAINER_REDIRECTION      = 0x00010000
   2080 	KF_FLAG_CREATE                           = 0x00008000
   2081 	KF_FLAG_DONT_VERIFY                      = 0x00004000
   2082 	KF_FLAG_DONT_UNEXPAND                    = 0x00002000
   2083 	KF_FLAG_NO_ALIAS                         = 0x00001000
   2084 	KF_FLAG_INIT                             = 0x00000800
   2085 	KF_FLAG_DEFAULT_PATH                     = 0x00000400
   2086 	KF_FLAG_NOT_PARENT_RELATIVE              = 0x00000200
   2087 	KF_FLAG_SIMPLE_IDLIST                    = 0x00000100
   2088 	KF_FLAG_ALIAS_ONLY                       = 0x80000000
   2089 )
   2090 
   2091 type OsVersionInfoEx struct {
   2092 	osVersionInfoSize uint32
   2093 	MajorVersion      uint32
   2094 	MinorVersion      uint32
   2095 	BuildNumber       uint32
   2096 	PlatformId        uint32
   2097 	CsdVersion        [128]uint16
   2098 	ServicePackMajor  uint16
   2099 	ServicePackMinor  uint16
   2100 	SuiteMask         uint16
   2101 	ProductType       byte
   2102 	_                 byte
   2103 }
   2104 
   2105 const (
   2106 	EWX_LOGOFF          = 0x00000000
   2107 	EWX_SHUTDOWN        = 0x00000001
   2108 	EWX_REBOOT          = 0x00000002
   2109 	EWX_FORCE           = 0x00000004
   2110 	EWX_POWEROFF        = 0x00000008
   2111 	EWX_FORCEIFHUNG     = 0x00000010
   2112 	EWX_QUICKRESOLVE    = 0x00000020
   2113 	EWX_RESTARTAPPS     = 0x00000040
   2114 	EWX_HYBRID_SHUTDOWN = 0x00400000
   2115 	EWX_BOOTOPTIONS     = 0x01000000
   2116 
   2117 	SHTDN_REASON_FLAG_COMMENT_REQUIRED          = 0x01000000
   2118 	SHTDN_REASON_FLAG_DIRTY_PROBLEM_ID_REQUIRED = 0x02000000
   2119 	SHTDN_REASON_FLAG_CLEAN_UI                  = 0x04000000
   2120 	SHTDN_REASON_FLAG_DIRTY_UI                  = 0x08000000
   2121 	SHTDN_REASON_FLAG_USER_DEFINED              = 0x40000000
   2122 	SHTDN_REASON_FLAG_PLANNED                   = 0x80000000
   2123 	SHTDN_REASON_MAJOR_OTHER                    = 0x00000000
   2124 	SHTDN_REASON_MAJOR_NONE                     = 0x00000000
   2125 	SHTDN_REASON_MAJOR_HARDWARE                 = 0x00010000
   2126 	SHTDN_REASON_MAJOR_OPERATINGSYSTEM          = 0x00020000
   2127 	SHTDN_REASON_MAJOR_SOFTWARE                 = 0x00030000
   2128 	SHTDN_REASON_MAJOR_APPLICATION              = 0x00040000
   2129 	SHTDN_REASON_MAJOR_SYSTEM                   = 0x00050000
   2130 	SHTDN_REASON_MAJOR_POWER                    = 0x00060000
   2131 	SHTDN_REASON_MAJOR_LEGACY_API               = 0x00070000
   2132 	SHTDN_REASON_MINOR_OTHER                    = 0x00000000
   2133 	SHTDN_REASON_MINOR_NONE                     = 0x000000ff
   2134 	SHTDN_REASON_MINOR_MAINTENANCE              = 0x00000001
   2135 	SHTDN_REASON_MINOR_INSTALLATION             = 0x00000002
   2136 	SHTDN_REASON_MINOR_UPGRADE                  = 0x00000003
   2137 	SHTDN_REASON_MINOR_RECONFIG                 = 0x00000004
   2138 	SHTDN_REASON_MINOR_HUNG                     = 0x00000005
   2139 	SHTDN_REASON_MINOR_UNSTABLE                 = 0x00000006
   2140 	SHTDN_REASON_MINOR_DISK                     = 0x00000007
   2141 	SHTDN_REASON_MINOR_PROCESSOR                = 0x00000008
   2142 	SHTDN_REASON_MINOR_NETWORKCARD              = 0x00000009
   2143 	SHTDN_REASON_MINOR_POWER_SUPPLY             = 0x0000000a
   2144 	SHTDN_REASON_MINOR_CORDUNPLUGGED            = 0x0000000b
   2145 	SHTDN_REASON_MINOR_ENVIRONMENT              = 0x0000000c
   2146 	SHTDN_REASON_MINOR_HARDWARE_DRIVER          = 0x0000000d
   2147 	SHTDN_REASON_MINOR_OTHERDRIVER              = 0x0000000e
   2148 	SHTDN_REASON_MINOR_BLUESCREEN               = 0x0000000F
   2149 	SHTDN_REASON_MINOR_SERVICEPACK              = 0x00000010
   2150 	SHTDN_REASON_MINOR_HOTFIX                   = 0x00000011
   2151 	SHTDN_REASON_MINOR_SECURITYFIX              = 0x00000012
   2152 	SHTDN_REASON_MINOR_SECURITY                 = 0x00000013
   2153 	SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY     = 0x00000014
   2154 	SHTDN_REASON_MINOR_WMI                      = 0x00000015
   2155 	SHTDN_REASON_MINOR_SERVICEPACK_UNINSTALL    = 0x00000016
   2156 	SHTDN_REASON_MINOR_HOTFIX_UNINSTALL         = 0x00000017
   2157 	SHTDN_REASON_MINOR_SECURITYFIX_UNINSTALL    = 0x00000018
   2158 	SHTDN_REASON_MINOR_MMC                      = 0x00000019
   2159 	SHTDN_REASON_MINOR_SYSTEMRESTORE            = 0x0000001a
   2160 	SHTDN_REASON_MINOR_TERMSRV                  = 0x00000020
   2161 	SHTDN_REASON_MINOR_DC_PROMOTION             = 0x00000021
   2162 	SHTDN_REASON_MINOR_DC_DEMOTION              = 0x00000022
   2163 	SHTDN_REASON_UNKNOWN                        = SHTDN_REASON_MINOR_NONE
   2164 	SHTDN_REASON_LEGACY_API                     = SHTDN_REASON_MAJOR_LEGACY_API | SHTDN_REASON_FLAG_PLANNED
   2165 	SHTDN_REASON_VALID_BIT_MASK                 = 0xc0ffffff
   2166 
   2167 	SHUTDOWN_NORETRY = 0x1
   2168 )
   2169 
   2170 // Flags used for GetModuleHandleEx
   2171 const (
   2172 	GET_MODULE_HANDLE_EX_FLAG_PIN                = 1
   2173 	GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT = 2
   2174 	GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS       = 4
   2175 )
   2176 
   2177 // MUI function flag values
   2178 const (
   2179 	MUI_LANGUAGE_ID                    = 0x4
   2180 	MUI_LANGUAGE_NAME                  = 0x8
   2181 	MUI_MERGE_SYSTEM_FALLBACK          = 0x10
   2182 	MUI_MERGE_USER_FALLBACK            = 0x20
   2183 	MUI_UI_FALLBACK                    = MUI_MERGE_SYSTEM_FALLBACK | MUI_MERGE_USER_FALLBACK
   2184 	MUI_THREAD_LANGUAGES               = 0x40
   2185 	MUI_CONSOLE_FILTER                 = 0x100
   2186 	MUI_COMPLEX_SCRIPT_FILTER          = 0x200
   2187 	MUI_RESET_FILTERS                  = 0x001
   2188 	MUI_USER_PREFERRED_UI_LANGUAGES    = 0x10
   2189 	MUI_USE_INSTALLED_LANGUAGES        = 0x20
   2190 	MUI_USE_SEARCH_ALL_LANGUAGES       = 0x40
   2191 	MUI_LANG_NEUTRAL_PE_FILE           = 0x100
   2192 	MUI_NON_LANG_NEUTRAL_FILE          = 0x200
   2193 	MUI_MACHINE_LANGUAGE_SETTINGS      = 0x400
   2194 	MUI_FILETYPE_NOT_LANGUAGE_NEUTRAL  = 0x001
   2195 	MUI_FILETYPE_LANGUAGE_NEUTRAL_MAIN = 0x002
   2196 	MUI_FILETYPE_LANGUAGE_NEUTRAL_MUI  = 0x004
   2197 	MUI_QUERY_TYPE                     = 0x001
   2198 	MUI_QUERY_CHECKSUM                 = 0x002
   2199 	MUI_QUERY_LANGUAGE_NAME            = 0x004
   2200 	MUI_QUERY_RESOURCE_TYPES           = 0x008
   2201 	MUI_FILEINFO_VERSION               = 0x001
   2202 
   2203 	MUI_FULL_LANGUAGE      = 0x01
   2204 	MUI_PARTIAL_LANGUAGE   = 0x02
   2205 	MUI_LIP_LANGUAGE       = 0x04
   2206 	MUI_LANGUAGE_INSTALLED = 0x20
   2207 	MUI_LANGUAGE_LICENSED  = 0x40
   2208 )
   2209 
   2210 // FILE_INFO_BY_HANDLE_CLASS constants for SetFileInformationByHandle/GetFileInformationByHandleEx
   2211 const (
   2212 	FileBasicInfo                  = 0
   2213 	FileStandardInfo               = 1
   2214 	FileNameInfo                   = 2
   2215 	FileRenameInfo                 = 3
   2216 	FileDispositionInfo            = 4
   2217 	FileAllocationInfo             = 5
   2218 	FileEndOfFileInfo              = 6
   2219 	FileStreamInfo                 = 7
   2220 	FileCompressionInfo            = 8
   2221 	FileAttributeTagInfo           = 9
   2222 	FileIdBothDirectoryInfo        = 10
   2223 	FileIdBothDirectoryRestartInfo = 11
   2224 	FileIoPriorityHintInfo         = 12
   2225 	FileRemoteProtocolInfo         = 13
   2226 	FileFullDirectoryInfo          = 14
   2227 	FileFullDirectoryRestartInfo   = 15
   2228 	FileStorageInfo                = 16
   2229 	FileAlignmentInfo              = 17
   2230 	FileIdInfo                     = 18
   2231 	FileIdExtdDirectoryInfo        = 19
   2232 	FileIdExtdDirectoryRestartInfo = 20
   2233 	FileDispositionInfoEx          = 21
   2234 	FileRenameInfoEx               = 22
   2235 	FileCaseSensitiveInfo          = 23
   2236 	FileNormalizedNameInfo         = 24
   2237 )
   2238 
   2239 // LoadLibrary flags for determining from where to search for a DLL
   2240 const (
   2241 	DONT_RESOLVE_DLL_REFERENCES               = 0x1
   2242 	LOAD_LIBRARY_AS_DATAFILE                  = 0x2
   2243 	LOAD_WITH_ALTERED_SEARCH_PATH             = 0x8
   2244 	LOAD_IGNORE_CODE_AUTHZ_LEVEL              = 0x10
   2245 	LOAD_LIBRARY_AS_IMAGE_RESOURCE            = 0x20
   2246 	LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE        = 0x40
   2247 	LOAD_LIBRARY_REQUIRE_SIGNED_TARGET        = 0x80
   2248 	LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR          = 0x100
   2249 	LOAD_LIBRARY_SEARCH_APPLICATION_DIR       = 0x200
   2250 	LOAD_LIBRARY_SEARCH_USER_DIRS             = 0x400
   2251 	LOAD_LIBRARY_SEARCH_SYSTEM32              = 0x800
   2252 	LOAD_LIBRARY_SEARCH_DEFAULT_DIRS          = 0x1000
   2253 	LOAD_LIBRARY_SAFE_CURRENT_DIRS            = 0x00002000
   2254 	LOAD_LIBRARY_SEARCH_SYSTEM32_NO_FORWARDER = 0x00004000
   2255 	LOAD_LIBRARY_OS_INTEGRITY_CONTINUITY      = 0x00008000
   2256 )
   2257 
   2258 // RegNotifyChangeKeyValue notifyFilter flags.
   2259 const (
   2260 	// REG_NOTIFY_CHANGE_NAME notifies the caller if a subkey is added or deleted.
   2261 	REG_NOTIFY_CHANGE_NAME = 0x00000001
   2262 
   2263 	// REG_NOTIFY_CHANGE_ATTRIBUTES notifies the caller of changes to the attributes of the key, such as the security descriptor information.
   2264 	REG_NOTIFY_CHANGE_ATTRIBUTES = 0x00000002
   2265 
   2266 	// 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.
   2267 	REG_NOTIFY_CHANGE_LAST_SET = 0x00000004
   2268 
   2269 	// REG_NOTIFY_CHANGE_SECURITY notifies the caller of changes to the security descriptor of the key.
   2270 	REG_NOTIFY_CHANGE_SECURITY = 0x00000008
   2271 
   2272 	// 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.
   2273 	REG_NOTIFY_THREAD_AGNOSTIC = 0x10000000
   2274 )
   2275 
   2276 type CommTimeouts struct {
   2277 	ReadIntervalTimeout         uint32
   2278 	ReadTotalTimeoutMultiplier  uint32
   2279 	ReadTotalTimeoutConstant    uint32
   2280 	WriteTotalTimeoutMultiplier uint32
   2281 	WriteTotalTimeoutConstant   uint32
   2282 }
   2283 
   2284 // NTUnicodeString is a UTF-16 string for NT native APIs, corresponding to UNICODE_STRING.
   2285 type NTUnicodeString struct {
   2286 	Length        uint16
   2287 	MaximumLength uint16
   2288 	Buffer        *uint16
   2289 }
   2290 
   2291 // NTString is an ANSI string for NT native APIs, corresponding to STRING.
   2292 type NTString struct {
   2293 	Length        uint16
   2294 	MaximumLength uint16
   2295 	Buffer        *byte
   2296 }
   2297 
   2298 type LIST_ENTRY struct {
   2299 	Flink *LIST_ENTRY
   2300 	Blink *LIST_ENTRY
   2301 }
   2302 
   2303 type LDR_DATA_TABLE_ENTRY struct {
   2304 	reserved1          [2]uintptr
   2305 	InMemoryOrderLinks LIST_ENTRY
   2306 	reserved2          [2]uintptr
   2307 	DllBase            uintptr
   2308 	reserved3          [2]uintptr
   2309 	FullDllName        NTUnicodeString
   2310 	reserved4          [8]byte
   2311 	reserved5          [3]uintptr
   2312 	reserved6          uintptr
   2313 	TimeDateStamp      uint32
   2314 }
   2315 
   2316 type PEB_LDR_DATA struct {
   2317 	reserved1               [8]byte
   2318 	reserved2               [3]uintptr
   2319 	InMemoryOrderModuleList LIST_ENTRY
   2320 }
   2321 
   2322 type CURDIR struct {
   2323 	DosPath NTUnicodeString
   2324 	Handle  Handle
   2325 }
   2326 
   2327 type RTL_DRIVE_LETTER_CURDIR struct {
   2328 	Flags     uint16
   2329 	Length    uint16
   2330 	TimeStamp uint32
   2331 	DosPath   NTString
   2332 }
   2333 
   2334 type RTL_USER_PROCESS_PARAMETERS struct {
   2335 	MaximumLength, Length uint32
   2336 
   2337 	Flags, DebugFlags uint32
   2338 
   2339 	ConsoleHandle                                Handle
   2340 	ConsoleFlags                                 uint32
   2341 	StandardInput, StandardOutput, StandardError Handle
   2342 
   2343 	CurrentDirectory CURDIR
   2344 	DllPath          NTUnicodeString
   2345 	ImagePathName    NTUnicodeString
   2346 	CommandLine      NTUnicodeString
   2347 	Environment      unsafe.Pointer
   2348 
   2349 	StartingX, StartingY, CountX, CountY, CountCharsX, CountCharsY, FillAttribute uint32
   2350 
   2351 	WindowFlags, ShowWindowFlags                     uint32
   2352 	WindowTitle, DesktopInfo, ShellInfo, RuntimeData NTUnicodeString
   2353 	CurrentDirectories                               [32]RTL_DRIVE_LETTER_CURDIR
   2354 
   2355 	EnvironmentSize, EnvironmentVersion uintptr
   2356 
   2357 	PackageDependencyData unsafe.Pointer
   2358 	ProcessGroupId        uint32
   2359 	LoaderThreads         uint32
   2360 
   2361 	RedirectionDllName               NTUnicodeString
   2362 	HeapPartitionName                NTUnicodeString
   2363 	DefaultThreadpoolCpuSetMasks     uintptr
   2364 	DefaultThreadpoolCpuSetMaskCount uint32
   2365 }
   2366 
   2367 type PEB struct {
   2368 	reserved1              [2]byte
   2369 	BeingDebugged          byte
   2370 	BitField               byte
   2371 	reserved3              uintptr
   2372 	ImageBaseAddress       uintptr
   2373 	Ldr                    *PEB_LDR_DATA
   2374 	ProcessParameters      *RTL_USER_PROCESS_PARAMETERS
   2375 	reserved4              [3]uintptr
   2376 	AtlThunkSListPtr       uintptr
   2377 	reserved5              uintptr
   2378 	reserved6              uint32
   2379 	reserved7              uintptr
   2380 	reserved8              uint32
   2381 	AtlThunkSListPtr32     uint32
   2382 	reserved9              [45]uintptr
   2383 	reserved10             [96]byte
   2384 	PostProcessInitRoutine uintptr
   2385 	reserved11             [128]byte
   2386 	reserved12             [1]uintptr
   2387 	SessionId              uint32
   2388 }
   2389 
   2390 type OBJECT_ATTRIBUTES struct {
   2391 	Length             uint32
   2392 	RootDirectory      Handle
   2393 	ObjectName         *NTUnicodeString
   2394 	Attributes         uint32
   2395 	SecurityDescriptor *SECURITY_DESCRIPTOR
   2396 	SecurityQoS        *SECURITY_QUALITY_OF_SERVICE
   2397 }
   2398 
   2399 // Values for the Attributes member of OBJECT_ATTRIBUTES.
   2400 const (
   2401 	OBJ_INHERIT                       = 0x00000002
   2402 	OBJ_PERMANENT                     = 0x00000010
   2403 	OBJ_EXCLUSIVE                     = 0x00000020
   2404 	OBJ_CASE_INSENSITIVE              = 0x00000040
   2405 	OBJ_OPENIF                        = 0x00000080
   2406 	OBJ_OPENLINK                      = 0x00000100
   2407 	OBJ_KERNEL_HANDLE                 = 0x00000200
   2408 	OBJ_FORCE_ACCESS_CHECK            = 0x00000400
   2409 	OBJ_IGNORE_IMPERSONATED_DEVICEMAP = 0x00000800
   2410 	OBJ_DONT_REPARSE                  = 0x00001000
   2411 	OBJ_VALID_ATTRIBUTES              = 0x00001FF2
   2412 )
   2413 
   2414 type IO_STATUS_BLOCK struct {
   2415 	Status      NTStatus
   2416 	Information uintptr
   2417 }
   2418 
   2419 type RTLP_CURDIR_REF struct {
   2420 	RefCount int32
   2421 	Handle   Handle
   2422 }
   2423 
   2424 type RTL_RELATIVE_NAME struct {
   2425 	RelativeName        NTUnicodeString
   2426 	ContainingDirectory Handle
   2427 	CurDirRef           *RTLP_CURDIR_REF
   2428 }
   2429 
   2430 const (
   2431 	// CreateDisposition flags for NtCreateFile and NtCreateNamedPipeFile.
   2432 	FILE_SUPERSEDE           = 0x00000000
   2433 	FILE_OPEN                = 0x00000001
   2434 	FILE_CREATE              = 0x00000002
   2435 	FILE_OPEN_IF             = 0x00000003
   2436 	FILE_OVERWRITE           = 0x00000004
   2437 	FILE_OVERWRITE_IF        = 0x00000005
   2438 	FILE_MAXIMUM_DISPOSITION = 0x00000005
   2439 
   2440 	// CreateOptions flags for NtCreateFile and NtCreateNamedPipeFile.
   2441 	FILE_DIRECTORY_FILE            = 0x00000001
   2442 	FILE_WRITE_THROUGH             = 0x00000002
   2443 	FILE_SEQUENTIAL_ONLY           = 0x00000004
   2444 	FILE_NO_INTERMEDIATE_BUFFERING = 0x00000008
   2445 	FILE_SYNCHRONOUS_IO_ALERT      = 0x00000010
   2446 	FILE_SYNCHRONOUS_IO_NONALERT   = 0x00000020
   2447 	FILE_NON_DIRECTORY_FILE        = 0x00000040
   2448 	FILE_CREATE_TREE_CONNECTION    = 0x00000080
   2449 	FILE_COMPLETE_IF_OPLOCKED      = 0x00000100
   2450 	FILE_NO_EA_KNOWLEDGE           = 0x00000200
   2451 	FILE_OPEN_REMOTE_INSTANCE      = 0x00000400
   2452 	FILE_RANDOM_ACCESS             = 0x00000800
   2453 	FILE_DELETE_ON_CLOSE           = 0x00001000
   2454 	FILE_OPEN_BY_FILE_ID           = 0x00002000
   2455 	FILE_OPEN_FOR_BACKUP_INTENT    = 0x00004000
   2456 	FILE_NO_COMPRESSION            = 0x00008000
   2457 	FILE_OPEN_REQUIRING_OPLOCK     = 0x00010000
   2458 	FILE_DISALLOW_EXCLUSIVE        = 0x00020000
   2459 	FILE_RESERVE_OPFILTER          = 0x00100000
   2460 	FILE_OPEN_REPARSE_POINT        = 0x00200000
   2461 	FILE_OPEN_NO_RECALL            = 0x00400000
   2462 	FILE_OPEN_FOR_FREE_SPACE_QUERY = 0x00800000
   2463 
   2464 	// Parameter constants for NtCreateNamedPipeFile.
   2465 
   2466 	FILE_PIPE_BYTE_STREAM_TYPE = 0x00000000
   2467 	FILE_PIPE_MESSAGE_TYPE     = 0x00000001
   2468 
   2469 	FILE_PIPE_ACCEPT_REMOTE_CLIENTS = 0x00000000
   2470 	FILE_PIPE_REJECT_REMOTE_CLIENTS = 0x00000002
   2471 
   2472 	FILE_PIPE_TYPE_VALID_MASK = 0x00000003
   2473 
   2474 	FILE_PIPE_BYTE_STREAM_MODE = 0x00000000
   2475 	FILE_PIPE_MESSAGE_MODE     = 0x00000001
   2476 
   2477 	FILE_PIPE_QUEUE_OPERATION    = 0x00000000
   2478 	FILE_PIPE_COMPLETE_OPERATION = 0x00000001
   2479 
   2480 	FILE_PIPE_INBOUND     = 0x00000000
   2481 	FILE_PIPE_OUTBOUND    = 0x00000001
   2482 	FILE_PIPE_FULL_DUPLEX = 0x00000002
   2483 
   2484 	FILE_PIPE_DISCONNECTED_STATE = 0x00000001
   2485 	FILE_PIPE_LISTENING_STATE    = 0x00000002
   2486 	FILE_PIPE_CONNECTED_STATE    = 0x00000003
   2487 	FILE_PIPE_CLOSING_STATE      = 0x00000004
   2488 
   2489 	FILE_PIPE_CLIENT_END = 0x00000000
   2490 	FILE_PIPE_SERVER_END = 0x00000001
   2491 )
   2492 
   2493 // ProcessInformationClasses for NtQueryInformationProcess and NtSetInformationProcess.
   2494 const (
   2495 	ProcessBasicInformation = iota
   2496 	ProcessQuotaLimits
   2497 	ProcessIoCounters
   2498 	ProcessVmCounters
   2499 	ProcessTimes
   2500 	ProcessBasePriority
   2501 	ProcessRaisePriority
   2502 	ProcessDebugPort
   2503 	ProcessExceptionPort
   2504 	ProcessAccessToken
   2505 	ProcessLdtInformation
   2506 	ProcessLdtSize
   2507 	ProcessDefaultHardErrorMode
   2508 	ProcessIoPortHandlers
   2509 	ProcessPooledUsageAndLimits
   2510 	ProcessWorkingSetWatch
   2511 	ProcessUserModeIOPL
   2512 	ProcessEnableAlignmentFaultFixup
   2513 	ProcessPriorityClass
   2514 	ProcessWx86Information
   2515 	ProcessHandleCount
   2516 	ProcessAffinityMask
   2517 	ProcessPriorityBoost
   2518 	ProcessDeviceMap
   2519 	ProcessSessionInformation
   2520 	ProcessForegroundInformation
   2521 	ProcessWow64Information
   2522 	ProcessImageFileName
   2523 	ProcessLUIDDeviceMapsEnabled
   2524 	ProcessBreakOnTermination
   2525 	ProcessDebugObjectHandle
   2526 	ProcessDebugFlags
   2527 	ProcessHandleTracing
   2528 	ProcessIoPriority
   2529 	ProcessExecuteFlags
   2530 	ProcessTlsInformation
   2531 	ProcessCookie
   2532 	ProcessImageInformation
   2533 	ProcessCycleTime
   2534 	ProcessPagePriority
   2535 	ProcessInstrumentationCallback
   2536 	ProcessThreadStackAllocation
   2537 	ProcessWorkingSetWatchEx
   2538 	ProcessImageFileNameWin32
   2539 	ProcessImageFileMapping
   2540 	ProcessAffinityUpdateMode
   2541 	ProcessMemoryAllocationMode
   2542 	ProcessGroupInformation
   2543 	ProcessTokenVirtualizationEnabled
   2544 	ProcessConsoleHostProcess
   2545 	ProcessWindowInformation
   2546 	ProcessHandleInformation
   2547 	ProcessMitigationPolicy
   2548 	ProcessDynamicFunctionTableInformation
   2549 	ProcessHandleCheckingMode
   2550 	ProcessKeepAliveCount
   2551 	ProcessRevokeFileHandles
   2552 	ProcessWorkingSetControl
   2553 	ProcessHandleTable
   2554 	ProcessCheckStackExtentsMode
   2555 	ProcessCommandLineInformation
   2556 	ProcessProtectionInformation
   2557 	ProcessMemoryExhaustion
   2558 	ProcessFaultInformation
   2559 	ProcessTelemetryIdInformation
   2560 	ProcessCommitReleaseInformation
   2561 	ProcessDefaultCpuSetsInformation
   2562 	ProcessAllowedCpuSetsInformation
   2563 	ProcessSubsystemProcess
   2564 	ProcessJobMemoryInformation
   2565 	ProcessInPrivate
   2566 	ProcessRaiseUMExceptionOnInvalidHandleClose
   2567 	ProcessIumChallengeResponse
   2568 	ProcessChildProcessInformation
   2569 	ProcessHighGraphicsPriorityInformation
   2570 	ProcessSubsystemInformation
   2571 	ProcessEnergyValues
   2572 	ProcessActivityThrottleState
   2573 	ProcessActivityThrottlePolicy
   2574 	ProcessWin32kSyscallFilterInformation
   2575 	ProcessDisableSystemAllowedCpuSets
   2576 	ProcessWakeInformation
   2577 	ProcessEnergyTrackingState
   2578 	ProcessManageWritesToExecutableMemory
   2579 	ProcessCaptureTrustletLiveDump
   2580 	ProcessTelemetryCoverage
   2581 	ProcessEnclaveInformation
   2582 	ProcessEnableReadWriteVmLogging
   2583 	ProcessUptimeInformation
   2584 	ProcessImageSection
   2585 	ProcessDebugAuthInformation
   2586 	ProcessSystemResourceManagement
   2587 	ProcessSequenceNumber
   2588 	ProcessLoaderDetour
   2589 	ProcessSecurityDomainInformation
   2590 	ProcessCombineSecurityDomainsInformation
   2591 	ProcessEnableLogging
   2592 	ProcessLeapSecondInformation
   2593 	ProcessFiberShadowStackAllocation
   2594 	ProcessFreeFiberShadowStackAllocation
   2595 	ProcessAltSystemCallInformation
   2596 	ProcessDynamicEHContinuationTargets
   2597 	ProcessDynamicEnforcedCetCompatibleRanges
   2598 )
   2599 
   2600 type PROCESS_BASIC_INFORMATION struct {
   2601 	ExitStatus                   NTStatus
   2602 	PebBaseAddress               *PEB
   2603 	AffinityMask                 uintptr
   2604 	BasePriority                 int32
   2605 	UniqueProcessId              uintptr
   2606 	InheritedFromUniqueProcessId uintptr
   2607 }
   2608 
   2609 // Constants for LocalAlloc flags.
   2610 const (
   2611 	LMEM_FIXED          = 0x0
   2612 	LMEM_MOVEABLE       = 0x2
   2613 	LMEM_NOCOMPACT      = 0x10
   2614 	LMEM_NODISCARD      = 0x20
   2615 	LMEM_ZEROINIT       = 0x40
   2616 	LMEM_MODIFY         = 0x80
   2617 	LMEM_DISCARDABLE    = 0xf00
   2618 	LMEM_VALID_FLAGS    = 0xf72
   2619 	LMEM_INVALID_HANDLE = 0x8000
   2620 	LHND                = LMEM_MOVEABLE | LMEM_ZEROINIT
   2621 	LPTR                = LMEM_FIXED | LMEM_ZEROINIT
   2622 	NONZEROLHND         = LMEM_MOVEABLE
   2623 	NONZEROLPTR         = LMEM_FIXED
   2624 )
   2625 
   2626 // Constants for the CreateNamedPipe-family of functions.
   2627 const (
   2628 	PIPE_ACCESS_INBOUND  = 0x1
   2629 	PIPE_ACCESS_OUTBOUND = 0x2
   2630 	PIPE_ACCESS_DUPLEX   = 0x3
   2631 
   2632 	PIPE_CLIENT_END = 0x0
   2633 	PIPE_SERVER_END = 0x1
   2634 
   2635 	PIPE_WAIT                  = 0x0
   2636 	PIPE_NOWAIT                = 0x1
   2637 	PIPE_READMODE_BYTE         = 0x0
   2638 	PIPE_READMODE_MESSAGE      = 0x2
   2639 	PIPE_TYPE_BYTE             = 0x0
   2640 	PIPE_TYPE_MESSAGE          = 0x4
   2641 	PIPE_ACCEPT_REMOTE_CLIENTS = 0x0
   2642 	PIPE_REJECT_REMOTE_CLIENTS = 0x8
   2643 
   2644 	PIPE_UNLIMITED_INSTANCES = 255
   2645 )
   2646 
   2647 // Constants for security attributes when opening named pipes.
   2648 const (
   2649 	SECURITY_ANONYMOUS      = SecurityAnonymous << 16
   2650 	SECURITY_IDENTIFICATION = SecurityIdentification << 16
   2651 	SECURITY_IMPERSONATION  = SecurityImpersonation << 16
   2652 	SECURITY_DELEGATION     = SecurityDelegation << 16
   2653 
   2654 	SECURITY_CONTEXT_TRACKING = 0x40000
   2655 	SECURITY_EFFECTIVE_ONLY   = 0x80000
   2656 
   2657 	SECURITY_SQOS_PRESENT     = 0x100000
   2658 	SECURITY_VALID_SQOS_FLAGS = 0x1f0000
   2659 )
   2660 
   2661 // ResourceID represents a 16-bit resource identifier, traditionally created with the MAKEINTRESOURCE macro.
   2662 type ResourceID uint16
   2663 
   2664 // ResourceIDOrString must be either a ResourceID, to specify a resource or resource type by ID,
   2665 // or a string, to specify a resource or resource type by name.
   2666 type ResourceIDOrString interface{}
   2667 
   2668 // Predefined resource names and types.
   2669 var (
   2670 	// Predefined names.
   2671 	CREATEPROCESS_MANIFEST_RESOURCE_ID                 ResourceID = 1
   2672 	ISOLATIONAWARE_MANIFEST_RESOURCE_ID                ResourceID = 2
   2673 	ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID ResourceID = 3
   2674 	ISOLATIONPOLICY_MANIFEST_RESOURCE_ID               ResourceID = 4
   2675 	ISOLATIONPOLICY_BROWSER_MANIFEST_RESOURCE_ID       ResourceID = 5
   2676 	MINIMUM_RESERVED_MANIFEST_RESOURCE_ID              ResourceID = 1  // inclusive
   2677 	MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID              ResourceID = 16 // inclusive
   2678 
   2679 	// Predefined types.
   2680 	RT_CURSOR       ResourceID = 1
   2681 	RT_BITMAP       ResourceID = 2
   2682 	RT_ICON         ResourceID = 3
   2683 	RT_MENU         ResourceID = 4
   2684 	RT_DIALOG       ResourceID = 5
   2685 	RT_STRING       ResourceID = 6
   2686 	RT_FONTDIR      ResourceID = 7
   2687 	RT_FONT         ResourceID = 8
   2688 	RT_ACCELERATOR  ResourceID = 9
   2689 	RT_RCDATA       ResourceID = 10
   2690 	RT_MESSAGETABLE ResourceID = 11
   2691 	RT_GROUP_CURSOR ResourceID = 12
   2692 	RT_GROUP_ICON   ResourceID = 14
   2693 	RT_VERSION      ResourceID = 16
   2694 	RT_DLGINCLUDE   ResourceID = 17
   2695 	RT_PLUGPLAY     ResourceID = 19
   2696 	RT_VXD          ResourceID = 20
   2697 	RT_ANICURSOR    ResourceID = 21
   2698 	RT_ANIICON      ResourceID = 22
   2699 	RT_HTML         ResourceID = 23
   2700 	RT_MANIFEST     ResourceID = 24
   2701 )
   2702 
   2703 type COAUTHIDENTITY struct {
   2704 	User           *uint16
   2705 	UserLength     uint32
   2706 	Domain         *uint16
   2707 	DomainLength   uint32
   2708 	Password       *uint16
   2709 	PasswordLength uint32
   2710 	Flags          uint32
   2711 }
   2712 
   2713 type COAUTHINFO struct {
   2714 	AuthnSvc           uint32
   2715 	AuthzSvc           uint32
   2716 	ServerPrincName    *uint16
   2717 	AuthnLevel         uint32
   2718 	ImpersonationLevel uint32
   2719 	AuthIdentityData   *COAUTHIDENTITY
   2720 	Capabilities       uint32
   2721 }
   2722 
   2723 type COSERVERINFO struct {
   2724 	Reserved1 uint32
   2725 	Aame      *uint16
   2726 	AuthInfo  *COAUTHINFO
   2727 	Reserved2 uint32
   2728 }
   2729 
   2730 type BIND_OPTS3 struct {
   2731 	CbStruct          uint32
   2732 	Flags             uint32
   2733 	Mode              uint32
   2734 	TickCountDeadline uint32
   2735 	TrackFlags        uint32
   2736 	ClassContext      uint32
   2737 	Locale            uint32
   2738 	ServerInfo        *COSERVERINFO
   2739 	Hwnd              HWND
   2740 }
   2741 
   2742 const (
   2743 	CLSCTX_INPROC_SERVER          = 0x1
   2744 	CLSCTX_INPROC_HANDLER         = 0x2
   2745 	CLSCTX_LOCAL_SERVER           = 0x4
   2746 	CLSCTX_INPROC_SERVER16        = 0x8
   2747 	CLSCTX_REMOTE_SERVER          = 0x10
   2748 	CLSCTX_INPROC_HANDLER16       = 0x20
   2749 	CLSCTX_RESERVED1              = 0x40
   2750 	CLSCTX_RESERVED2              = 0x80
   2751 	CLSCTX_RESERVED3              = 0x100
   2752 	CLSCTX_RESERVED4              = 0x200
   2753 	CLSCTX_NO_CODE_DOWNLOAD       = 0x400
   2754 	CLSCTX_RESERVED5              = 0x800
   2755 	CLSCTX_NO_CUSTOM_MARSHAL      = 0x1000
   2756 	CLSCTX_ENABLE_CODE_DOWNLOAD   = 0x2000
   2757 	CLSCTX_NO_FAILURE_LOG         = 0x4000
   2758 	CLSCTX_DISABLE_AAA            = 0x8000
   2759 	CLSCTX_ENABLE_AAA             = 0x10000
   2760 	CLSCTX_FROM_DEFAULT_CONTEXT   = 0x20000
   2761 	CLSCTX_ACTIVATE_32_BIT_SERVER = 0x40000
   2762 	CLSCTX_ACTIVATE_64_BIT_SERVER = 0x80000
   2763 	CLSCTX_ENABLE_CLOAKING        = 0x100000
   2764 	CLSCTX_APPCONTAINER           = 0x400000
   2765 	CLSCTX_ACTIVATE_AAA_AS_IU     = 0x800000
   2766 	CLSCTX_PS_DLL                 = 0x80000000
   2767 
   2768 	COINIT_MULTITHREADED     = 0x0
   2769 	COINIT_APARTMENTTHREADED = 0x2
   2770 	COINIT_DISABLE_OLE1DDE   = 0x4
   2771 	COINIT_SPEED_OVER_MEMORY = 0x8
   2772 )
   2773 
   2774 // Flag for QueryFullProcessImageName.
   2775 const PROCESS_NAME_NATIVE = 1