types_windows.go 84 KB

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