github.com/Kalvelign/golang-windows-sys-lib@v0.0.0-20221121121202-63da651435e1/windows/types_windows.go (about)

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