Gibheer
fa05045d31
This is the import from the separate monfront repository. The history could not be imported, but this should suffice.
2776 lines
84 KiB
Go
2776 lines
84 KiB
Go
// Copyright 2011 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package windows
|
|
|
|
import (
|
|
"net"
|
|
"syscall"
|
|
"unsafe"
|
|
)
|
|
|
|
// NTStatus corresponds with NTSTATUS, error values returned by ntdll.dll and
|
|
// other native functions.
|
|
type NTStatus uint32
|
|
|
|
const (
|
|
// Invented values to support what package os expects.
|
|
O_RDONLY = 0x00000
|
|
O_WRONLY = 0x00001
|
|
O_RDWR = 0x00002
|
|
O_CREAT = 0x00040
|
|
O_EXCL = 0x00080
|
|
O_NOCTTY = 0x00100
|
|
O_TRUNC = 0x00200
|
|
O_NONBLOCK = 0x00800
|
|
O_APPEND = 0x00400
|
|
O_SYNC = 0x01000
|
|
O_ASYNC = 0x02000
|
|
O_CLOEXEC = 0x80000
|
|
)
|
|
|
|
const (
|
|
// More invented values for signals
|
|
SIGHUP = Signal(0x1)
|
|
SIGINT = Signal(0x2)
|
|
SIGQUIT = Signal(0x3)
|
|
SIGILL = Signal(0x4)
|
|
SIGTRAP = Signal(0x5)
|
|
SIGABRT = Signal(0x6)
|
|
SIGBUS = Signal(0x7)
|
|
SIGFPE = Signal(0x8)
|
|
SIGKILL = Signal(0x9)
|
|
SIGSEGV = Signal(0xb)
|
|
SIGPIPE = Signal(0xd)
|
|
SIGALRM = Signal(0xe)
|
|
SIGTERM = Signal(0xf)
|
|
)
|
|
|
|
var signals = [...]string{
|
|
1: "hangup",
|
|
2: "interrupt",
|
|
3: "quit",
|
|
4: "illegal instruction",
|
|
5: "trace/breakpoint trap",
|
|
6: "aborted",
|
|
7: "bus error",
|
|
8: "floating point exception",
|
|
9: "killed",
|
|
10: "user defined signal 1",
|
|
11: "segmentation fault",
|
|
12: "user defined signal 2",
|
|
13: "broken pipe",
|
|
14: "alarm clock",
|
|
15: "terminated",
|
|
}
|
|
|
|
const (
|
|
FILE_LIST_DIRECTORY = 0x00000001
|
|
FILE_APPEND_DATA = 0x00000004
|
|
FILE_WRITE_ATTRIBUTES = 0x00000100
|
|
|
|
FILE_SHARE_READ = 0x00000001
|
|
FILE_SHARE_WRITE = 0x00000002
|
|
FILE_SHARE_DELETE = 0x00000004
|
|
|
|
FILE_ATTRIBUTE_READONLY = 0x00000001
|
|
FILE_ATTRIBUTE_HIDDEN = 0x00000002
|
|
FILE_ATTRIBUTE_SYSTEM = 0x00000004
|
|
FILE_ATTRIBUTE_DIRECTORY = 0x00000010
|
|
FILE_ATTRIBUTE_ARCHIVE = 0x00000020
|
|
FILE_ATTRIBUTE_DEVICE = 0x00000040
|
|
FILE_ATTRIBUTE_NORMAL = 0x00000080
|
|
FILE_ATTRIBUTE_TEMPORARY = 0x00000100
|
|
FILE_ATTRIBUTE_SPARSE_FILE = 0x00000200
|
|
FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400
|
|
FILE_ATTRIBUTE_COMPRESSED = 0x00000800
|
|
FILE_ATTRIBUTE_OFFLINE = 0x00001000
|
|
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x00002000
|
|
FILE_ATTRIBUTE_ENCRYPTED = 0x00004000
|
|
FILE_ATTRIBUTE_INTEGRITY_STREAM = 0x00008000
|
|
FILE_ATTRIBUTE_VIRTUAL = 0x00010000
|
|
FILE_ATTRIBUTE_NO_SCRUB_DATA = 0x00020000
|
|
FILE_ATTRIBUTE_RECALL_ON_OPEN = 0x00040000
|
|
FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS = 0x00400000
|
|
|
|
INVALID_FILE_ATTRIBUTES = 0xffffffff
|
|
|
|
CREATE_NEW = 1
|
|
CREATE_ALWAYS = 2
|
|
OPEN_EXISTING = 3
|
|
OPEN_ALWAYS = 4
|
|
TRUNCATE_EXISTING = 5
|
|
|
|
FILE_FLAG_OPEN_REQUIRING_OPLOCK = 0x00040000
|
|
FILE_FLAG_FIRST_PIPE_INSTANCE = 0x00080000
|
|
FILE_FLAG_OPEN_NO_RECALL = 0x00100000
|
|
FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000
|
|
FILE_FLAG_SESSION_AWARE = 0x00800000
|
|
FILE_FLAG_POSIX_SEMANTICS = 0x01000000
|
|
FILE_FLAG_BACKUP_SEMANTICS = 0x02000000
|
|
FILE_FLAG_DELETE_ON_CLOSE = 0x04000000
|
|
FILE_FLAG_SEQUENTIAL_SCAN = 0x08000000
|
|
FILE_FLAG_RANDOM_ACCESS = 0x10000000
|
|
FILE_FLAG_NO_BUFFERING = 0x20000000
|
|
FILE_FLAG_OVERLAPPED = 0x40000000
|
|
FILE_FLAG_WRITE_THROUGH = 0x80000000
|
|
|
|
HANDLE_FLAG_INHERIT = 0x00000001
|
|
STARTF_USESTDHANDLES = 0x00000100
|
|
STARTF_USESHOWWINDOW = 0x00000001
|
|
DUPLICATE_CLOSE_SOURCE = 0x00000001
|
|
DUPLICATE_SAME_ACCESS = 0x00000002
|
|
|
|
STD_INPUT_HANDLE = -10 & (1<<32 - 1)
|
|
STD_OUTPUT_HANDLE = -11 & (1<<32 - 1)
|
|
STD_ERROR_HANDLE = -12 & (1<<32 - 1)
|
|
|
|
FILE_BEGIN = 0
|
|
FILE_CURRENT = 1
|
|
FILE_END = 2
|
|
|
|
LANG_ENGLISH = 0x09
|
|
SUBLANG_ENGLISH_US = 0x01
|
|
|
|
FORMAT_MESSAGE_ALLOCATE_BUFFER = 256
|
|
FORMAT_MESSAGE_IGNORE_INSERTS = 512
|
|
FORMAT_MESSAGE_FROM_STRING = 1024
|
|
FORMAT_MESSAGE_FROM_HMODULE = 2048
|
|
FORMAT_MESSAGE_FROM_SYSTEM = 4096
|
|
FORMAT_MESSAGE_ARGUMENT_ARRAY = 8192
|
|
FORMAT_MESSAGE_MAX_WIDTH_MASK = 255
|
|
|
|
MAX_PATH = 260
|
|
MAX_LONG_PATH = 32768
|
|
|
|
MAX_COMPUTERNAME_LENGTH = 15
|
|
|
|
TIME_ZONE_ID_UNKNOWN = 0
|
|
TIME_ZONE_ID_STANDARD = 1
|
|
|
|
TIME_ZONE_ID_DAYLIGHT = 2
|
|
IGNORE = 0
|
|
INFINITE = 0xffffffff
|
|
|
|
WAIT_ABANDONED = 0x00000080
|
|
WAIT_OBJECT_0 = 0x00000000
|
|
WAIT_FAILED = 0xFFFFFFFF
|
|
|
|
// Access rights for process.
|
|
PROCESS_CREATE_PROCESS = 0x0080
|
|
PROCESS_CREATE_THREAD = 0x0002
|
|
PROCESS_DUP_HANDLE = 0x0040
|
|
PROCESS_QUERY_INFORMATION = 0x0400
|
|
PROCESS_QUERY_LIMITED_INFORMATION = 0x1000
|
|
PROCESS_SET_INFORMATION = 0x0200
|
|
PROCESS_SET_QUOTA = 0x0100
|
|
PROCESS_SUSPEND_RESUME = 0x0800
|
|
PROCESS_TERMINATE = 0x0001
|
|
PROCESS_VM_OPERATION = 0x0008
|
|
PROCESS_VM_READ = 0x0010
|
|
PROCESS_VM_WRITE = 0x0020
|
|
|
|
// Access rights for thread.
|
|
THREAD_DIRECT_IMPERSONATION = 0x0200
|
|
THREAD_GET_CONTEXT = 0x0008
|
|
THREAD_IMPERSONATE = 0x0100
|
|
THREAD_QUERY_INFORMATION = 0x0040
|
|
THREAD_QUERY_LIMITED_INFORMATION = 0x0800
|
|
THREAD_SET_CONTEXT = 0x0010
|
|
THREAD_SET_INFORMATION = 0x0020
|
|
THREAD_SET_LIMITED_INFORMATION = 0x0400
|
|
THREAD_SET_THREAD_TOKEN = 0x0080
|
|
THREAD_SUSPEND_RESUME = 0x0002
|
|
THREAD_TERMINATE = 0x0001
|
|
|
|
FILE_MAP_COPY = 0x01
|
|
FILE_MAP_WRITE = 0x02
|
|
FILE_MAP_READ = 0x04
|
|
FILE_MAP_EXECUTE = 0x20
|
|
|
|
CTRL_C_EVENT = 0
|
|
CTRL_BREAK_EVENT = 1
|
|
CTRL_CLOSE_EVENT = 2
|
|
CTRL_LOGOFF_EVENT = 5
|
|
CTRL_SHUTDOWN_EVENT = 6
|
|
|
|
// Windows reserves errors >= 1<<29 for application use.
|
|
APPLICATION_ERROR = 1 << 29
|
|
)
|
|
|
|
const (
|
|
// Process creation flags.
|
|
CREATE_BREAKAWAY_FROM_JOB = 0x01000000
|
|
CREATE_DEFAULT_ERROR_MODE = 0x04000000
|
|
CREATE_NEW_CONSOLE = 0x00000010
|
|
CREATE_NEW_PROCESS_GROUP = 0x00000200
|
|
CREATE_NO_WINDOW = 0x08000000
|
|
CREATE_PROTECTED_PROCESS = 0x00040000
|
|
CREATE_PRESERVE_CODE_AUTHZ_LEVEL = 0x02000000
|
|
CREATE_SEPARATE_WOW_VDM = 0x00000800
|
|
CREATE_SHARED_WOW_VDM = 0x00001000
|
|
CREATE_SUSPENDED = 0x00000004
|
|
CREATE_UNICODE_ENVIRONMENT = 0x00000400
|
|
DEBUG_ONLY_THIS_PROCESS = 0x00000002
|
|
DEBUG_PROCESS = 0x00000001
|
|
DETACHED_PROCESS = 0x00000008
|
|
EXTENDED_STARTUPINFO_PRESENT = 0x00080000
|
|
INHERIT_PARENT_AFFINITY = 0x00010000
|
|
)
|
|
|
|
const (
|
|
// attributes for ProcThreadAttributeList
|
|
PROC_THREAD_ATTRIBUTE_PARENT_PROCESS = 0x00020000
|
|
PROC_THREAD_ATTRIBUTE_HANDLE_LIST = 0x00020002
|
|
PROC_THREAD_ATTRIBUTE_GROUP_AFFINITY = 0x00030003
|
|
PROC_THREAD_ATTRIBUTE_PREFERRED_NODE = 0x00020004
|
|
PROC_THREAD_ATTRIBUTE_IDEAL_PROCESSOR = 0x00030005
|
|
PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY = 0x00020007
|
|
PROC_THREAD_ATTRIBUTE_UMS_THREAD = 0x00030006
|
|
PROC_THREAD_ATTRIBUTE_PROTECTION_LEVEL = 0x0002000b
|
|
)
|
|
|
|
const (
|
|
// flags for CreateToolhelp32Snapshot
|
|
TH32CS_SNAPHEAPLIST = 0x01
|
|
TH32CS_SNAPPROCESS = 0x02
|
|
TH32CS_SNAPTHREAD = 0x04
|
|
TH32CS_SNAPMODULE = 0x08
|
|
TH32CS_SNAPMODULE32 = 0x10
|
|
TH32CS_SNAPALL = TH32CS_SNAPHEAPLIST | TH32CS_SNAPMODULE | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD
|
|
TH32CS_INHERIT = 0x80000000
|
|
)
|
|
|
|
const (
|
|
// filters for ReadDirectoryChangesW and FindFirstChangeNotificationW
|
|
FILE_NOTIFY_CHANGE_FILE_NAME = 0x001
|
|
FILE_NOTIFY_CHANGE_DIR_NAME = 0x002
|
|
FILE_NOTIFY_CHANGE_ATTRIBUTES = 0x004
|
|
FILE_NOTIFY_CHANGE_SIZE = 0x008
|
|
FILE_NOTIFY_CHANGE_LAST_WRITE = 0x010
|
|
FILE_NOTIFY_CHANGE_LAST_ACCESS = 0x020
|
|
FILE_NOTIFY_CHANGE_CREATION = 0x040
|
|
FILE_NOTIFY_CHANGE_SECURITY = 0x100
|
|
)
|
|
|
|
const (
|
|
// do not reorder
|
|
FILE_ACTION_ADDED = iota + 1
|
|
FILE_ACTION_REMOVED
|
|
FILE_ACTION_MODIFIED
|
|
FILE_ACTION_RENAMED_OLD_NAME
|
|
FILE_ACTION_RENAMED_NEW_NAME
|
|
)
|
|
|
|
const (
|
|
// wincrypt.h
|
|
/* certenrolld_begin -- PROV_RSA_*/
|
|
PROV_RSA_FULL = 1
|
|
PROV_RSA_SIG = 2
|
|
PROV_DSS = 3
|
|
PROV_FORTEZZA = 4
|
|
PROV_MS_EXCHANGE = 5
|
|
PROV_SSL = 6
|
|
PROV_RSA_SCHANNEL = 12
|
|
PROV_DSS_DH = 13
|
|
PROV_EC_ECDSA_SIG = 14
|
|
PROV_EC_ECNRA_SIG = 15
|
|
PROV_EC_ECDSA_FULL = 16
|
|
PROV_EC_ECNRA_FULL = 17
|
|
PROV_DH_SCHANNEL = 18
|
|
PROV_SPYRUS_LYNKS = 20
|
|
PROV_RNG = 21
|
|
PROV_INTEL_SEC = 22
|
|
PROV_REPLACE_OWF = 23
|
|
PROV_RSA_AES = 24
|
|
|
|
/* dwFlags definitions for CryptAcquireContext */
|
|
CRYPT_VERIFYCONTEXT = 0xF0000000
|
|
CRYPT_NEWKEYSET = 0x00000008
|
|
CRYPT_DELETEKEYSET = 0x00000010
|
|
CRYPT_MACHINE_KEYSET = 0x00000020
|
|
CRYPT_SILENT = 0x00000040
|
|
CRYPT_DEFAULT_CONTAINER_OPTIONAL = 0x00000080
|
|
|
|
/* Flags for PFXImportCertStore */
|
|
CRYPT_EXPORTABLE = 0x00000001
|
|
CRYPT_USER_PROTECTED = 0x00000002
|
|
CRYPT_USER_KEYSET = 0x00001000
|
|
PKCS12_PREFER_CNG_KSP = 0x00000100
|
|
PKCS12_ALWAYS_CNG_KSP = 0x00000200
|
|
PKCS12_ALLOW_OVERWRITE_KEY = 0x00004000
|
|
PKCS12_NO_PERSIST_KEY = 0x00008000
|
|
PKCS12_INCLUDE_EXTENDED_PROPERTIES = 0x00000010
|
|
|
|
/* Flags for CryptAcquireCertificatePrivateKey */
|
|
CRYPT_ACQUIRE_CACHE_FLAG = 0x00000001
|
|
CRYPT_ACQUIRE_USE_PROV_INFO_FLAG = 0x00000002
|
|
CRYPT_ACQUIRE_COMPARE_KEY_FLAG = 0x00000004
|
|
CRYPT_ACQUIRE_NO_HEALING = 0x00000008
|
|
CRYPT_ACQUIRE_SILENT_FLAG = 0x00000040
|
|
CRYPT_ACQUIRE_WINDOW_HANDLE_FLAG = 0x00000080
|
|
CRYPT_ACQUIRE_NCRYPT_KEY_FLAGS_MASK = 0x00070000
|
|
CRYPT_ACQUIRE_ALLOW_NCRYPT_KEY_FLAG = 0x00010000
|
|
CRYPT_ACQUIRE_PREFER_NCRYPT_KEY_FLAG = 0x00020000
|
|
CRYPT_ACQUIRE_ONLY_NCRYPT_KEY_FLAG = 0x00040000
|
|
|
|
/* pdwKeySpec for CryptAcquireCertificatePrivateKey */
|
|
AT_KEYEXCHANGE = 1
|
|
AT_SIGNATURE = 2
|
|
CERT_NCRYPT_KEY_SPEC = 0xFFFFFFFF
|
|
|
|
/* Default usage match type is AND with value zero */
|
|
USAGE_MATCH_TYPE_AND = 0
|
|
USAGE_MATCH_TYPE_OR = 1
|
|
|
|
/* msgAndCertEncodingType values for CertOpenStore function */
|
|
X509_ASN_ENCODING = 0x00000001
|
|
PKCS_7_ASN_ENCODING = 0x00010000
|
|
|
|
/* storeProvider values for CertOpenStore function */
|
|
CERT_STORE_PROV_MSG = 1
|
|
CERT_STORE_PROV_MEMORY = 2
|
|
CERT_STORE_PROV_FILE = 3
|
|
CERT_STORE_PROV_REG = 4
|
|
CERT_STORE_PROV_PKCS7 = 5
|
|
CERT_STORE_PROV_SERIALIZED = 6
|
|
CERT_STORE_PROV_FILENAME_A = 7
|
|
CERT_STORE_PROV_FILENAME_W = 8
|
|
CERT_STORE_PROV_FILENAME = CERT_STORE_PROV_FILENAME_W
|
|
CERT_STORE_PROV_SYSTEM_A = 9
|
|
CERT_STORE_PROV_SYSTEM_W = 10
|
|
CERT_STORE_PROV_SYSTEM = CERT_STORE_PROV_SYSTEM_W
|
|
CERT_STORE_PROV_COLLECTION = 11
|
|
CERT_STORE_PROV_SYSTEM_REGISTRY_A = 12
|
|
CERT_STORE_PROV_SYSTEM_REGISTRY_W = 13
|
|
CERT_STORE_PROV_SYSTEM_REGISTRY = CERT_STORE_PROV_SYSTEM_REGISTRY_W
|
|
CERT_STORE_PROV_PHYSICAL_W = 14
|
|
CERT_STORE_PROV_PHYSICAL = CERT_STORE_PROV_PHYSICAL_W
|
|
CERT_STORE_PROV_SMART_CARD_W = 15
|
|
CERT_STORE_PROV_SMART_CARD = CERT_STORE_PROV_SMART_CARD_W
|
|
CERT_STORE_PROV_LDAP_W = 16
|
|
CERT_STORE_PROV_LDAP = CERT_STORE_PROV_LDAP_W
|
|
CERT_STORE_PROV_PKCS12 = 17
|
|
|
|
/* store characteristics (low WORD of flag) for CertOpenStore function */
|
|
CERT_STORE_NO_CRYPT_RELEASE_FLAG = 0x00000001
|
|
CERT_STORE_SET_LOCALIZED_NAME_FLAG = 0x00000002
|
|
CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG = 0x00000004
|
|
CERT_STORE_DELETE_FLAG = 0x00000010
|
|
CERT_STORE_UNSAFE_PHYSICAL_FLAG = 0x00000020
|
|
CERT_STORE_SHARE_STORE_FLAG = 0x00000040
|
|
CERT_STORE_SHARE_CONTEXT_FLAG = 0x00000080
|
|
CERT_STORE_MANIFOLD_FLAG = 0x00000100
|
|
CERT_STORE_ENUM_ARCHIVED_FLAG = 0x00000200
|
|
CERT_STORE_UPDATE_KEYID_FLAG = 0x00000400
|
|
CERT_STORE_BACKUP_RESTORE_FLAG = 0x00000800
|
|
CERT_STORE_MAXIMUM_ALLOWED_FLAG = 0x00001000
|
|
CERT_STORE_CREATE_NEW_FLAG = 0x00002000
|
|
CERT_STORE_OPEN_EXISTING_FLAG = 0x00004000
|
|
CERT_STORE_READONLY_FLAG = 0x00008000
|
|
|
|
/* store locations (high WORD of flag) for CertOpenStore function */
|
|
CERT_SYSTEM_STORE_CURRENT_USER = 0x00010000
|
|
CERT_SYSTEM_STORE_LOCAL_MACHINE = 0x00020000
|
|
CERT_SYSTEM_STORE_CURRENT_SERVICE = 0x00040000
|
|
CERT_SYSTEM_STORE_SERVICES = 0x00050000
|
|
CERT_SYSTEM_STORE_USERS = 0x00060000
|
|
CERT_SYSTEM_STORE_CURRENT_USER_GROUP_POLICY = 0x00070000
|
|
CERT_SYSTEM_STORE_LOCAL_MACHINE_GROUP_POLICY = 0x00080000
|
|
CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE = 0x00090000
|
|
CERT_SYSTEM_STORE_UNPROTECTED_FLAG = 0x40000000
|
|
CERT_SYSTEM_STORE_RELOCATE_FLAG = 0x80000000
|
|
|
|
/* Miscellaneous high-WORD flags for CertOpenStore function */
|
|
CERT_REGISTRY_STORE_REMOTE_FLAG = 0x00010000
|
|
CERT_REGISTRY_STORE_SERIALIZED_FLAG = 0x00020000
|
|
CERT_REGISTRY_STORE_ROAMING_FLAG = 0x00040000
|
|
CERT_REGISTRY_STORE_MY_IE_DIRTY_FLAG = 0x00080000
|
|
CERT_REGISTRY_STORE_LM_GPT_FLAG = 0x01000000
|
|
CERT_REGISTRY_STORE_CLIENT_GPT_FLAG = 0x80000000
|
|
CERT_FILE_STORE_COMMIT_ENABLE_FLAG = 0x00010000
|
|
CERT_LDAP_STORE_SIGN_FLAG = 0x00010000
|
|
CERT_LDAP_STORE_AREC_EXCLUSIVE_FLAG = 0x00020000
|
|
CERT_LDAP_STORE_OPENED_FLAG = 0x00040000
|
|
CERT_LDAP_STORE_UNBIND_FLAG = 0x00080000
|
|
|
|
/* addDisposition values for CertAddCertificateContextToStore function */
|
|
CERT_STORE_ADD_NEW = 1
|
|
CERT_STORE_ADD_USE_EXISTING = 2
|
|
CERT_STORE_ADD_REPLACE_EXISTING = 3
|
|
CERT_STORE_ADD_ALWAYS = 4
|
|
CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES = 5
|
|
CERT_STORE_ADD_NEWER = 6
|
|
CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES = 7
|
|
|
|
/* ErrorStatus values for CertTrustStatus struct */
|
|
CERT_TRUST_NO_ERROR = 0x00000000
|
|
CERT_TRUST_IS_NOT_TIME_VALID = 0x00000001
|
|
CERT_TRUST_IS_REVOKED = 0x00000004
|
|
CERT_TRUST_IS_NOT_SIGNATURE_VALID = 0x00000008
|
|
CERT_TRUST_IS_NOT_VALID_FOR_USAGE = 0x00000010
|
|
CERT_TRUST_IS_UNTRUSTED_ROOT = 0x00000020
|
|
CERT_TRUST_REVOCATION_STATUS_UNKNOWN = 0x00000040
|
|
CERT_TRUST_IS_CYCLIC = 0x00000080
|
|
CERT_TRUST_INVALID_EXTENSION = 0x00000100
|
|
CERT_TRUST_INVALID_POLICY_CONSTRAINTS = 0x00000200
|
|
CERT_TRUST_INVALID_BASIC_CONSTRAINTS = 0x00000400
|
|
CERT_TRUST_INVALID_NAME_CONSTRAINTS = 0x00000800
|
|
CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT = 0x00001000
|
|
CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT = 0x00002000
|
|
CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT = 0x00004000
|
|
CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT = 0x00008000
|
|
CERT_TRUST_IS_PARTIAL_CHAIN = 0x00010000
|
|
CERT_TRUST_CTL_IS_NOT_TIME_VALID = 0x00020000
|
|
CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID = 0x00040000
|
|
CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE = 0x00080000
|
|
CERT_TRUST_HAS_WEAK_SIGNATURE = 0x00100000
|
|
CERT_TRUST_IS_OFFLINE_REVOCATION = 0x01000000
|
|
CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY = 0x02000000
|
|
CERT_TRUST_IS_EXPLICIT_DISTRUST = 0x04000000
|
|
CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT = 0x08000000
|
|
|
|
/* InfoStatus values for CertTrustStatus struct */
|
|
CERT_TRUST_HAS_EXACT_MATCH_ISSUER = 0x00000001
|
|
CERT_TRUST_HAS_KEY_MATCH_ISSUER = 0x00000002
|
|
CERT_TRUST_HAS_NAME_MATCH_ISSUER = 0x00000004
|
|
CERT_TRUST_IS_SELF_SIGNED = 0x00000008
|
|
CERT_TRUST_HAS_PREFERRED_ISSUER = 0x00000100
|
|
CERT_TRUST_HAS_ISSUANCE_CHAIN_POLICY = 0x00000400
|
|
CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS = 0x00000400
|
|
CERT_TRUST_IS_PEER_TRUSTED = 0x00000800
|
|
CERT_TRUST_HAS_CRL_VALIDITY_EXTENDED = 0x00001000
|
|
CERT_TRUST_IS_FROM_EXCLUSIVE_TRUST_STORE = 0x00002000
|
|
CERT_TRUST_IS_CA_TRUSTED = 0x00004000
|
|
CERT_TRUST_IS_COMPLEX_CHAIN = 0x00010000
|
|
|
|
/* Certificate Information Flags */
|
|
CERT_INFO_VERSION_FLAG = 1
|
|
CERT_INFO_SERIAL_NUMBER_FLAG = 2
|
|
CERT_INFO_SIGNATURE_ALGORITHM_FLAG = 3
|
|
CERT_INFO_ISSUER_FLAG = 4
|
|
CERT_INFO_NOT_BEFORE_FLAG = 5
|
|
CERT_INFO_NOT_AFTER_FLAG = 6
|
|
CERT_INFO_SUBJECT_FLAG = 7
|
|
CERT_INFO_SUBJECT_PUBLIC_KEY_INFO_FLAG = 8
|
|
CERT_INFO_ISSUER_UNIQUE_ID_FLAG = 9
|
|
CERT_INFO_SUBJECT_UNIQUE_ID_FLAG = 10
|
|
CERT_INFO_EXTENSION_FLAG = 11
|
|
|
|
/* dwFindType for CertFindCertificateInStore */
|
|
CERT_COMPARE_MASK = 0xFFFF
|
|
CERT_COMPARE_SHIFT = 16
|
|
CERT_COMPARE_ANY = 0
|
|
CERT_COMPARE_SHA1_HASH = 1
|
|
CERT_COMPARE_NAME = 2
|
|
CERT_COMPARE_ATTR = 3
|
|
CERT_COMPARE_MD5_HASH = 4
|
|
CERT_COMPARE_PROPERTY = 5
|
|
CERT_COMPARE_PUBLIC_KEY = 6
|
|
CERT_COMPARE_HASH = CERT_COMPARE_SHA1_HASH
|
|
CERT_COMPARE_NAME_STR_A = 7
|
|
CERT_COMPARE_NAME_STR_W = 8
|
|
CERT_COMPARE_KEY_SPEC = 9
|
|
CERT_COMPARE_ENHKEY_USAGE = 10
|
|
CERT_COMPARE_CTL_USAGE = CERT_COMPARE_ENHKEY_USAGE
|
|
CERT_COMPARE_SUBJECT_CERT = 11
|
|
CERT_COMPARE_ISSUER_OF = 12
|
|
CERT_COMPARE_EXISTING = 13
|
|
CERT_COMPARE_SIGNATURE_HASH = 14
|
|
CERT_COMPARE_KEY_IDENTIFIER = 15
|
|
CERT_COMPARE_CERT_ID = 16
|
|
CERT_COMPARE_CROSS_CERT_DIST_POINTS = 17
|
|
CERT_COMPARE_PUBKEY_MD5_HASH = 18
|
|
CERT_COMPARE_SUBJECT_INFO_ACCESS = 19
|
|
CERT_COMPARE_HASH_STR = 20
|
|
CERT_COMPARE_HAS_PRIVATE_KEY = 21
|
|
CERT_FIND_ANY = (CERT_COMPARE_ANY << CERT_COMPARE_SHIFT)
|
|
CERT_FIND_SHA1_HASH = (CERT_COMPARE_SHA1_HASH << CERT_COMPARE_SHIFT)
|
|
CERT_FIND_MD5_HASH = (CERT_COMPARE_MD5_HASH << CERT_COMPARE_SHIFT)
|
|
CERT_FIND_SIGNATURE_HASH = (CERT_COMPARE_SIGNATURE_HASH << CERT_COMPARE_SHIFT)
|
|
CERT_FIND_KEY_IDENTIFIER = (CERT_COMPARE_KEY_IDENTIFIER << CERT_COMPARE_SHIFT)
|
|
CERT_FIND_HASH = CERT_FIND_SHA1_HASH
|
|
CERT_FIND_PROPERTY = (CERT_COMPARE_PROPERTY << CERT_COMPARE_SHIFT)
|
|
CERT_FIND_PUBLIC_KEY = (CERT_COMPARE_PUBLIC_KEY << CERT_COMPARE_SHIFT)
|
|
CERT_FIND_SUBJECT_NAME = (CERT_COMPARE_NAME<<CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
|
|
CERT_FIND_SUBJECT_ATTR = (CERT_COMPARE_ATTR<<CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
|
|
CERT_FIND_ISSUER_NAME = (CERT_COMPARE_NAME<<CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
|
|
CERT_FIND_ISSUER_ATTR = (CERT_COMPARE_ATTR<<CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
|
|
CERT_FIND_SUBJECT_STR_A = (CERT_COMPARE_NAME_STR_A<<CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
|
|
CERT_FIND_SUBJECT_STR_W = (CERT_COMPARE_NAME_STR_W<<CERT_COMPARE_SHIFT | CERT_INFO_SUBJECT_FLAG)
|
|
CERT_FIND_SUBJECT_STR = CERT_FIND_SUBJECT_STR_W
|
|
CERT_FIND_ISSUER_STR_A = (CERT_COMPARE_NAME_STR_A<<CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
|
|
CERT_FIND_ISSUER_STR_W = (CERT_COMPARE_NAME_STR_W<<CERT_COMPARE_SHIFT | CERT_INFO_ISSUER_FLAG)
|
|
CERT_FIND_ISSUER_STR = CERT_FIND_ISSUER_STR_W
|
|
CERT_FIND_KEY_SPEC = (CERT_COMPARE_KEY_SPEC << CERT_COMPARE_SHIFT)
|
|
CERT_FIND_ENHKEY_USAGE = (CERT_COMPARE_ENHKEY_USAGE << CERT_COMPARE_SHIFT)
|
|
CERT_FIND_CTL_USAGE = CERT_FIND_ENHKEY_USAGE
|
|
CERT_FIND_SUBJECT_CERT = (CERT_COMPARE_SUBJECT_CERT << CERT_COMPARE_SHIFT)
|
|
CERT_FIND_ISSUER_OF = (CERT_COMPARE_ISSUER_OF << CERT_COMPARE_SHIFT)
|
|
CERT_FIND_EXISTING = (CERT_COMPARE_EXISTING << CERT_COMPARE_SHIFT)
|
|
CERT_FIND_CERT_ID = (CERT_COMPARE_CERT_ID << CERT_COMPARE_SHIFT)
|
|
CERT_FIND_CROSS_CERT_DIST_POINTS = (CERT_COMPARE_CROSS_CERT_DIST_POINTS << CERT_COMPARE_SHIFT)
|
|
CERT_FIND_PUBKEY_MD5_HASH = (CERT_COMPARE_PUBKEY_MD5_HASH << CERT_COMPARE_SHIFT)
|
|
CERT_FIND_SUBJECT_INFO_ACCESS = (CERT_COMPARE_SUBJECT_INFO_ACCESS << CERT_COMPARE_SHIFT)
|
|
CERT_FIND_HASH_STR = (CERT_COMPARE_HASH_STR << CERT_COMPARE_SHIFT)
|
|
CERT_FIND_HAS_PRIVATE_KEY = (CERT_COMPARE_HAS_PRIVATE_KEY << CERT_COMPARE_SHIFT)
|
|
CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG = 0x1
|
|
CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG = 0x2
|
|
CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG = 0x4
|
|
CERT_FIND_NO_ENHKEY_USAGE_FLAG = 0x8
|
|
CERT_FIND_OR_ENHKEY_USAGE_FLAG = 0x10
|
|
CERT_FIND_VALID_ENHKEY_USAGE_FLAG = 0x20
|
|
CERT_FIND_OPTIONAL_CTL_USAGE_FLAG = CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG
|
|
CERT_FIND_EXT_ONLY_CTL_USAGE_FLAG = CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG
|
|
CERT_FIND_PROP_ONLY_CTL_USAGE_FLAG = CERT_FIND_PROP_ONLY_ENHKEY_USAGE_FLAG
|
|
CERT_FIND_NO_CTL_USAGE_FLAG = CERT_FIND_NO_ENHKEY_USAGE_FLAG
|
|
CERT_FIND_OR_CTL_USAGE_FLAG = CERT_FIND_OR_ENHKEY_USAGE_FLAG
|
|
CERT_FIND_VALID_CTL_USAGE_FLAG = CERT_FIND_VALID_ENHKEY_USAGE_FLAG
|
|
|
|
/* policyOID values for CertVerifyCertificateChainPolicy function */
|
|
CERT_CHAIN_POLICY_BASE = 1
|
|
CERT_CHAIN_POLICY_AUTHENTICODE = 2
|
|
CERT_CHAIN_POLICY_AUTHENTICODE_TS = 3
|
|
CERT_CHAIN_POLICY_SSL = 4
|
|
CERT_CHAIN_POLICY_BASIC_CONSTRAINTS = 5
|
|
CERT_CHAIN_POLICY_NT_AUTH = 6
|
|
CERT_CHAIN_POLICY_MICROSOFT_ROOT = 7
|
|
CERT_CHAIN_POLICY_EV = 8
|
|
CERT_CHAIN_POLICY_SSL_F12 = 9
|
|
|
|
/* flag for dwFindType CertFindChainInStore */
|
|
CERT_CHAIN_FIND_BY_ISSUER = 1
|
|
|
|
/* dwFindFlags for CertFindChainInStore when dwFindType == CERT_CHAIN_FIND_BY_ISSUER */
|
|
CERT_CHAIN_FIND_BY_ISSUER_COMPARE_KEY_FLAG = 0x0001
|
|
CERT_CHAIN_FIND_BY_ISSUER_COMPLEX_CHAIN_FLAG = 0x0002
|
|
CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_URL_FLAG = 0x0004
|
|
CERT_CHAIN_FIND_BY_ISSUER_LOCAL_MACHINE_FLAG = 0x0008
|
|
CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG = 0x4000
|
|
CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_FLAG = 0x8000
|
|
|
|
/* Certificate Store close flags */
|
|
CERT_CLOSE_STORE_FORCE_FLAG = 0x00000001
|
|
CERT_CLOSE_STORE_CHECK_FLAG = 0x00000002
|
|
|
|
/* CryptQueryObject object type */
|
|
CERT_QUERY_OBJECT_FILE = 1
|
|
CERT_QUERY_OBJECT_BLOB = 2
|
|
|
|
/* CryptQueryObject content type flags */
|
|
CERT_QUERY_CONTENT_CERT = 1
|
|
CERT_QUERY_CONTENT_CTL = 2
|
|
CERT_QUERY_CONTENT_CRL = 3
|
|
CERT_QUERY_CONTENT_SERIALIZED_STORE = 4
|
|
CERT_QUERY_CONTENT_SERIALIZED_CERT = 5
|
|
CERT_QUERY_CONTENT_SERIALIZED_CTL = 6
|
|
CERT_QUERY_CONTENT_SERIALIZED_CRL = 7
|
|
CERT_QUERY_CONTENT_PKCS7_SIGNED = 8
|
|
CERT_QUERY_CONTENT_PKCS7_UNSIGNED = 9
|
|
CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED = 10
|
|
CERT_QUERY_CONTENT_PKCS10 = 11
|
|
CERT_QUERY_CONTENT_PFX = 12
|
|
CERT_QUERY_CONTENT_CERT_PAIR = 13
|
|
CERT_QUERY_CONTENT_PFX_AND_LOAD = 14
|
|
CERT_QUERY_CONTENT_FLAG_CERT = (1 << CERT_QUERY_CONTENT_CERT)
|
|
CERT_QUERY_CONTENT_FLAG_CTL = (1 << CERT_QUERY_CONTENT_CTL)
|
|
CERT_QUERY_CONTENT_FLAG_CRL = (1 << CERT_QUERY_CONTENT_CRL)
|
|
CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE = (1 << CERT_QUERY_CONTENT_SERIALIZED_STORE)
|
|
CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT = (1 << CERT_QUERY_CONTENT_SERIALIZED_CERT)
|
|
CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL = (1 << CERT_QUERY_CONTENT_SERIALIZED_CTL)
|
|
CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL = (1 << CERT_QUERY_CONTENT_SERIALIZED_CRL)
|
|
CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED = (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED)
|
|
CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED = (1 << CERT_QUERY_CONTENT_PKCS7_UNSIGNED)
|
|
CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED = (1 << CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED)
|
|
CERT_QUERY_CONTENT_FLAG_PKCS10 = (1 << CERT_QUERY_CONTENT_PKCS10)
|
|
CERT_QUERY_CONTENT_FLAG_PFX = (1 << CERT_QUERY_CONTENT_PFX)
|
|
CERT_QUERY_CONTENT_FLAG_CERT_PAIR = (1 << CERT_QUERY_CONTENT_CERT_PAIR)
|
|
CERT_QUERY_CONTENT_FLAG_PFX_AND_LOAD = (1 << CERT_QUERY_CONTENT_PFX_AND_LOAD)
|
|
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)
|
|
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)
|
|
|
|
/* CryptQueryObject format type flags */
|
|
CERT_QUERY_FORMAT_BINARY = 1
|
|
CERT_QUERY_FORMAT_BASE64_ENCODED = 2
|
|
CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED = 3
|
|
CERT_QUERY_FORMAT_FLAG_BINARY = (1 << CERT_QUERY_FORMAT_BINARY)
|
|
CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED = (1 << CERT_QUERY_FORMAT_BASE64_ENCODED)
|
|
CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED = (1 << CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED)
|
|
CERT_QUERY_FORMAT_FLAG_ALL = (CERT_QUERY_FORMAT_FLAG_BINARY | CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED | CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED)
|
|
|
|
/* CertGetNameString name types */
|
|
CERT_NAME_EMAIL_TYPE = 1
|
|
CERT_NAME_RDN_TYPE = 2
|
|
CERT_NAME_ATTR_TYPE = 3
|
|
CERT_NAME_SIMPLE_DISPLAY_TYPE = 4
|
|
CERT_NAME_FRIENDLY_DISPLAY_TYPE = 5
|
|
CERT_NAME_DNS_TYPE = 6
|
|
CERT_NAME_URL_TYPE = 7
|
|
CERT_NAME_UPN_TYPE = 8
|
|
|
|
/* CertGetNameString flags */
|
|
CERT_NAME_ISSUER_FLAG = 0x1
|
|
CERT_NAME_DISABLE_IE4_UTF8_FLAG = 0x10000
|
|
CERT_NAME_SEARCH_ALL_NAMES_FLAG = 0x2
|
|
CERT_NAME_STR_ENABLE_PUNYCODE_FLAG = 0x00200000
|
|
|
|
/* AuthType values for SSLExtraCertChainPolicyPara struct */
|
|
AUTHTYPE_CLIENT = 1
|
|
AUTHTYPE_SERVER = 2
|
|
|
|
/* Checks values for SSLExtraCertChainPolicyPara struct */
|
|
SECURITY_FLAG_IGNORE_REVOCATION = 0x00000080
|
|
SECURITY_FLAG_IGNORE_UNKNOWN_CA = 0x00000100
|
|
SECURITY_FLAG_IGNORE_WRONG_USAGE = 0x00000200
|
|
SECURITY_FLAG_IGNORE_CERT_CN_INVALID = 0x00001000
|
|
SECURITY_FLAG_IGNORE_CERT_DATE_INVALID = 0x00002000
|
|
|
|
/* Flags for Crypt[Un]ProtectData */
|
|
CRYPTPROTECT_UI_FORBIDDEN = 0x1
|
|
CRYPTPROTECT_LOCAL_MACHINE = 0x4
|
|
CRYPTPROTECT_CRED_SYNC = 0x8
|
|
CRYPTPROTECT_AUDIT = 0x10
|
|
CRYPTPROTECT_NO_RECOVERY = 0x20
|
|
CRYPTPROTECT_VERIFY_PROTECTION = 0x40
|
|
CRYPTPROTECT_CRED_REGENERATE = 0x80
|
|
|
|
/* Flags for CryptProtectPromptStruct */
|
|
CRYPTPROTECT_PROMPT_ON_UNPROTECT = 1
|
|
CRYPTPROTECT_PROMPT_ON_PROTECT = 2
|
|
CRYPTPROTECT_PROMPT_RESERVED = 4
|
|
CRYPTPROTECT_PROMPT_STRONG = 8
|
|
CRYPTPROTECT_PROMPT_REQUIRE_STRONG = 16
|
|
)
|
|
|
|
const (
|
|
// flags for SetErrorMode
|
|
SEM_FAILCRITICALERRORS = 0x0001
|
|
SEM_NOALIGNMENTFAULTEXCEPT = 0x0004
|
|
SEM_NOGPFAULTERRORBOX = 0x0002
|
|
SEM_NOOPENFILEERRORBOX = 0x8000
|
|
)
|
|
|
|
const (
|
|
// Priority class.
|
|
ABOVE_NORMAL_PRIORITY_CLASS = 0x00008000
|
|
BELOW_NORMAL_PRIORITY_CLASS = 0x00004000
|
|
HIGH_PRIORITY_CLASS = 0x00000080
|
|
IDLE_PRIORITY_CLASS = 0x00000040
|
|
NORMAL_PRIORITY_CLASS = 0x00000020
|
|
PROCESS_MODE_BACKGROUND_BEGIN = 0x00100000
|
|
PROCESS_MODE_BACKGROUND_END = 0x00200000
|
|
REALTIME_PRIORITY_CLASS = 0x00000100
|
|
)
|
|
|
|
/* wintrust.h constants for WinVerifyTrustEx */
|
|
const (
|
|
WTD_UI_ALL = 1
|
|
WTD_UI_NONE = 2
|
|
WTD_UI_NOBAD = 3
|
|
WTD_UI_NOGOOD = 4
|
|
|
|
WTD_REVOKE_NONE = 0
|
|
WTD_REVOKE_WHOLECHAIN = 1
|
|
|
|
WTD_CHOICE_FILE = 1
|
|
WTD_CHOICE_CATALOG = 2
|
|
WTD_CHOICE_BLOB = 3
|
|
WTD_CHOICE_SIGNER = 4
|
|
WTD_CHOICE_CERT = 5
|
|
|
|
WTD_STATEACTION_IGNORE = 0x00000000
|
|
WTD_STATEACTION_VERIFY = 0x00000010
|
|
WTD_STATEACTION_CLOSE = 0x00000002
|
|
WTD_STATEACTION_AUTO_CACHE = 0x00000003
|
|
WTD_STATEACTION_AUTO_CACHE_FLUSH = 0x00000004
|
|
|
|
WTD_USE_IE4_TRUST_FLAG = 0x1
|
|
WTD_NO_IE4_CHAIN_FLAG = 0x2
|
|
WTD_NO_POLICY_USAGE_FLAG = 0x4
|
|
WTD_REVOCATION_CHECK_NONE = 0x10
|
|
WTD_REVOCATION_CHECK_END_CERT = 0x20
|
|
WTD_REVOCATION_CHECK_CHAIN = 0x40
|
|
WTD_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT = 0x80
|
|
WTD_SAFER_FLAG = 0x100
|
|
WTD_HASH_ONLY_FLAG = 0x200
|
|
WTD_USE_DEFAULT_OSVER_CHECK = 0x400
|
|
WTD_LIFETIME_SIGNING_FLAG = 0x800
|
|
WTD_CACHE_ONLY_URL_RETRIEVAL = 0x1000
|
|
WTD_DISABLE_MD2_MD4 = 0x2000
|
|
WTD_MOTW = 0x4000
|
|
|
|
WTD_UICONTEXT_EXECUTE = 0
|
|
WTD_UICONTEXT_INSTALL = 1
|
|
)
|
|
|
|
var (
|
|
OID_PKIX_KP_SERVER_AUTH = []byte("1.3.6.1.5.5.7.3.1\x00")
|
|
OID_SERVER_GATED_CRYPTO = []byte("1.3.6.1.4.1.311.10.3.3\x00")
|
|
OID_SGC_NETSCAPE = []byte("2.16.840.1.113730.4.1\x00")
|
|
|
|
WINTRUST_ACTION_GENERIC_VERIFY_V2 = GUID{
|
|
Data1: 0xaac56b,
|
|
Data2: 0xcd44,
|
|
Data3: 0x11d0,
|
|
Data4: [8]byte{0x8c, 0xc2, 0x0, 0xc0, 0x4f, 0xc2, 0x95, 0xee},
|
|
}
|
|
)
|
|
|
|
// Pointer represents a pointer to an arbitrary Windows type.
|
|
//
|
|
// Pointer-typed fields may point to one of many different types. It's
|
|
// up to the caller to provide a pointer to the appropriate type, cast
|
|
// to Pointer. The caller must obey the unsafe.Pointer rules while
|
|
// doing so.
|
|
type Pointer *struct{}
|
|
|
|
// Invented values to support what package os expects.
|
|
type Timeval struct {
|
|
Sec int32
|
|
Usec int32
|
|
}
|
|
|
|
func (tv *Timeval) Nanoseconds() int64 {
|
|
return (int64(tv.Sec)*1e6 + int64(tv.Usec)) * 1e3
|
|
}
|
|
|
|
func NsecToTimeval(nsec int64) (tv Timeval) {
|
|
tv.Sec = int32(nsec / 1e9)
|
|
tv.Usec = int32(nsec % 1e9 / 1e3)
|
|
return
|
|
}
|
|
|
|
type Overlapped struct {
|
|
Internal uintptr
|
|
InternalHigh uintptr
|
|
Offset uint32
|
|
OffsetHigh uint32
|
|
HEvent Handle
|
|
}
|
|
|
|
type FileNotifyInformation struct {
|
|
NextEntryOffset uint32
|
|
Action uint32
|
|
FileNameLength uint32
|
|
FileName uint16
|
|
}
|
|
|
|
type Filetime struct {
|
|
LowDateTime uint32
|
|
HighDateTime uint32
|
|
}
|
|
|
|
// Nanoseconds returns Filetime ft in nanoseconds
|
|
// since Epoch (00:00:00 UTC, January 1, 1970).
|
|
func (ft *Filetime) Nanoseconds() int64 {
|
|
// 100-nanosecond intervals since January 1, 1601
|
|
nsec := int64(ft.HighDateTime)<<32 + int64(ft.LowDateTime)
|
|
// change starting time to the Epoch (00:00:00 UTC, January 1, 1970)
|
|
nsec -= 116444736000000000
|
|
// convert into nanoseconds
|
|
nsec *= 100
|
|
return nsec
|
|
}
|
|
|
|
func NsecToFiletime(nsec int64) (ft Filetime) {
|
|
// convert into 100-nanosecond
|
|
nsec /= 100
|
|
// change starting time to January 1, 1601
|
|
nsec += 116444736000000000
|
|
// split into high / low
|
|
ft.LowDateTime = uint32(nsec & 0xffffffff)
|
|
ft.HighDateTime = uint32(nsec >> 32 & 0xffffffff)
|
|
return ft
|
|
}
|
|
|
|
type Win32finddata struct {
|
|
FileAttributes uint32
|
|
CreationTime Filetime
|
|
LastAccessTime Filetime
|
|
LastWriteTime Filetime
|
|
FileSizeHigh uint32
|
|
FileSizeLow uint32
|
|
Reserved0 uint32
|
|
Reserved1 uint32
|
|
FileName [MAX_PATH - 1]uint16
|
|
AlternateFileName [13]uint16
|
|
}
|
|
|
|
// This is the actual system call structure.
|
|
// Win32finddata is what we committed to in Go 1.
|
|
type win32finddata1 struct {
|
|
FileAttributes uint32
|
|
CreationTime Filetime
|
|
LastAccessTime Filetime
|
|
LastWriteTime Filetime
|
|
FileSizeHigh uint32
|
|
FileSizeLow uint32
|
|
Reserved0 uint32
|
|
Reserved1 uint32
|
|
FileName [MAX_PATH]uint16
|
|
AlternateFileName [14]uint16
|
|
|
|
// The Microsoft documentation for this struct¹ describes three additional
|
|
// fields: dwFileType, dwCreatorType, and wFinderFlags. However, those fields
|
|
// are empirically only present in the macOS port of the Win32 API,² and thus
|
|
// not needed for binaries built for Windows.
|
|
//
|
|
// ¹ https://docs.microsoft.com/en-us/windows/win32/api/minwinbase/ns-minwinbase-win32_find_dataw describe
|
|
// ² https://golang.org/issue/42637#issuecomment-760715755.
|
|
}
|
|
|
|
func copyFindData(dst *Win32finddata, src *win32finddata1) {
|
|
dst.FileAttributes = src.FileAttributes
|
|
dst.CreationTime = src.CreationTime
|
|
dst.LastAccessTime = src.LastAccessTime
|
|
dst.LastWriteTime = src.LastWriteTime
|
|
dst.FileSizeHigh = src.FileSizeHigh
|
|
dst.FileSizeLow = src.FileSizeLow
|
|
dst.Reserved0 = src.Reserved0
|
|
dst.Reserved1 = src.Reserved1
|
|
|
|
// The src is 1 element bigger than dst, but it must be NUL.
|
|
copy(dst.FileName[:], src.FileName[:])
|
|
copy(dst.AlternateFileName[:], src.AlternateFileName[:])
|
|
}
|
|
|
|
type ByHandleFileInformation struct {
|
|
FileAttributes uint32
|
|
CreationTime Filetime
|
|
LastAccessTime Filetime
|
|
LastWriteTime Filetime
|
|
VolumeSerialNumber uint32
|
|
FileSizeHigh uint32
|
|
FileSizeLow uint32
|
|
NumberOfLinks uint32
|
|
FileIndexHigh uint32
|
|
FileIndexLow uint32
|
|
}
|
|
|
|
const (
|
|
GetFileExInfoStandard = 0
|
|
GetFileExMaxInfoLevel = 1
|
|
)
|
|
|
|
type Win32FileAttributeData struct {
|
|
FileAttributes uint32
|
|
CreationTime Filetime
|
|
LastAccessTime Filetime
|
|
LastWriteTime Filetime
|
|
FileSizeHigh uint32
|
|
FileSizeLow uint32
|
|
}
|
|
|
|
// ShowWindow constants
|
|
const (
|
|
// winuser.h
|
|
SW_HIDE = 0
|
|
SW_NORMAL = 1
|
|
SW_SHOWNORMAL = 1
|
|
SW_SHOWMINIMIZED = 2
|
|
SW_SHOWMAXIMIZED = 3
|
|
SW_MAXIMIZE = 3
|
|
SW_SHOWNOACTIVATE = 4
|
|
SW_SHOW = 5
|
|
SW_MINIMIZE = 6
|
|
SW_SHOWMINNOACTIVE = 7
|
|
SW_SHOWNA = 8
|
|
SW_RESTORE = 9
|
|
SW_SHOWDEFAULT = 10
|
|
SW_FORCEMINIMIZE = 11
|
|
)
|
|
|
|
type StartupInfo struct {
|
|
Cb uint32
|
|
_ *uint16
|
|
Desktop *uint16
|
|
Title *uint16
|
|
X uint32
|
|
Y uint32
|
|
XSize uint32
|
|
YSize uint32
|
|
XCountChars uint32
|
|
YCountChars uint32
|
|
FillAttribute uint32
|
|
Flags uint32
|
|
ShowWindow uint16
|
|
_ uint16
|
|
_ *byte
|
|
StdInput Handle
|
|
StdOutput Handle
|
|
StdErr Handle
|
|
}
|
|
|
|
type StartupInfoEx struct {
|
|
StartupInfo
|
|
ProcThreadAttributeList *ProcThreadAttributeList
|
|
}
|
|
|
|
// ProcThreadAttributeList is a placeholder type to represent a PROC_THREAD_ATTRIBUTE_LIST.
|
|
//
|
|
// To create a *ProcThreadAttributeList, use NewProcThreadAttributeList, update
|
|
// it with ProcThreadAttributeListContainer.Update, free its memory using
|
|
// ProcThreadAttributeListContainer.Delete, and access the list itself using
|
|
// ProcThreadAttributeListContainer.List.
|
|
type ProcThreadAttributeList struct{}
|
|
|
|
type ProcThreadAttributeListContainer struct {
|
|
data *ProcThreadAttributeList
|
|
heapAllocations []uintptr
|
|
}
|
|
|
|
type ProcessInformation struct {
|
|
Process Handle
|
|
Thread Handle
|
|
ProcessId uint32
|
|
ThreadId uint32
|
|
}
|
|
|
|
type ProcessEntry32 struct {
|
|
Size uint32
|
|
Usage uint32
|
|
ProcessID uint32
|
|
DefaultHeapID uintptr
|
|
ModuleID uint32
|
|
Threads uint32
|
|
ParentProcessID uint32
|
|
PriClassBase int32
|
|
Flags uint32
|
|
ExeFile [MAX_PATH]uint16
|
|
}
|
|
|
|
type ThreadEntry32 struct {
|
|
Size uint32
|
|
Usage uint32
|
|
ThreadID uint32
|
|
OwnerProcessID uint32
|
|
BasePri int32
|
|
DeltaPri int32
|
|
Flags uint32
|
|
}
|
|
|
|
type Systemtime struct {
|
|
Year uint16
|
|
Month uint16
|
|
DayOfWeek uint16
|
|
Day uint16
|
|
Hour uint16
|
|
Minute uint16
|
|
Second uint16
|
|
Milliseconds uint16
|
|
}
|
|
|
|
type Timezoneinformation struct {
|
|
Bias int32
|
|
StandardName [32]uint16
|
|
StandardDate Systemtime
|
|
StandardBias int32
|
|
DaylightName [32]uint16
|
|
DaylightDate Systemtime
|
|
DaylightBias int32
|
|
}
|
|
|
|
// Socket related.
|
|
|
|
const (
|
|
AF_UNSPEC = 0
|
|
AF_UNIX = 1
|
|
AF_INET = 2
|
|
AF_NETBIOS = 17
|
|
AF_INET6 = 23
|
|
AF_IRDA = 26
|
|
AF_BTH = 32
|
|
|
|
SOCK_STREAM = 1
|
|
SOCK_DGRAM = 2
|
|
SOCK_RAW = 3
|
|
SOCK_RDM = 4
|
|
SOCK_SEQPACKET = 5
|
|
|
|
IPPROTO_IP = 0
|
|
IPPROTO_ICMP = 1
|
|
IPPROTO_IGMP = 2
|
|
BTHPROTO_RFCOMM = 3
|
|
IPPROTO_TCP = 6
|
|
IPPROTO_UDP = 17
|
|
IPPROTO_IPV6 = 41
|
|
IPPROTO_ICMPV6 = 58
|
|
IPPROTO_RM = 113
|
|
|
|
SOL_SOCKET = 0xffff
|
|
SO_REUSEADDR = 4
|
|
SO_KEEPALIVE = 8
|
|
SO_DONTROUTE = 16
|
|
SO_BROADCAST = 32
|
|
SO_LINGER = 128
|
|
SO_RCVBUF = 0x1002
|
|
SO_RCVTIMEO = 0x1006
|
|
SO_SNDBUF = 0x1001
|
|
SO_UPDATE_ACCEPT_CONTEXT = 0x700b
|
|
SO_UPDATE_CONNECT_CONTEXT = 0x7010
|
|
|
|
IOC_OUT = 0x40000000
|
|
IOC_IN = 0x80000000
|
|
IOC_VENDOR = 0x18000000
|
|
IOC_INOUT = IOC_IN | IOC_OUT
|
|
IOC_WS2 = 0x08000000
|
|
SIO_GET_EXTENSION_FUNCTION_POINTER = IOC_INOUT | IOC_WS2 | 6
|
|
SIO_KEEPALIVE_VALS = IOC_IN | IOC_VENDOR | 4
|
|
SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12
|
|
|
|
// cf. http://support.microsoft.com/default.aspx?scid=kb;en-us;257460
|
|
|
|
IP_HDRINCL = 0x2
|
|
IP_TOS = 0x3
|
|
IP_TTL = 0x4
|
|
IP_MULTICAST_IF = 0x9
|
|
IP_MULTICAST_TTL = 0xa
|
|
IP_MULTICAST_LOOP = 0xb
|
|
IP_ADD_MEMBERSHIP = 0xc
|
|
IP_DROP_MEMBERSHIP = 0xd
|
|
IP_PKTINFO = 0x13
|
|
|
|
IPV6_V6ONLY = 0x1b
|
|
IPV6_UNICAST_HOPS = 0x4
|
|
IPV6_MULTICAST_IF = 0x9
|
|
IPV6_MULTICAST_HOPS = 0xa
|
|
IPV6_MULTICAST_LOOP = 0xb
|
|
IPV6_JOIN_GROUP = 0xc
|
|
IPV6_LEAVE_GROUP = 0xd
|
|
IPV6_PKTINFO = 0x13
|
|
|
|
MSG_OOB = 0x1
|
|
MSG_PEEK = 0x2
|
|
MSG_DONTROUTE = 0x4
|
|
MSG_WAITALL = 0x8
|
|
|
|
MSG_TRUNC = 0x0100
|
|
MSG_CTRUNC = 0x0200
|
|
MSG_BCAST = 0x0400
|
|
MSG_MCAST = 0x0800
|
|
|
|
SOMAXCONN = 0x7fffffff
|
|
|
|
TCP_NODELAY = 1
|
|
|
|
SHUT_RD = 0
|
|
SHUT_WR = 1
|
|
SHUT_RDWR = 2
|
|
|
|
WSADESCRIPTION_LEN = 256
|
|
WSASYS_STATUS_LEN = 128
|
|
)
|
|
|
|
type WSABuf struct {
|
|
Len uint32
|
|
Buf *byte
|
|
}
|
|
|
|
type WSAMsg struct {
|
|
Name *syscall.RawSockaddrAny
|
|
Namelen int32
|
|
Buffers *WSABuf
|
|
BufferCount uint32
|
|
Control WSABuf
|
|
Flags uint32
|
|
}
|
|
|
|
// Flags for WSASocket
|
|
const (
|
|
WSA_FLAG_OVERLAPPED = 0x01
|
|
WSA_FLAG_MULTIPOINT_C_ROOT = 0x02
|
|
WSA_FLAG_MULTIPOINT_C_LEAF = 0x04
|
|
WSA_FLAG_MULTIPOINT_D_ROOT = 0x08
|
|
WSA_FLAG_MULTIPOINT_D_LEAF = 0x10
|
|
WSA_FLAG_ACCESS_SYSTEM_SECURITY = 0x40
|
|
WSA_FLAG_NO_HANDLE_INHERIT = 0x80
|
|
WSA_FLAG_REGISTERED_IO = 0x100
|
|
)
|
|
|
|
// Invented values to support what package os expects.
|
|
const (
|
|
S_IFMT = 0x1f000
|
|
S_IFIFO = 0x1000
|
|
S_IFCHR = 0x2000
|
|
S_IFDIR = 0x4000
|
|
S_IFBLK = 0x6000
|
|
S_IFREG = 0x8000
|
|
S_IFLNK = 0xa000
|
|
S_IFSOCK = 0xc000
|
|
S_ISUID = 0x800
|
|
S_ISGID = 0x400
|
|
S_ISVTX = 0x200
|
|
S_IRUSR = 0x100
|
|
S_IWRITE = 0x80
|
|
S_IWUSR = 0x80
|
|
S_IXUSR = 0x40
|
|
)
|
|
|
|
const (
|
|
FILE_TYPE_CHAR = 0x0002
|
|
FILE_TYPE_DISK = 0x0001
|
|
FILE_TYPE_PIPE = 0x0003
|
|
FILE_TYPE_REMOTE = 0x8000
|
|
FILE_TYPE_UNKNOWN = 0x0000
|
|
)
|
|
|
|
type Hostent struct {
|
|
Name *byte
|
|
Aliases **byte
|
|
AddrType uint16
|
|
Length uint16
|
|
AddrList **byte
|
|
}
|
|
|
|
type Protoent struct {
|
|
Name *byte
|
|
Aliases **byte
|
|
Proto uint16
|
|
}
|
|
|
|
const (
|
|
DNS_TYPE_A = 0x0001
|
|
DNS_TYPE_NS = 0x0002
|
|
DNS_TYPE_MD = 0x0003
|
|
DNS_TYPE_MF = 0x0004
|
|
DNS_TYPE_CNAME = 0x0005
|
|
DNS_TYPE_SOA = 0x0006
|
|
DNS_TYPE_MB = 0x0007
|
|
DNS_TYPE_MG = 0x0008
|
|
DNS_TYPE_MR = 0x0009
|
|
DNS_TYPE_NULL = 0x000a
|
|
DNS_TYPE_WKS = 0x000b
|
|
DNS_TYPE_PTR = 0x000c
|
|
DNS_TYPE_HINFO = 0x000d
|
|
DNS_TYPE_MINFO = 0x000e
|
|
DNS_TYPE_MX = 0x000f
|
|
DNS_TYPE_TEXT = 0x0010
|
|
DNS_TYPE_RP = 0x0011
|
|
DNS_TYPE_AFSDB = 0x0012
|
|
DNS_TYPE_X25 = 0x0013
|
|
DNS_TYPE_ISDN = 0x0014
|
|
DNS_TYPE_RT = 0x0015
|
|
DNS_TYPE_NSAP = 0x0016
|
|
DNS_TYPE_NSAPPTR = 0x0017
|
|
DNS_TYPE_SIG = 0x0018
|
|
DNS_TYPE_KEY = 0x0019
|
|
DNS_TYPE_PX = 0x001a
|
|
DNS_TYPE_GPOS = 0x001b
|
|
DNS_TYPE_AAAA = 0x001c
|
|
DNS_TYPE_LOC = 0x001d
|
|
DNS_TYPE_NXT = 0x001e
|
|
DNS_TYPE_EID = 0x001f
|
|
DNS_TYPE_NIMLOC = 0x0020
|
|
DNS_TYPE_SRV = 0x0021
|
|
DNS_TYPE_ATMA = 0x0022
|
|
DNS_TYPE_NAPTR = 0x0023
|
|
DNS_TYPE_KX = 0x0024
|
|
DNS_TYPE_CERT = 0x0025
|
|
DNS_TYPE_A6 = 0x0026
|
|
DNS_TYPE_DNAME = 0x0027
|
|
DNS_TYPE_SINK = 0x0028
|
|
DNS_TYPE_OPT = 0x0029
|
|
DNS_TYPE_DS = 0x002B
|
|
DNS_TYPE_RRSIG = 0x002E
|
|
DNS_TYPE_NSEC = 0x002F
|
|
DNS_TYPE_DNSKEY = 0x0030
|
|
DNS_TYPE_DHCID = 0x0031
|
|
DNS_TYPE_UINFO = 0x0064
|
|
DNS_TYPE_UID = 0x0065
|
|
DNS_TYPE_GID = 0x0066
|
|
DNS_TYPE_UNSPEC = 0x0067
|
|
DNS_TYPE_ADDRS = 0x00f8
|
|
DNS_TYPE_TKEY = 0x00f9
|
|
DNS_TYPE_TSIG = 0x00fa
|
|
DNS_TYPE_IXFR = 0x00fb
|
|
DNS_TYPE_AXFR = 0x00fc
|
|
DNS_TYPE_MAILB = 0x00fd
|
|
DNS_TYPE_MAILA = 0x00fe
|
|
DNS_TYPE_ALL = 0x00ff
|
|
DNS_TYPE_ANY = 0x00ff
|
|
DNS_TYPE_WINS = 0xff01
|
|
DNS_TYPE_WINSR = 0xff02
|
|
DNS_TYPE_NBSTAT = 0xff01
|
|
)
|
|
|
|
const (
|
|
// flags inside DNSRecord.Dw
|
|
DnsSectionQuestion = 0x0000
|
|
DnsSectionAnswer = 0x0001
|
|
DnsSectionAuthority = 0x0002
|
|
DnsSectionAdditional = 0x0003
|
|
)
|
|
|
|
type DNSSRVData struct {
|
|
Target *uint16
|
|
Priority uint16
|
|
Weight uint16
|
|
Port uint16
|
|
Pad uint16
|
|
}
|
|
|
|
type DNSPTRData struct {
|
|
Host *uint16
|
|
}
|
|
|
|
type DNSMXData struct {
|
|
NameExchange *uint16
|
|
Preference uint16
|
|
Pad uint16
|
|
}
|
|
|
|
type DNSTXTData struct {
|
|
StringCount uint16
|
|
StringArray [1]*uint16
|
|
}
|
|
|
|
type DNSRecord struct {
|
|
Next *DNSRecord
|
|
Name *uint16
|
|
Type uint16
|
|
Length uint16
|
|
Dw uint32
|
|
Ttl uint32
|
|
Reserved uint32
|
|
Data [40]byte
|
|
}
|
|
|
|
const (
|
|
TF_DISCONNECT = 1
|
|
TF_REUSE_SOCKET = 2
|
|
TF_WRITE_BEHIND = 4
|
|
TF_USE_DEFAULT_WORKER = 0
|
|
TF_USE_SYSTEM_THREAD = 16
|
|
TF_USE_KERNEL_APC = 32
|
|
)
|
|
|
|
type TransmitFileBuffers struct {
|
|
Head uintptr
|
|
HeadLength uint32
|
|
Tail uintptr
|
|
TailLength uint32
|
|
}
|
|
|
|
const (
|
|
IFF_UP = 1
|
|
IFF_BROADCAST = 2
|
|
IFF_LOOPBACK = 4
|
|
IFF_POINTTOPOINT = 8
|
|
IFF_MULTICAST = 16
|
|
)
|
|
|
|
const SIO_GET_INTERFACE_LIST = 0x4004747F
|
|
|
|
// TODO(mattn): SockaddrGen is union of sockaddr/sockaddr_in/sockaddr_in6_old.
|
|
// will be fixed to change variable type as suitable.
|
|
|
|
type SockaddrGen [24]byte
|
|
|
|
type InterfaceInfo struct {
|
|
Flags uint32
|
|
Address SockaddrGen
|
|
BroadcastAddress SockaddrGen
|
|
Netmask SockaddrGen
|
|
}
|
|
|
|
type IpAddressString struct {
|
|
String [16]byte
|
|
}
|
|
|
|
type IpMaskString IpAddressString
|
|
|
|
type IpAddrString struct {
|
|
Next *IpAddrString
|
|
IpAddress IpAddressString
|
|
IpMask IpMaskString
|
|
Context uint32
|
|
}
|
|
|
|
const MAX_ADAPTER_NAME_LENGTH = 256
|
|
const MAX_ADAPTER_DESCRIPTION_LENGTH = 128
|
|
const MAX_ADAPTER_ADDRESS_LENGTH = 8
|
|
|
|
type IpAdapterInfo struct {
|
|
Next *IpAdapterInfo
|
|
ComboIndex uint32
|
|
AdapterName [MAX_ADAPTER_NAME_LENGTH + 4]byte
|
|
Description [MAX_ADAPTER_DESCRIPTION_LENGTH + 4]byte
|
|
AddressLength uint32
|
|
Address [MAX_ADAPTER_ADDRESS_LENGTH]byte
|
|
Index uint32
|
|
Type uint32
|
|
DhcpEnabled uint32
|
|
CurrentIpAddress *IpAddrString
|
|
IpAddressList IpAddrString
|
|
GatewayList IpAddrString
|
|
DhcpServer IpAddrString
|
|
HaveWins bool
|
|
PrimaryWinsServer IpAddrString
|
|
SecondaryWinsServer IpAddrString
|
|
LeaseObtained int64
|
|
LeaseExpires int64
|
|
}
|
|
|
|
const MAXLEN_PHYSADDR = 8
|
|
const MAX_INTERFACE_NAME_LEN = 256
|
|
const MAXLEN_IFDESCR = 256
|
|
|
|
type MibIfRow struct {
|
|
Name [MAX_INTERFACE_NAME_LEN]uint16
|
|
Index uint32
|
|
Type uint32
|
|
Mtu uint32
|
|
Speed uint32
|
|
PhysAddrLen uint32
|
|
PhysAddr [MAXLEN_PHYSADDR]byte
|
|
AdminStatus uint32
|
|
OperStatus uint32
|
|
LastChange uint32
|
|
InOctets uint32
|
|
InUcastPkts uint32
|
|
InNUcastPkts uint32
|
|
InDiscards uint32
|
|
InErrors uint32
|
|
InUnknownProtos uint32
|
|
OutOctets uint32
|
|
OutUcastPkts uint32
|
|
OutNUcastPkts uint32
|
|
OutDiscards uint32
|
|
OutErrors uint32
|
|
OutQLen uint32
|
|
DescrLen uint32
|
|
Descr [MAXLEN_IFDESCR]byte
|
|
}
|
|
|
|
type CertInfo struct {
|
|
Version uint32
|
|
SerialNumber CryptIntegerBlob
|
|
SignatureAlgorithm CryptAlgorithmIdentifier
|
|
Issuer CertNameBlob
|
|
NotBefore Filetime
|
|
NotAfter Filetime
|
|
Subject CertNameBlob
|
|
SubjectPublicKeyInfo CertPublicKeyInfo
|
|
IssuerUniqueId CryptBitBlob
|
|
SubjectUniqueId CryptBitBlob
|
|
CountExtensions uint32
|
|
Extensions *CertExtension
|
|
}
|
|
|
|
type CertExtension struct {
|
|
ObjId *byte
|
|
Critical int32
|
|
Value CryptObjidBlob
|
|
}
|
|
|
|
type CryptAlgorithmIdentifier struct {
|
|
ObjId *byte
|
|
Parameters CryptObjidBlob
|
|
}
|
|
|
|
type CertPublicKeyInfo struct {
|
|
Algorithm CryptAlgorithmIdentifier
|
|
PublicKey CryptBitBlob
|
|
}
|
|
|
|
type DataBlob struct {
|
|
Size uint32
|
|
Data *byte
|
|
}
|
|
type CryptIntegerBlob DataBlob
|
|
type CryptUintBlob DataBlob
|
|
type CryptObjidBlob DataBlob
|
|
type CertNameBlob DataBlob
|
|
type CertRdnValueBlob DataBlob
|
|
type CertBlob DataBlob
|
|
type CrlBlob DataBlob
|
|
type CryptDataBlob DataBlob
|
|
type CryptHashBlob DataBlob
|
|
type CryptDigestBlob DataBlob
|
|
type CryptDerBlob DataBlob
|
|
type CryptAttrBlob DataBlob
|
|
|
|
type CryptBitBlob struct {
|
|
Size uint32
|
|
Data *byte
|
|
UnusedBits uint32
|
|
}
|
|
|
|
type CertContext struct {
|
|
EncodingType uint32
|
|
EncodedCert *byte
|
|
Length uint32
|
|
CertInfo *CertInfo
|
|
Store Handle
|
|
}
|
|
|
|
type CertChainContext struct {
|
|
Size uint32
|
|
TrustStatus CertTrustStatus
|
|
ChainCount uint32
|
|
Chains **CertSimpleChain
|
|
LowerQualityChainCount uint32
|
|
LowerQualityChains **CertChainContext
|
|
HasRevocationFreshnessTime uint32
|
|
RevocationFreshnessTime uint32
|
|
}
|
|
|
|
type CertTrustListInfo struct {
|
|
// Not implemented
|
|
}
|
|
|
|
type CertSimpleChain struct {
|
|
Size uint32
|
|
TrustStatus CertTrustStatus
|
|
NumElements uint32
|
|
Elements **CertChainElement
|
|
TrustListInfo *CertTrustListInfo
|
|
HasRevocationFreshnessTime uint32
|
|
RevocationFreshnessTime uint32
|
|
}
|
|
|
|
type CertChainElement struct {
|
|
Size uint32
|
|
CertContext *CertContext
|
|
TrustStatus CertTrustStatus
|
|
RevocationInfo *CertRevocationInfo
|
|
IssuanceUsage *CertEnhKeyUsage
|
|
ApplicationUsage *CertEnhKeyUsage
|
|
ExtendedErrorInfo *uint16
|
|
}
|
|
|
|
type CertRevocationCrlInfo struct {
|
|
// Not implemented
|
|
}
|
|
|
|
type CertRevocationInfo struct {
|
|
Size uint32
|
|
RevocationResult uint32
|
|
RevocationOid *byte
|
|
OidSpecificInfo Pointer
|
|
HasFreshnessTime uint32
|
|
FreshnessTime uint32
|
|
CrlInfo *CertRevocationCrlInfo
|
|
}
|
|
|
|
type CertTrustStatus struct {
|
|
ErrorStatus uint32
|
|
InfoStatus uint32
|
|
}
|
|
|
|
type CertUsageMatch struct {
|
|
Type uint32
|
|
Usage CertEnhKeyUsage
|
|
}
|
|
|
|
type CertEnhKeyUsage struct {
|
|
Length uint32
|
|
UsageIdentifiers **byte
|
|
}
|
|
|
|
type CertChainPara struct {
|
|
Size uint32
|
|
RequestedUsage CertUsageMatch
|
|
RequstedIssuancePolicy CertUsageMatch
|
|
URLRetrievalTimeout uint32
|
|
CheckRevocationFreshnessTime uint32
|
|
RevocationFreshnessTime uint32
|
|
CacheResync *Filetime
|
|
}
|
|
|
|
type CertChainPolicyPara struct {
|
|
Size uint32
|
|
Flags uint32
|
|
ExtraPolicyPara Pointer
|
|
}
|
|
|
|
type SSLExtraCertChainPolicyPara struct {
|
|
Size uint32
|
|
AuthType uint32
|
|
Checks uint32
|
|
ServerName *uint16
|
|
}
|
|
|
|
type CertChainPolicyStatus struct {
|
|
Size uint32
|
|
Error uint32
|
|
ChainIndex uint32
|
|
ElementIndex uint32
|
|
ExtraPolicyStatus Pointer
|
|
}
|
|
|
|
type CertPolicyInfo struct {
|
|
Identifier *byte
|
|
CountQualifiers uint32
|
|
Qualifiers *CertPolicyQualifierInfo
|
|
}
|
|
|
|
type CertPoliciesInfo struct {
|
|
Count uint32
|
|
PolicyInfos *CertPolicyInfo
|
|
}
|
|
|
|
type CertPolicyQualifierInfo struct {
|
|
// Not implemented
|
|
}
|
|
|
|
type CertStrongSignPara struct {
|
|
Size uint32
|
|
InfoChoice uint32
|
|
InfoOrSerializedInfoOrOID unsafe.Pointer
|
|
}
|
|
|
|
type CryptProtectPromptStruct struct {
|
|
Size uint32
|
|
PromptFlags uint32
|
|
App HWND
|
|
Prompt *uint16
|
|
}
|
|
|
|
type CertChainFindByIssuerPara struct {
|
|
Size uint32
|
|
UsageIdentifier *byte
|
|
KeySpec uint32
|
|
AcquirePrivateKeyFlags uint32
|
|
IssuerCount uint32
|
|
Issuer Pointer
|
|
FindCallback Pointer
|
|
FindArg Pointer
|
|
IssuerChainIndex *uint32
|
|
IssuerElementIndex *uint32
|
|
}
|
|
|
|
type WinTrustData struct {
|
|
Size uint32
|
|
PolicyCallbackData uintptr
|
|
SIPClientData uintptr
|
|
UIChoice uint32
|
|
RevocationChecks uint32
|
|
UnionChoice uint32
|
|
FileOrCatalogOrBlobOrSgnrOrCert unsafe.Pointer
|
|
StateAction uint32
|
|
StateData Handle
|
|
URLReference *uint16
|
|
ProvFlags uint32
|
|
UIContext uint32
|
|
SignatureSettings *WinTrustSignatureSettings
|
|
}
|
|
|
|
type WinTrustFileInfo struct {
|
|
Size uint32
|
|
FilePath *uint16
|
|
File Handle
|
|
KnownSubject *GUID
|
|
}
|
|
|
|
type WinTrustSignatureSettings struct {
|
|
Size uint32
|
|
Index uint32
|
|
Flags uint32
|
|
SecondarySigs uint32
|
|
VerifiedSigIndex uint32
|
|
CryptoPolicy *CertStrongSignPara
|
|
}
|
|
|
|
const (
|
|
// do not reorder
|
|
HKEY_CLASSES_ROOT = 0x80000000 + iota
|
|
HKEY_CURRENT_USER
|
|
HKEY_LOCAL_MACHINE
|
|
HKEY_USERS
|
|
HKEY_PERFORMANCE_DATA
|
|
HKEY_CURRENT_CONFIG
|
|
HKEY_DYN_DATA
|
|
|
|
KEY_QUERY_VALUE = 1
|
|
KEY_SET_VALUE = 2
|
|
KEY_CREATE_SUB_KEY = 4
|
|
KEY_ENUMERATE_SUB_KEYS = 8
|
|
KEY_NOTIFY = 16
|
|
KEY_CREATE_LINK = 32
|
|
KEY_WRITE = 0x20006
|
|
KEY_EXECUTE = 0x20019
|
|
KEY_READ = 0x20019
|
|
KEY_WOW64_64KEY = 0x0100
|
|
KEY_WOW64_32KEY = 0x0200
|
|
KEY_ALL_ACCESS = 0xf003f
|
|
)
|
|
|
|
const (
|
|
// do not reorder
|
|
REG_NONE = iota
|
|
REG_SZ
|
|
REG_EXPAND_SZ
|
|
REG_BINARY
|
|
REG_DWORD_LITTLE_ENDIAN
|
|
REG_DWORD_BIG_ENDIAN
|
|
REG_LINK
|
|
REG_MULTI_SZ
|
|
REG_RESOURCE_LIST
|
|
REG_FULL_RESOURCE_DESCRIPTOR
|
|
REG_RESOURCE_REQUIREMENTS_LIST
|
|
REG_QWORD_LITTLE_ENDIAN
|
|
REG_DWORD = REG_DWORD_LITTLE_ENDIAN
|
|
REG_QWORD = REG_QWORD_LITTLE_ENDIAN
|
|
)
|
|
|
|
const (
|
|
EVENT_MODIFY_STATE = 0x0002
|
|
EVENT_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3
|
|
|
|
MUTANT_QUERY_STATE = 0x0001
|
|
MUTANT_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | MUTANT_QUERY_STATE
|
|
|
|
SEMAPHORE_MODIFY_STATE = 0x0002
|
|
SEMAPHORE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3
|
|
|
|
TIMER_QUERY_STATE = 0x0001
|
|
TIMER_MODIFY_STATE = 0x0002
|
|
TIMER_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | TIMER_QUERY_STATE | TIMER_MODIFY_STATE
|
|
|
|
MUTEX_MODIFY_STATE = MUTANT_QUERY_STATE
|
|
MUTEX_ALL_ACCESS = MUTANT_ALL_ACCESS
|
|
|
|
CREATE_EVENT_MANUAL_RESET = 0x1
|
|
CREATE_EVENT_INITIAL_SET = 0x2
|
|
CREATE_MUTEX_INITIAL_OWNER = 0x1
|
|
)
|
|
|
|
type AddrinfoW struct {
|
|
Flags int32
|
|
Family int32
|
|
Socktype int32
|
|
Protocol int32
|
|
Addrlen uintptr
|
|
Canonname *uint16
|
|
Addr uintptr
|
|
Next *AddrinfoW
|
|
}
|
|
|
|
const (
|
|
AI_PASSIVE = 1
|
|
AI_CANONNAME = 2
|
|
AI_NUMERICHOST = 4
|
|
)
|
|
|
|
type GUID struct {
|
|
Data1 uint32
|
|
Data2 uint16
|
|
Data3 uint16
|
|
Data4 [8]byte
|
|
}
|
|
|
|
var WSAID_CONNECTEX = GUID{
|
|
0x25a207b9,
|
|
0xddf3,
|
|
0x4660,
|
|
[8]byte{0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e},
|
|
}
|
|
|
|
var WSAID_WSASENDMSG = GUID{
|
|
0xa441e712,
|
|
0x754f,
|
|
0x43ca,
|
|
[8]byte{0x84, 0xa7, 0x0d, 0xee, 0x44, 0xcf, 0x60, 0x6d},
|
|
}
|
|
|
|
var WSAID_WSARECVMSG = GUID{
|
|
0xf689d7c8,
|
|
0x6f1f,
|
|
0x436b,
|
|
[8]byte{0x8a, 0x53, 0xe5, 0x4f, 0xe3, 0x51, 0xc3, 0x22},
|
|
}
|
|
|
|
const (
|
|
FILE_SKIP_COMPLETION_PORT_ON_SUCCESS = 1
|
|
FILE_SKIP_SET_EVENT_ON_HANDLE = 2
|
|
)
|
|
|
|
const (
|
|
WSAPROTOCOL_LEN = 255
|
|
MAX_PROTOCOL_CHAIN = 7
|
|
BASE_PROTOCOL = 1
|
|
LAYERED_PROTOCOL = 0
|
|
|
|
XP1_CONNECTIONLESS = 0x00000001
|
|
XP1_GUARANTEED_DELIVERY = 0x00000002
|
|
XP1_GUARANTEED_ORDER = 0x00000004
|
|
XP1_MESSAGE_ORIENTED = 0x00000008
|
|
XP1_PSEUDO_STREAM = 0x00000010
|
|
XP1_GRACEFUL_CLOSE = 0x00000020
|
|
XP1_EXPEDITED_DATA = 0x00000040
|
|
XP1_CONNECT_DATA = 0x00000080
|
|
XP1_DISCONNECT_DATA = 0x00000100
|
|
XP1_SUPPORT_BROADCAST = 0x00000200
|
|
XP1_SUPPORT_MULTIPOINT = 0x00000400
|
|
XP1_MULTIPOINT_CONTROL_PLANE = 0x00000800
|
|
XP1_MULTIPOINT_DATA_PLANE = 0x00001000
|
|
XP1_QOS_SUPPORTED = 0x00002000
|
|
XP1_UNI_SEND = 0x00008000
|
|
XP1_UNI_RECV = 0x00010000
|
|
XP1_IFS_HANDLES = 0x00020000
|
|
XP1_PARTIAL_MESSAGE = 0x00040000
|
|
XP1_SAN_SUPPORT_SDP = 0x00080000
|
|
|
|
PFL_MULTIPLE_PROTO_ENTRIES = 0x00000001
|
|
PFL_RECOMMENDED_PROTO_ENTRY = 0x00000002
|
|
PFL_HIDDEN = 0x00000004
|
|
PFL_MATCHES_PROTOCOL_ZERO = 0x00000008
|
|
PFL_NETWORKDIRECT_PROVIDER = 0x00000010
|
|
)
|
|
|
|
type WSAProtocolInfo struct {
|
|
ServiceFlags1 uint32
|
|
ServiceFlags2 uint32
|
|
ServiceFlags3 uint32
|
|
ServiceFlags4 uint32
|
|
ProviderFlags uint32
|
|
ProviderId GUID
|
|
CatalogEntryId uint32
|
|
ProtocolChain WSAProtocolChain
|
|
Version int32
|
|
AddressFamily int32
|
|
MaxSockAddr int32
|
|
MinSockAddr int32
|
|
SocketType int32
|
|
Protocol int32
|
|
ProtocolMaxOffset int32
|
|
NetworkByteOrder int32
|
|
SecurityScheme int32
|
|
MessageSize uint32
|
|
ProviderReserved uint32
|
|
ProtocolName [WSAPROTOCOL_LEN + 1]uint16
|
|
}
|
|
|
|
type WSAProtocolChain struct {
|
|
ChainLen int32
|
|
ChainEntries [MAX_PROTOCOL_CHAIN]uint32
|
|
}
|
|
|
|
type TCPKeepalive struct {
|
|
OnOff uint32
|
|
Time uint32
|
|
Interval uint32
|
|
}
|
|
|
|
type symbolicLinkReparseBuffer struct {
|
|
SubstituteNameOffset uint16
|
|
SubstituteNameLength uint16
|
|
PrintNameOffset uint16
|
|
PrintNameLength uint16
|
|
Flags uint32
|
|
PathBuffer [1]uint16
|
|
}
|
|
|
|
type mountPointReparseBuffer struct {
|
|
SubstituteNameOffset uint16
|
|
SubstituteNameLength uint16
|
|
PrintNameOffset uint16
|
|
PrintNameLength uint16
|
|
PathBuffer [1]uint16
|
|
}
|
|
|
|
type reparseDataBuffer struct {
|
|
ReparseTag uint32
|
|
ReparseDataLength uint16
|
|
Reserved uint16
|
|
|
|
// GenericReparseBuffer
|
|
reparseBuffer byte
|
|
}
|
|
|
|
const (
|
|
FSCTL_GET_REPARSE_POINT = 0x900A8
|
|
MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16 * 1024
|
|
IO_REPARSE_TAG_MOUNT_POINT = 0xA0000003
|
|
IO_REPARSE_TAG_SYMLINK = 0xA000000C
|
|
SYMBOLIC_LINK_FLAG_DIRECTORY = 0x1
|
|
)
|
|
|
|
const (
|
|
ComputerNameNetBIOS = 0
|
|
ComputerNameDnsHostname = 1
|
|
ComputerNameDnsDomain = 2
|
|
ComputerNameDnsFullyQualified = 3
|
|
ComputerNamePhysicalNetBIOS = 4
|
|
ComputerNamePhysicalDnsHostname = 5
|
|
ComputerNamePhysicalDnsDomain = 6
|
|
ComputerNamePhysicalDnsFullyQualified = 7
|
|
ComputerNameMax = 8
|
|
)
|
|
|
|
// For MessageBox()
|
|
const (
|
|
MB_OK = 0x00000000
|
|
MB_OKCANCEL = 0x00000001
|
|
MB_ABORTRETRYIGNORE = 0x00000002
|
|
MB_YESNOCANCEL = 0x00000003
|
|
MB_YESNO = 0x00000004
|
|
MB_RETRYCANCEL = 0x00000005
|
|
MB_CANCELTRYCONTINUE = 0x00000006
|
|
MB_ICONHAND = 0x00000010
|
|
MB_ICONQUESTION = 0x00000020
|
|
MB_ICONEXCLAMATION = 0x00000030
|
|
MB_ICONASTERISK = 0x00000040
|
|
MB_USERICON = 0x00000080
|
|
MB_ICONWARNING = MB_ICONEXCLAMATION
|
|
MB_ICONERROR = MB_ICONHAND
|
|
MB_ICONINFORMATION = MB_ICONASTERISK
|
|
MB_ICONSTOP = MB_ICONHAND
|
|
MB_DEFBUTTON1 = 0x00000000
|
|
MB_DEFBUTTON2 = 0x00000100
|
|
MB_DEFBUTTON3 = 0x00000200
|
|
MB_DEFBUTTON4 = 0x00000300
|
|
MB_APPLMODAL = 0x00000000
|
|
MB_SYSTEMMODAL = 0x00001000
|
|
MB_TASKMODAL = 0x00002000
|
|
MB_HELP = 0x00004000
|
|
MB_NOFOCUS = 0x00008000
|
|
MB_SETFOREGROUND = 0x00010000
|
|
MB_DEFAULT_DESKTOP_ONLY = 0x00020000
|
|
MB_TOPMOST = 0x00040000
|
|
MB_RIGHT = 0x00080000
|
|
MB_RTLREADING = 0x00100000
|
|
MB_SERVICE_NOTIFICATION = 0x00200000
|
|
)
|
|
|
|
const (
|
|
MOVEFILE_REPLACE_EXISTING = 0x1
|
|
MOVEFILE_COPY_ALLOWED = 0x2
|
|
MOVEFILE_DELAY_UNTIL_REBOOT = 0x4
|
|
MOVEFILE_WRITE_THROUGH = 0x8
|
|
MOVEFILE_CREATE_HARDLINK = 0x10
|
|
MOVEFILE_FAIL_IF_NOT_TRACKABLE = 0x20
|
|
)
|
|
|
|
const GAA_FLAG_INCLUDE_PREFIX = 0x00000010
|
|
|
|
const (
|
|
IF_TYPE_OTHER = 1
|
|
IF_TYPE_ETHERNET_CSMACD = 6
|
|
IF_TYPE_ISO88025_TOKENRING = 9
|
|
IF_TYPE_PPP = 23
|
|
IF_TYPE_SOFTWARE_LOOPBACK = 24
|
|
IF_TYPE_ATM = 37
|
|
IF_TYPE_IEEE80211 = 71
|
|
IF_TYPE_TUNNEL = 131
|
|
IF_TYPE_IEEE1394 = 144
|
|
)
|
|
|
|
type SocketAddress struct {
|
|
Sockaddr *syscall.RawSockaddrAny
|
|
SockaddrLength int32
|
|
}
|
|
|
|
// IP returns an IPv4 or IPv6 address, or nil if the underlying SocketAddress is neither.
|
|
func (addr *SocketAddress) IP() net.IP {
|
|
if uintptr(addr.SockaddrLength) >= unsafe.Sizeof(RawSockaddrInet4{}) && addr.Sockaddr.Addr.Family == AF_INET {
|
|
return (*RawSockaddrInet4)(unsafe.Pointer(addr.Sockaddr)).Addr[:]
|
|
} else if uintptr(addr.SockaddrLength) >= unsafe.Sizeof(RawSockaddrInet6{}) && addr.Sockaddr.Addr.Family == AF_INET6 {
|
|
return (*RawSockaddrInet6)(unsafe.Pointer(addr.Sockaddr)).Addr[:]
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type IpAdapterUnicastAddress struct {
|
|
Length uint32
|
|
Flags uint32
|
|
Next *IpAdapterUnicastAddress
|
|
Address SocketAddress
|
|
PrefixOrigin int32
|
|
SuffixOrigin int32
|
|
DadState int32
|
|
ValidLifetime uint32
|
|
PreferredLifetime uint32
|
|
LeaseLifetime uint32
|
|
OnLinkPrefixLength uint8
|
|
}
|
|
|
|
type IpAdapterAnycastAddress struct {
|
|
Length uint32
|
|
Flags uint32
|
|
Next *IpAdapterAnycastAddress
|
|
Address SocketAddress
|
|
}
|
|
|
|
type IpAdapterMulticastAddress struct {
|
|
Length uint32
|
|
Flags uint32
|
|
Next *IpAdapterMulticastAddress
|
|
Address SocketAddress
|
|
}
|
|
|
|
type IpAdapterDnsServerAdapter struct {
|
|
Length uint32
|
|
Reserved uint32
|
|
Next *IpAdapterDnsServerAdapter
|
|
Address SocketAddress
|
|
}
|
|
|
|
type IpAdapterPrefix struct {
|
|
Length uint32
|
|
Flags uint32
|
|
Next *IpAdapterPrefix
|
|
Address SocketAddress
|
|
PrefixLength uint32
|
|
}
|
|
|
|
type IpAdapterAddresses struct {
|
|
Length uint32
|
|
IfIndex uint32
|
|
Next *IpAdapterAddresses
|
|
AdapterName *byte
|
|
FirstUnicastAddress *IpAdapterUnicastAddress
|
|
FirstAnycastAddress *IpAdapterAnycastAddress
|
|
FirstMulticastAddress *IpAdapterMulticastAddress
|
|
FirstDnsServerAddress *IpAdapterDnsServerAdapter
|
|
DnsSuffix *uint16
|
|
Description *uint16
|
|
FriendlyName *uint16
|
|
PhysicalAddress [syscall.MAX_ADAPTER_ADDRESS_LENGTH]byte
|
|
PhysicalAddressLength uint32
|
|
Flags uint32
|
|
Mtu uint32
|
|
IfType uint32
|
|
OperStatus uint32
|
|
Ipv6IfIndex uint32
|
|
ZoneIndices [16]uint32
|
|
FirstPrefix *IpAdapterPrefix
|
|
/* more fields might be present here. */
|
|
}
|
|
|
|
const (
|
|
IfOperStatusUp = 1
|
|
IfOperStatusDown = 2
|
|
IfOperStatusTesting = 3
|
|
IfOperStatusUnknown = 4
|
|
IfOperStatusDormant = 5
|
|
IfOperStatusNotPresent = 6
|
|
IfOperStatusLowerLayerDown = 7
|
|
)
|
|
|
|
// Console related constants used for the mode parameter to SetConsoleMode. See
|
|
// https://docs.microsoft.com/en-us/windows/console/setconsolemode for details.
|
|
|
|
const (
|
|
ENABLE_PROCESSED_INPUT = 0x1
|
|
ENABLE_LINE_INPUT = 0x2
|
|
ENABLE_ECHO_INPUT = 0x4
|
|
ENABLE_WINDOW_INPUT = 0x8
|
|
ENABLE_MOUSE_INPUT = 0x10
|
|
ENABLE_INSERT_MODE = 0x20
|
|
ENABLE_QUICK_EDIT_MODE = 0x40
|
|
ENABLE_EXTENDED_FLAGS = 0x80
|
|
ENABLE_AUTO_POSITION = 0x100
|
|
ENABLE_VIRTUAL_TERMINAL_INPUT = 0x200
|
|
|
|
ENABLE_PROCESSED_OUTPUT = 0x1
|
|
ENABLE_WRAP_AT_EOL_OUTPUT = 0x2
|
|
ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x4
|
|
DISABLE_NEWLINE_AUTO_RETURN = 0x8
|
|
ENABLE_LVB_GRID_WORLDWIDE = 0x10
|
|
)
|
|
|
|
type Coord struct {
|
|
X int16
|
|
Y int16
|
|
}
|
|
|
|
type SmallRect struct {
|
|
Left int16
|
|
Top int16
|
|
Right int16
|
|
Bottom int16
|
|
}
|
|
|
|
// Used with GetConsoleScreenBuffer to retrieve information about a console
|
|
// screen buffer. See
|
|
// https://docs.microsoft.com/en-us/windows/console/console-screen-buffer-info-str
|
|
// for details.
|
|
|
|
type ConsoleScreenBufferInfo struct {
|
|
Size Coord
|
|
CursorPosition Coord
|
|
Attributes uint16
|
|
Window SmallRect
|
|
MaximumWindowSize Coord
|
|
}
|
|
|
|
const UNIX_PATH_MAX = 108 // defined in afunix.h
|
|
|
|
const (
|
|
// flags for JOBOBJECT_BASIC_LIMIT_INFORMATION.LimitFlags
|
|
JOB_OBJECT_LIMIT_ACTIVE_PROCESS = 0x00000008
|
|
JOB_OBJECT_LIMIT_AFFINITY = 0x00000010
|
|
JOB_OBJECT_LIMIT_BREAKAWAY_OK = 0x00000800
|
|
JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION = 0x00000400
|
|
JOB_OBJECT_LIMIT_JOB_MEMORY = 0x00000200
|
|
JOB_OBJECT_LIMIT_JOB_TIME = 0x00000004
|
|
JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE = 0x00002000
|
|
JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME = 0x00000040
|
|
JOB_OBJECT_LIMIT_PRIORITY_CLASS = 0x00000020
|
|
JOB_OBJECT_LIMIT_PROCESS_MEMORY = 0x00000100
|
|
JOB_OBJECT_LIMIT_PROCESS_TIME = 0x00000002
|
|
JOB_OBJECT_LIMIT_SCHEDULING_CLASS = 0x00000080
|
|
JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK = 0x00001000
|
|
JOB_OBJECT_LIMIT_SUBSET_AFFINITY = 0x00004000
|
|
JOB_OBJECT_LIMIT_WORKINGSET = 0x00000001
|
|
)
|
|
|
|
type IO_COUNTERS struct {
|
|
ReadOperationCount uint64
|
|
WriteOperationCount uint64
|
|
OtherOperationCount uint64
|
|
ReadTransferCount uint64
|
|
WriteTransferCount uint64
|
|
OtherTransferCount uint64
|
|
}
|
|
|
|
type JOBOBJECT_EXTENDED_LIMIT_INFORMATION struct {
|
|
BasicLimitInformation JOBOBJECT_BASIC_LIMIT_INFORMATION
|
|
IoInfo IO_COUNTERS
|
|
ProcessMemoryLimit uintptr
|
|
JobMemoryLimit uintptr
|
|
PeakProcessMemoryUsed uintptr
|
|
PeakJobMemoryUsed uintptr
|
|
}
|
|
|
|
const (
|
|
// UIRestrictionsClass
|
|
JOB_OBJECT_UILIMIT_DESKTOP = 0x00000040
|
|
JOB_OBJECT_UILIMIT_DISPLAYSETTINGS = 0x00000010
|
|
JOB_OBJECT_UILIMIT_EXITWINDOWS = 0x00000080
|
|
JOB_OBJECT_UILIMIT_GLOBALATOMS = 0x00000020
|
|
JOB_OBJECT_UILIMIT_HANDLES = 0x00000001
|
|
JOB_OBJECT_UILIMIT_READCLIPBOARD = 0x00000002
|
|
JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS = 0x00000008
|
|
JOB_OBJECT_UILIMIT_WRITECLIPBOARD = 0x00000004
|
|
)
|
|
|
|
type JOBOBJECT_BASIC_UI_RESTRICTIONS struct {
|
|
UIRestrictionsClass uint32
|
|
}
|
|
|
|
const (
|
|
// JobObjectInformationClass
|
|
JobObjectAssociateCompletionPortInformation = 7
|
|
JobObjectBasicLimitInformation = 2
|
|
JobObjectBasicUIRestrictions = 4
|
|
JobObjectCpuRateControlInformation = 15
|
|
JobObjectEndOfJobTimeInformation = 6
|
|
JobObjectExtendedLimitInformation = 9
|
|
JobObjectGroupInformation = 11
|
|
JobObjectGroupInformationEx = 14
|
|
JobObjectLimitViolationInformation2 = 35
|
|
JobObjectNetRateControlInformation = 32
|
|
JobObjectNotificationLimitInformation = 12
|
|
JobObjectNotificationLimitInformation2 = 34
|
|
JobObjectSecurityLimitInformation = 5
|
|
)
|
|
|
|
const (
|
|
KF_FLAG_DEFAULT = 0x00000000
|
|
KF_FLAG_FORCE_APP_DATA_REDIRECTION = 0x00080000
|
|
KF_FLAG_RETURN_FILTER_REDIRECTION_TARGET = 0x00040000
|
|
KF_FLAG_FORCE_PACKAGE_REDIRECTION = 0x00020000
|
|
KF_FLAG_NO_PACKAGE_REDIRECTION = 0x00010000
|
|
KF_FLAG_FORCE_APPCONTAINER_REDIRECTION = 0x00020000
|
|
KF_FLAG_NO_APPCONTAINER_REDIRECTION = 0x00010000
|
|
KF_FLAG_CREATE = 0x00008000
|
|
KF_FLAG_DONT_VERIFY = 0x00004000
|
|
KF_FLAG_DONT_UNEXPAND = 0x00002000
|
|
KF_FLAG_NO_ALIAS = 0x00001000
|
|
KF_FLAG_INIT = 0x00000800
|
|
KF_FLAG_DEFAULT_PATH = 0x00000400
|
|
KF_FLAG_NOT_PARENT_RELATIVE = 0x00000200
|
|
KF_FLAG_SIMPLE_IDLIST = 0x00000100
|
|
KF_FLAG_ALIAS_ONLY = 0x80000000
|
|
)
|
|
|
|
type OsVersionInfoEx struct {
|
|
osVersionInfoSize uint32
|
|
MajorVersion uint32
|
|
MinorVersion uint32
|
|
BuildNumber uint32
|
|
PlatformId uint32
|
|
CsdVersion [128]uint16
|
|
ServicePackMajor uint16
|
|
ServicePackMinor uint16
|
|
SuiteMask uint16
|
|
ProductType byte
|
|
_ byte
|
|
}
|
|
|
|
const (
|
|
EWX_LOGOFF = 0x00000000
|
|
EWX_SHUTDOWN = 0x00000001
|
|
EWX_REBOOT = 0x00000002
|
|
EWX_FORCE = 0x00000004
|
|
EWX_POWEROFF = 0x00000008
|
|
EWX_FORCEIFHUNG = 0x00000010
|
|
EWX_QUICKRESOLVE = 0x00000020
|
|
EWX_RESTARTAPPS = 0x00000040
|
|
EWX_HYBRID_SHUTDOWN = 0x00400000
|
|
EWX_BOOTOPTIONS = 0x01000000
|
|
|
|
SHTDN_REASON_FLAG_COMMENT_REQUIRED = 0x01000000
|
|
SHTDN_REASON_FLAG_DIRTY_PROBLEM_ID_REQUIRED = 0x02000000
|
|
SHTDN_REASON_FLAG_CLEAN_UI = 0x04000000
|
|
SHTDN_REASON_FLAG_DIRTY_UI = 0x08000000
|
|
SHTDN_REASON_FLAG_USER_DEFINED = 0x40000000
|
|
SHTDN_REASON_FLAG_PLANNED = 0x80000000
|
|
SHTDN_REASON_MAJOR_OTHER = 0x00000000
|
|
SHTDN_REASON_MAJOR_NONE = 0x00000000
|
|
SHTDN_REASON_MAJOR_HARDWARE = 0x00010000
|
|
SHTDN_REASON_MAJOR_OPERATINGSYSTEM = 0x00020000
|
|
SHTDN_REASON_MAJOR_SOFTWARE = 0x00030000
|
|
SHTDN_REASON_MAJOR_APPLICATION = 0x00040000
|
|
SHTDN_REASON_MAJOR_SYSTEM = 0x00050000
|
|
SHTDN_REASON_MAJOR_POWER = 0x00060000
|
|
SHTDN_REASON_MAJOR_LEGACY_API = 0x00070000
|
|
SHTDN_REASON_MINOR_OTHER = 0x00000000
|
|
SHTDN_REASON_MINOR_NONE = 0x000000ff
|
|
SHTDN_REASON_MINOR_MAINTENANCE = 0x00000001
|
|
SHTDN_REASON_MINOR_INSTALLATION = 0x00000002
|
|
SHTDN_REASON_MINOR_UPGRADE = 0x00000003
|
|
SHTDN_REASON_MINOR_RECONFIG = 0x00000004
|
|
SHTDN_REASON_MINOR_HUNG = 0x00000005
|
|
SHTDN_REASON_MINOR_UNSTABLE = 0x00000006
|
|
SHTDN_REASON_MINOR_DISK = 0x00000007
|
|
SHTDN_REASON_MINOR_PROCESSOR = 0x00000008
|
|
SHTDN_REASON_MINOR_NETWORKCARD = 0x00000009
|
|
SHTDN_REASON_MINOR_POWER_SUPPLY = 0x0000000a
|
|
SHTDN_REASON_MINOR_CORDUNPLUGGED = 0x0000000b
|
|
SHTDN_REASON_MINOR_ENVIRONMENT = 0x0000000c
|
|
SHTDN_REASON_MINOR_HARDWARE_DRIVER = 0x0000000d
|
|
SHTDN_REASON_MINOR_OTHERDRIVER = 0x0000000e
|
|
SHTDN_REASON_MINOR_BLUESCREEN = 0x0000000F
|
|
SHTDN_REASON_MINOR_SERVICEPACK = 0x00000010
|
|
SHTDN_REASON_MINOR_HOTFIX = 0x00000011
|
|
SHTDN_REASON_MINOR_SECURITYFIX = 0x00000012
|
|
SHTDN_REASON_MINOR_SECURITY = 0x00000013
|
|
SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY = 0x00000014
|
|
SHTDN_REASON_MINOR_WMI = 0x00000015
|
|
SHTDN_REASON_MINOR_SERVICEPACK_UNINSTALL = 0x00000016
|
|
SHTDN_REASON_MINOR_HOTFIX_UNINSTALL = 0x00000017
|
|
SHTDN_REASON_MINOR_SECURITYFIX_UNINSTALL = 0x00000018
|
|
SHTDN_REASON_MINOR_MMC = 0x00000019
|
|
SHTDN_REASON_MINOR_SYSTEMRESTORE = 0x0000001a
|
|
SHTDN_REASON_MINOR_TERMSRV = 0x00000020
|
|
SHTDN_REASON_MINOR_DC_PROMOTION = 0x00000021
|
|
SHTDN_REASON_MINOR_DC_DEMOTION = 0x00000022
|
|
SHTDN_REASON_UNKNOWN = SHTDN_REASON_MINOR_NONE
|
|
SHTDN_REASON_LEGACY_API = SHTDN_REASON_MAJOR_LEGACY_API | SHTDN_REASON_FLAG_PLANNED
|
|
SHTDN_REASON_VALID_BIT_MASK = 0xc0ffffff
|
|
|
|
SHUTDOWN_NORETRY = 0x1
|
|
)
|
|
|
|
// Flags used for GetModuleHandleEx
|
|
const (
|
|
GET_MODULE_HANDLE_EX_FLAG_PIN = 1
|
|
GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT = 2
|
|
GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS = 4
|
|
)
|
|
|
|
// MUI function flag values
|
|
const (
|
|
MUI_LANGUAGE_ID = 0x4
|
|
MUI_LANGUAGE_NAME = 0x8
|
|
MUI_MERGE_SYSTEM_FALLBACK = 0x10
|
|
MUI_MERGE_USER_FALLBACK = 0x20
|
|
MUI_UI_FALLBACK = MUI_MERGE_SYSTEM_FALLBACK | MUI_MERGE_USER_FALLBACK
|
|
MUI_THREAD_LANGUAGES = 0x40
|
|
MUI_CONSOLE_FILTER = 0x100
|
|
MUI_COMPLEX_SCRIPT_FILTER = 0x200
|
|
MUI_RESET_FILTERS = 0x001
|
|
MUI_USER_PREFERRED_UI_LANGUAGES = 0x10
|
|
MUI_USE_INSTALLED_LANGUAGES = 0x20
|
|
MUI_USE_SEARCH_ALL_LANGUAGES = 0x40
|
|
MUI_LANG_NEUTRAL_PE_FILE = 0x100
|
|
MUI_NON_LANG_NEUTRAL_FILE = 0x200
|
|
MUI_MACHINE_LANGUAGE_SETTINGS = 0x400
|
|
MUI_FILETYPE_NOT_LANGUAGE_NEUTRAL = 0x001
|
|
MUI_FILETYPE_LANGUAGE_NEUTRAL_MAIN = 0x002
|
|
MUI_FILETYPE_LANGUAGE_NEUTRAL_MUI = 0x004
|
|
MUI_QUERY_TYPE = 0x001
|
|
MUI_QUERY_CHECKSUM = 0x002
|
|
MUI_QUERY_LANGUAGE_NAME = 0x004
|
|
MUI_QUERY_RESOURCE_TYPES = 0x008
|
|
MUI_FILEINFO_VERSION = 0x001
|
|
|
|
MUI_FULL_LANGUAGE = 0x01
|
|
MUI_PARTIAL_LANGUAGE = 0x02
|
|
MUI_LIP_LANGUAGE = 0x04
|
|
MUI_LANGUAGE_INSTALLED = 0x20
|
|
MUI_LANGUAGE_LICENSED = 0x40
|
|
)
|
|
|
|
// FILE_INFO_BY_HANDLE_CLASS constants for SetFileInformationByHandle/GetFileInformationByHandleEx
|
|
const (
|
|
FileBasicInfo = 0
|
|
FileStandardInfo = 1
|
|
FileNameInfo = 2
|
|
FileRenameInfo = 3
|
|
FileDispositionInfo = 4
|
|
FileAllocationInfo = 5
|
|
FileEndOfFileInfo = 6
|
|
FileStreamInfo = 7
|
|
FileCompressionInfo = 8
|
|
FileAttributeTagInfo = 9
|
|
FileIdBothDirectoryInfo = 10
|
|
FileIdBothDirectoryRestartInfo = 11
|
|
FileIoPriorityHintInfo = 12
|
|
FileRemoteProtocolInfo = 13
|
|
FileFullDirectoryInfo = 14
|
|
FileFullDirectoryRestartInfo = 15
|
|
FileStorageInfo = 16
|
|
FileAlignmentInfo = 17
|
|
FileIdInfo = 18
|
|
FileIdExtdDirectoryInfo = 19
|
|
FileIdExtdDirectoryRestartInfo = 20
|
|
FileDispositionInfoEx = 21
|
|
FileRenameInfoEx = 22
|
|
FileCaseSensitiveInfo = 23
|
|
FileNormalizedNameInfo = 24
|
|
)
|
|
|
|
// LoadLibrary flags for determining from where to search for a DLL
|
|
const (
|
|
DONT_RESOLVE_DLL_REFERENCES = 0x1
|
|
LOAD_LIBRARY_AS_DATAFILE = 0x2
|
|
LOAD_WITH_ALTERED_SEARCH_PATH = 0x8
|
|
LOAD_IGNORE_CODE_AUTHZ_LEVEL = 0x10
|
|
LOAD_LIBRARY_AS_IMAGE_RESOURCE = 0x20
|
|
LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE = 0x40
|
|
LOAD_LIBRARY_REQUIRE_SIGNED_TARGET = 0x80
|
|
LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR = 0x100
|
|
LOAD_LIBRARY_SEARCH_APPLICATION_DIR = 0x200
|
|
LOAD_LIBRARY_SEARCH_USER_DIRS = 0x400
|
|
LOAD_LIBRARY_SEARCH_SYSTEM32 = 0x800
|
|
LOAD_LIBRARY_SEARCH_DEFAULT_DIRS = 0x1000
|
|
LOAD_LIBRARY_SAFE_CURRENT_DIRS = 0x00002000
|
|
LOAD_LIBRARY_SEARCH_SYSTEM32_NO_FORWARDER = 0x00004000
|
|
LOAD_LIBRARY_OS_INTEGRITY_CONTINUITY = 0x00008000
|
|
)
|
|
|
|
// RegNotifyChangeKeyValue notifyFilter flags.
|
|
const (
|
|
// REG_NOTIFY_CHANGE_NAME notifies the caller if a subkey is added or deleted.
|
|
REG_NOTIFY_CHANGE_NAME = 0x00000001
|
|
|
|
// REG_NOTIFY_CHANGE_ATTRIBUTES notifies the caller of changes to the attributes of the key, such as the security descriptor information.
|
|
REG_NOTIFY_CHANGE_ATTRIBUTES = 0x00000002
|
|
|
|
// 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.
|
|
REG_NOTIFY_CHANGE_LAST_SET = 0x00000004
|
|
|
|
// REG_NOTIFY_CHANGE_SECURITY notifies the caller of changes to the security descriptor of the key.
|
|
REG_NOTIFY_CHANGE_SECURITY = 0x00000008
|
|
|
|
// 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.
|
|
REG_NOTIFY_THREAD_AGNOSTIC = 0x10000000
|
|
)
|
|
|
|
type CommTimeouts struct {
|
|
ReadIntervalTimeout uint32
|
|
ReadTotalTimeoutMultiplier uint32
|
|
ReadTotalTimeoutConstant uint32
|
|
WriteTotalTimeoutMultiplier uint32
|
|
WriteTotalTimeoutConstant uint32
|
|
}
|
|
|
|
// NTUnicodeString is a UTF-16 string for NT native APIs, corresponding to UNICODE_STRING.
|
|
type NTUnicodeString struct {
|
|
Length uint16
|
|
MaximumLength uint16
|
|
Buffer *uint16
|
|
}
|
|
|
|
// NTString is an ANSI string for NT native APIs, corresponding to STRING.
|
|
type NTString struct {
|
|
Length uint16
|
|
MaximumLength uint16
|
|
Buffer *byte
|
|
}
|
|
|
|
type LIST_ENTRY struct {
|
|
Flink *LIST_ENTRY
|
|
Blink *LIST_ENTRY
|
|
}
|
|
|
|
type LDR_DATA_TABLE_ENTRY struct {
|
|
reserved1 [2]uintptr
|
|
InMemoryOrderLinks LIST_ENTRY
|
|
reserved2 [2]uintptr
|
|
DllBase uintptr
|
|
reserved3 [2]uintptr
|
|
FullDllName NTUnicodeString
|
|
reserved4 [8]byte
|
|
reserved5 [3]uintptr
|
|
reserved6 uintptr
|
|
TimeDateStamp uint32
|
|
}
|
|
|
|
type PEB_LDR_DATA struct {
|
|
reserved1 [8]byte
|
|
reserved2 [3]uintptr
|
|
InMemoryOrderModuleList LIST_ENTRY
|
|
}
|
|
|
|
type CURDIR struct {
|
|
DosPath NTUnicodeString
|
|
Handle Handle
|
|
}
|
|
|
|
type RTL_DRIVE_LETTER_CURDIR struct {
|
|
Flags uint16
|
|
Length uint16
|
|
TimeStamp uint32
|
|
DosPath NTString
|
|
}
|
|
|
|
type RTL_USER_PROCESS_PARAMETERS struct {
|
|
MaximumLength, Length uint32
|
|
|
|
Flags, DebugFlags uint32
|
|
|
|
ConsoleHandle Handle
|
|
ConsoleFlags uint32
|
|
StandardInput, StandardOutput, StandardError Handle
|
|
|
|
CurrentDirectory CURDIR
|
|
DllPath NTUnicodeString
|
|
ImagePathName NTUnicodeString
|
|
CommandLine NTUnicodeString
|
|
Environment unsafe.Pointer
|
|
|
|
StartingX, StartingY, CountX, CountY, CountCharsX, CountCharsY, FillAttribute uint32
|
|
|
|
WindowFlags, ShowWindowFlags uint32
|
|
WindowTitle, DesktopInfo, ShellInfo, RuntimeData NTUnicodeString
|
|
CurrentDirectories [32]RTL_DRIVE_LETTER_CURDIR
|
|
|
|
EnvironmentSize, EnvironmentVersion uintptr
|
|
|
|
PackageDependencyData unsafe.Pointer
|
|
ProcessGroupId uint32
|
|
LoaderThreads uint32
|
|
|
|
RedirectionDllName NTUnicodeString
|
|
HeapPartitionName NTUnicodeString
|
|
DefaultThreadpoolCpuSetMasks uintptr
|
|
DefaultThreadpoolCpuSetMaskCount uint32
|
|
}
|
|
|
|
type PEB struct {
|
|
reserved1 [2]byte
|
|
BeingDebugged byte
|
|
BitField byte
|
|
reserved3 uintptr
|
|
ImageBaseAddress uintptr
|
|
Ldr *PEB_LDR_DATA
|
|
ProcessParameters *RTL_USER_PROCESS_PARAMETERS
|
|
reserved4 [3]uintptr
|
|
AtlThunkSListPtr uintptr
|
|
reserved5 uintptr
|
|
reserved6 uint32
|
|
reserved7 uintptr
|
|
reserved8 uint32
|
|
AtlThunkSListPtr32 uint32
|
|
reserved9 [45]uintptr
|
|
reserved10 [96]byte
|
|
PostProcessInitRoutine uintptr
|
|
reserved11 [128]byte
|
|
reserved12 [1]uintptr
|
|
SessionId uint32
|
|
}
|
|
|
|
type OBJECT_ATTRIBUTES struct {
|
|
Length uint32
|
|
RootDirectory Handle
|
|
ObjectName *NTUnicodeString
|
|
Attributes uint32
|
|
SecurityDescriptor *SECURITY_DESCRIPTOR
|
|
SecurityQoS *SECURITY_QUALITY_OF_SERVICE
|
|
}
|
|
|
|
// Values for the Attributes member of OBJECT_ATTRIBUTES.
|
|
const (
|
|
OBJ_INHERIT = 0x00000002
|
|
OBJ_PERMANENT = 0x00000010
|
|
OBJ_EXCLUSIVE = 0x00000020
|
|
OBJ_CASE_INSENSITIVE = 0x00000040
|
|
OBJ_OPENIF = 0x00000080
|
|
OBJ_OPENLINK = 0x00000100
|
|
OBJ_KERNEL_HANDLE = 0x00000200
|
|
OBJ_FORCE_ACCESS_CHECK = 0x00000400
|
|
OBJ_IGNORE_IMPERSONATED_DEVICEMAP = 0x00000800
|
|
OBJ_DONT_REPARSE = 0x00001000
|
|
OBJ_VALID_ATTRIBUTES = 0x00001FF2
|
|
)
|
|
|
|
type IO_STATUS_BLOCK struct {
|
|
Status NTStatus
|
|
Information uintptr
|
|
}
|
|
|
|
type RTLP_CURDIR_REF struct {
|
|
RefCount int32
|
|
Handle Handle
|
|
}
|
|
|
|
type RTL_RELATIVE_NAME struct {
|
|
RelativeName NTUnicodeString
|
|
ContainingDirectory Handle
|
|
CurDirRef *RTLP_CURDIR_REF
|
|
}
|
|
|
|
const (
|
|
// CreateDisposition flags for NtCreateFile and NtCreateNamedPipeFile.
|
|
FILE_SUPERSEDE = 0x00000000
|
|
FILE_OPEN = 0x00000001
|
|
FILE_CREATE = 0x00000002
|
|
FILE_OPEN_IF = 0x00000003
|
|
FILE_OVERWRITE = 0x00000004
|
|
FILE_OVERWRITE_IF = 0x00000005
|
|
FILE_MAXIMUM_DISPOSITION = 0x00000005
|
|
|
|
// CreateOptions flags for NtCreateFile and NtCreateNamedPipeFile.
|
|
FILE_DIRECTORY_FILE = 0x00000001
|
|
FILE_WRITE_THROUGH = 0x00000002
|
|
FILE_SEQUENTIAL_ONLY = 0x00000004
|
|
FILE_NO_INTERMEDIATE_BUFFERING = 0x00000008
|
|
FILE_SYNCHRONOUS_IO_ALERT = 0x00000010
|
|
FILE_SYNCHRONOUS_IO_NONALERT = 0x00000020
|
|
FILE_NON_DIRECTORY_FILE = 0x00000040
|
|
FILE_CREATE_TREE_CONNECTION = 0x00000080
|
|
FILE_COMPLETE_IF_OPLOCKED = 0x00000100
|
|
FILE_NO_EA_KNOWLEDGE = 0x00000200
|
|
FILE_OPEN_REMOTE_INSTANCE = 0x00000400
|
|
FILE_RANDOM_ACCESS = 0x00000800
|
|
FILE_DELETE_ON_CLOSE = 0x00001000
|
|
FILE_OPEN_BY_FILE_ID = 0x00002000
|
|
FILE_OPEN_FOR_BACKUP_INTENT = 0x00004000
|
|
FILE_NO_COMPRESSION = 0x00008000
|
|
FILE_OPEN_REQUIRING_OPLOCK = 0x00010000
|
|
FILE_DISALLOW_EXCLUSIVE = 0x00020000
|
|
FILE_RESERVE_OPFILTER = 0x00100000
|
|
FILE_OPEN_REPARSE_POINT = 0x00200000
|
|
FILE_OPEN_NO_RECALL = 0x00400000
|
|
FILE_OPEN_FOR_FREE_SPACE_QUERY = 0x00800000
|
|
|
|
// Parameter constants for NtCreateNamedPipeFile.
|
|
|
|
FILE_PIPE_BYTE_STREAM_TYPE = 0x00000000
|
|
FILE_PIPE_MESSAGE_TYPE = 0x00000001
|
|
|
|
FILE_PIPE_ACCEPT_REMOTE_CLIENTS = 0x00000000
|
|
FILE_PIPE_REJECT_REMOTE_CLIENTS = 0x00000002
|
|
|
|
FILE_PIPE_TYPE_VALID_MASK = 0x00000003
|
|
|
|
FILE_PIPE_BYTE_STREAM_MODE = 0x00000000
|
|
FILE_PIPE_MESSAGE_MODE = 0x00000001
|
|
|
|
FILE_PIPE_QUEUE_OPERATION = 0x00000000
|
|
FILE_PIPE_COMPLETE_OPERATION = 0x00000001
|
|
|
|
FILE_PIPE_INBOUND = 0x00000000
|
|
FILE_PIPE_OUTBOUND = 0x00000001
|
|
FILE_PIPE_FULL_DUPLEX = 0x00000002
|
|
|
|
FILE_PIPE_DISCONNECTED_STATE = 0x00000001
|
|
FILE_PIPE_LISTENING_STATE = 0x00000002
|
|
FILE_PIPE_CONNECTED_STATE = 0x00000003
|
|
FILE_PIPE_CLOSING_STATE = 0x00000004
|
|
|
|
FILE_PIPE_CLIENT_END = 0x00000000
|
|
FILE_PIPE_SERVER_END = 0x00000001
|
|
)
|
|
|
|
// ProcessInformationClasses for NtQueryInformationProcess and NtSetInformationProcess.
|
|
const (
|
|
ProcessBasicInformation = iota
|
|
ProcessQuotaLimits
|
|
ProcessIoCounters
|
|
ProcessVmCounters
|
|
ProcessTimes
|
|
ProcessBasePriority
|
|
ProcessRaisePriority
|
|
ProcessDebugPort
|
|
ProcessExceptionPort
|
|
ProcessAccessToken
|
|
ProcessLdtInformation
|
|
ProcessLdtSize
|
|
ProcessDefaultHardErrorMode
|
|
ProcessIoPortHandlers
|
|
ProcessPooledUsageAndLimits
|
|
ProcessWorkingSetWatch
|
|
ProcessUserModeIOPL
|
|
ProcessEnableAlignmentFaultFixup
|
|
ProcessPriorityClass
|
|
ProcessWx86Information
|
|
ProcessHandleCount
|
|
ProcessAffinityMask
|
|
ProcessPriorityBoost
|
|
ProcessDeviceMap
|
|
ProcessSessionInformation
|
|
ProcessForegroundInformation
|
|
ProcessWow64Information
|
|
ProcessImageFileName
|
|
ProcessLUIDDeviceMapsEnabled
|
|
ProcessBreakOnTermination
|
|
ProcessDebugObjectHandle
|
|
ProcessDebugFlags
|
|
ProcessHandleTracing
|
|
ProcessIoPriority
|
|
ProcessExecuteFlags
|
|
ProcessTlsInformation
|
|
ProcessCookie
|
|
ProcessImageInformation
|
|
ProcessCycleTime
|
|
ProcessPagePriority
|
|
ProcessInstrumentationCallback
|
|
ProcessThreadStackAllocation
|
|
ProcessWorkingSetWatchEx
|
|
ProcessImageFileNameWin32
|
|
ProcessImageFileMapping
|
|
ProcessAffinityUpdateMode
|
|
ProcessMemoryAllocationMode
|
|
ProcessGroupInformation
|
|
ProcessTokenVirtualizationEnabled
|
|
ProcessConsoleHostProcess
|
|
ProcessWindowInformation
|
|
ProcessHandleInformation
|
|
ProcessMitigationPolicy
|
|
ProcessDynamicFunctionTableInformation
|
|
ProcessHandleCheckingMode
|
|
ProcessKeepAliveCount
|
|
ProcessRevokeFileHandles
|
|
ProcessWorkingSetControl
|
|
ProcessHandleTable
|
|
ProcessCheckStackExtentsMode
|
|
ProcessCommandLineInformation
|
|
ProcessProtectionInformation
|
|
ProcessMemoryExhaustion
|
|
ProcessFaultInformation
|
|
ProcessTelemetryIdInformation
|
|
ProcessCommitReleaseInformation
|
|
ProcessDefaultCpuSetsInformation
|
|
ProcessAllowedCpuSetsInformation
|
|
ProcessSubsystemProcess
|
|
ProcessJobMemoryInformation
|
|
ProcessInPrivate
|
|
ProcessRaiseUMExceptionOnInvalidHandleClose
|
|
ProcessIumChallengeResponse
|
|
ProcessChildProcessInformation
|
|
ProcessHighGraphicsPriorityInformation
|
|
ProcessSubsystemInformation
|
|
ProcessEnergyValues
|
|
ProcessActivityThrottleState
|
|
ProcessActivityThrottlePolicy
|
|
ProcessWin32kSyscallFilterInformation
|
|
ProcessDisableSystemAllowedCpuSets
|
|
ProcessWakeInformation
|
|
ProcessEnergyTrackingState
|
|
ProcessManageWritesToExecutableMemory
|
|
ProcessCaptureTrustletLiveDump
|
|
ProcessTelemetryCoverage
|
|
ProcessEnclaveInformation
|
|
ProcessEnableReadWriteVmLogging
|
|
ProcessUptimeInformation
|
|
ProcessImageSection
|
|
ProcessDebugAuthInformation
|
|
ProcessSystemResourceManagement
|
|
ProcessSequenceNumber
|
|
ProcessLoaderDetour
|
|
ProcessSecurityDomainInformation
|
|
ProcessCombineSecurityDomainsInformation
|
|
ProcessEnableLogging
|
|
ProcessLeapSecondInformation
|
|
ProcessFiberShadowStackAllocation
|
|
ProcessFreeFiberShadowStackAllocation
|
|
ProcessAltSystemCallInformation
|
|
ProcessDynamicEHContinuationTargets
|
|
ProcessDynamicEnforcedCetCompatibleRanges
|
|
)
|
|
|
|
type PROCESS_BASIC_INFORMATION struct {
|
|
ExitStatus NTStatus
|
|
PebBaseAddress *PEB
|
|
AffinityMask uintptr
|
|
BasePriority int32
|
|
UniqueProcessId uintptr
|
|
InheritedFromUniqueProcessId uintptr
|
|
}
|
|
|
|
// Constants for LocalAlloc flags.
|
|
const (
|
|
LMEM_FIXED = 0x0
|
|
LMEM_MOVEABLE = 0x2
|
|
LMEM_NOCOMPACT = 0x10
|
|
LMEM_NODISCARD = 0x20
|
|
LMEM_ZEROINIT = 0x40
|
|
LMEM_MODIFY = 0x80
|
|
LMEM_DISCARDABLE = 0xf00
|
|
LMEM_VALID_FLAGS = 0xf72
|
|
LMEM_INVALID_HANDLE = 0x8000
|
|
LHND = LMEM_MOVEABLE | LMEM_ZEROINIT
|
|
LPTR = LMEM_FIXED | LMEM_ZEROINIT
|
|
NONZEROLHND = LMEM_MOVEABLE
|
|
NONZEROLPTR = LMEM_FIXED
|
|
)
|
|
|
|
// Constants for the CreateNamedPipe-family of functions.
|
|
const (
|
|
PIPE_ACCESS_INBOUND = 0x1
|
|
PIPE_ACCESS_OUTBOUND = 0x2
|
|
PIPE_ACCESS_DUPLEX = 0x3
|
|
|
|
PIPE_CLIENT_END = 0x0
|
|
PIPE_SERVER_END = 0x1
|
|
|
|
PIPE_WAIT = 0x0
|
|
PIPE_NOWAIT = 0x1
|
|
PIPE_READMODE_BYTE = 0x0
|
|
PIPE_READMODE_MESSAGE = 0x2
|
|
PIPE_TYPE_BYTE = 0x0
|
|
PIPE_TYPE_MESSAGE = 0x4
|
|
PIPE_ACCEPT_REMOTE_CLIENTS = 0x0
|
|
PIPE_REJECT_REMOTE_CLIENTS = 0x8
|
|
|
|
PIPE_UNLIMITED_INSTANCES = 255
|
|
)
|
|
|
|
// Constants for security attributes when opening named pipes.
|
|
const (
|
|
SECURITY_ANONYMOUS = SecurityAnonymous << 16
|
|
SECURITY_IDENTIFICATION = SecurityIdentification << 16
|
|
SECURITY_IMPERSONATION = SecurityImpersonation << 16
|
|
SECURITY_DELEGATION = SecurityDelegation << 16
|
|
|
|
SECURITY_CONTEXT_TRACKING = 0x40000
|
|
SECURITY_EFFECTIVE_ONLY = 0x80000
|
|
|
|
SECURITY_SQOS_PRESENT = 0x100000
|
|
SECURITY_VALID_SQOS_FLAGS = 0x1f0000
|
|
)
|
|
|
|
// ResourceID represents a 16-bit resource identifier, traditionally created with the MAKEINTRESOURCE macro.
|
|
type ResourceID uint16
|
|
|
|
// ResourceIDOrString must be either a ResourceID, to specify a resource or resource type by ID,
|
|
// or a string, to specify a resource or resource type by name.
|
|
type ResourceIDOrString interface{}
|
|
|
|
// Predefined resource names and types.
|
|
var (
|
|
// Predefined names.
|
|
CREATEPROCESS_MANIFEST_RESOURCE_ID ResourceID = 1
|
|
ISOLATIONAWARE_MANIFEST_RESOURCE_ID ResourceID = 2
|
|
ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID ResourceID = 3
|
|
ISOLATIONPOLICY_MANIFEST_RESOURCE_ID ResourceID = 4
|
|
ISOLATIONPOLICY_BROWSER_MANIFEST_RESOURCE_ID ResourceID = 5
|
|
MINIMUM_RESERVED_MANIFEST_RESOURCE_ID ResourceID = 1 // inclusive
|
|
MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID ResourceID = 16 // inclusive
|
|
|
|
// Predefined types.
|
|
RT_CURSOR ResourceID = 1
|
|
RT_BITMAP ResourceID = 2
|
|
RT_ICON ResourceID = 3
|
|
RT_MENU ResourceID = 4
|
|
RT_DIALOG ResourceID = 5
|
|
RT_STRING ResourceID = 6
|
|
RT_FONTDIR ResourceID = 7
|
|
RT_FONT ResourceID = 8
|
|
RT_ACCELERATOR ResourceID = 9
|
|
RT_RCDATA ResourceID = 10
|
|
RT_MESSAGETABLE ResourceID = 11
|
|
RT_GROUP_CURSOR ResourceID = 12
|
|
RT_GROUP_ICON ResourceID = 14
|
|
RT_VERSION ResourceID = 16
|
|
RT_DLGINCLUDE ResourceID = 17
|
|
RT_PLUGPLAY ResourceID = 19
|
|
RT_VXD ResourceID = 20
|
|
RT_ANICURSOR ResourceID = 21
|
|
RT_ANIICON ResourceID = 22
|
|
RT_HTML ResourceID = 23
|
|
RT_MANIFEST ResourceID = 24
|
|
)
|
|
|
|
type COAUTHIDENTITY struct {
|
|
User *uint16
|
|
UserLength uint32
|
|
Domain *uint16
|
|
DomainLength uint32
|
|
Password *uint16
|
|
PasswordLength uint32
|
|
Flags uint32
|
|
}
|
|
|
|
type COAUTHINFO struct {
|
|
AuthnSvc uint32
|
|
AuthzSvc uint32
|
|
ServerPrincName *uint16
|
|
AuthnLevel uint32
|
|
ImpersonationLevel uint32
|
|
AuthIdentityData *COAUTHIDENTITY
|
|
Capabilities uint32
|
|
}
|
|
|
|
type COSERVERINFO struct {
|
|
Reserved1 uint32
|
|
Aame *uint16
|
|
AuthInfo *COAUTHINFO
|
|
Reserved2 uint32
|
|
}
|
|
|
|
type BIND_OPTS3 struct {
|
|
CbStruct uint32
|
|
Flags uint32
|
|
Mode uint32
|
|
TickCountDeadline uint32
|
|
TrackFlags uint32
|
|
ClassContext uint32
|
|
Locale uint32
|
|
ServerInfo *COSERVERINFO
|
|
Hwnd HWND
|
|
}
|
|
|
|
const (
|
|
CLSCTX_INPROC_SERVER = 0x1
|
|
CLSCTX_INPROC_HANDLER = 0x2
|
|
CLSCTX_LOCAL_SERVER = 0x4
|
|
CLSCTX_INPROC_SERVER16 = 0x8
|
|
CLSCTX_REMOTE_SERVER = 0x10
|
|
CLSCTX_INPROC_HANDLER16 = 0x20
|
|
CLSCTX_RESERVED1 = 0x40
|
|
CLSCTX_RESERVED2 = 0x80
|
|
CLSCTX_RESERVED3 = 0x100
|
|
CLSCTX_RESERVED4 = 0x200
|
|
CLSCTX_NO_CODE_DOWNLOAD = 0x400
|
|
CLSCTX_RESERVED5 = 0x800
|
|
CLSCTX_NO_CUSTOM_MARSHAL = 0x1000
|
|
CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000
|
|
CLSCTX_NO_FAILURE_LOG = 0x4000
|
|
CLSCTX_DISABLE_AAA = 0x8000
|
|
CLSCTX_ENABLE_AAA = 0x10000
|
|
CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000
|
|
CLSCTX_ACTIVATE_32_BIT_SERVER = 0x40000
|
|
CLSCTX_ACTIVATE_64_BIT_SERVER = 0x80000
|
|
CLSCTX_ENABLE_CLOAKING = 0x100000
|
|
CLSCTX_APPCONTAINER = 0x400000
|
|
CLSCTX_ACTIVATE_AAA_AS_IU = 0x800000
|
|
CLSCTX_PS_DLL = 0x80000000
|
|
|
|
COINIT_MULTITHREADED = 0x0
|
|
COINIT_APARTMENTTHREADED = 0x2
|
|
COINIT_DISABLE_OLE1DDE = 0x4
|
|
COINIT_SPEED_OVER_MEMORY = 0x8
|
|
)
|
|
|
|
// Flag for QueryFullProcessImageName.
|
|
const PROCESS_NAME_NATIVE = 1
|