advapi32.odin 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. // +build windows
  2. package sys_windows
  3. foreign import advapi32 "system:Advapi32.lib"
  4. HCRYPTPROV :: distinct HANDLE
  5. @(default_calling_convention="system")
  6. foreign advapi32 {
  7. @(link_name = "SystemFunction036")
  8. RtlGenRandom :: proc(RandomBuffer: ^u8, RandomBufferLength: ULONG) -> BOOLEAN ---
  9. OpenProcessToken :: proc(ProcessHandle: HANDLE,
  10. DesiredAccess: DWORD,
  11. TokenHandle: ^HANDLE) -> BOOL ---
  12. OpenThreadToken :: proc(ThreadHandle: HANDLE,
  13. DesiredAccess: DWORD,
  14. OpenAsSelf: BOOL,
  15. TokenHandle: ^HANDLE) -> BOOL ---
  16. CryptAcquireContextW :: proc(hProv: ^HCRYPTPROV, szContainer, szProvider: wstring, dwProvType, dwFlags: DWORD) -> DWORD ---
  17. CryptGenRandom :: proc(hProv: HCRYPTPROV, dwLen: DWORD, buf: LPVOID) -> DWORD ---
  18. CryptReleaseContext :: proc(hProv: HCRYPTPROV, dwFlags: DWORD) -> DWORD ---
  19. }
  20. // Necessary to create a token to impersonate a user with for CreateProcessAsUser
  21. @(default_calling_convention="system")
  22. foreign advapi32 {
  23. LogonUserW :: proc(
  24. lpszUsername: LPCWSTR,
  25. lpszDomain: LPCWSTR,
  26. lpszPassword: LPCWSTR,
  27. dwLogonType: Logon32_Type,
  28. dwLogonProvider: Logon32_Provider,
  29. phToken: ^HANDLE,
  30. ) -> BOOL ---
  31. // https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-lookupaccountnamew
  32. // To look up the SID to use with DeleteProfileW.
  33. LookupAccountNameW :: proc(
  34. lpSystemName: wstring,
  35. lpAccountName: wstring,
  36. Sid: ^SID,
  37. cbSid: ^DWORD,
  38. ReferencedDomainName: wstring,
  39. cchReferencedDomainName: ^DWORD,
  40. peUse: ^SID_TYPE,
  41. ) -> BOOL ---
  42. CreateProcessWithLogonW :: proc(
  43. lpUsername: wstring,
  44. lpDomain: wstring,
  45. lpPassword: wstring,
  46. dwLogonFlags: DWORD,
  47. lpApplicationName: wstring,
  48. lpCommandLine: wstring,
  49. dwCreationFlags: DWORD,
  50. lpEnvironment: LPVOID,
  51. lpCurrentDirectory: wstring,
  52. lpStartupInfo: LPSTARTUPINFOW,
  53. lpProcessInformation: LPPROCESS_INFORMATION,
  54. ) -> BOOL ---
  55. // https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessasuserw
  56. CreateProcessAsUserW :: proc(
  57. hToken: HANDLE,
  58. lpApplicationName: wstring,
  59. lpCommandLine: wstring,
  60. lpProcessAttributes: LPSECURITY_ATTRIBUTES,
  61. lpThreadAttributes: LPSECURITY_ATTRIBUTES,
  62. bInheritHandles: BOOL,
  63. dwCreationFlags: DWORD,
  64. lpEnvironment: LPVOID,
  65. lpCurrentDirectory: wstring,
  66. lpStartupInfo: LPSTARTUPINFOW,
  67. lpProcessInformation: LPPROCESS_INFORMATION,
  68. ) -> BOOL ---
  69. RegCreateKeyExW :: proc(
  70. hKey: HKEY,
  71. lpSubKey: LPCWSTR,
  72. Reserved: DWORD,
  73. lpClass: LPWSTR,
  74. dwOptions: DWORD,
  75. samDesired: REGSAM,
  76. lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
  77. phkResult: PHKEY,
  78. lpdwDisposition: LPDWORD,
  79. ) -> LSTATUS ---
  80. RegOpenKeyW :: proc(
  81. hKey: HKEY,
  82. lpSubKey: LPCWSTR,
  83. phkResult: PHKEY,
  84. ) -> LSTATUS ---
  85. RegOpenKeyExW :: proc(
  86. hKey: HKEY,
  87. lpSubKey: LPCWSTR,
  88. ulOptions: DWORD,
  89. samDesired: REGSAM,
  90. phkResult: PHKEY,
  91. ) -> LSTATUS ---
  92. RegCloseKey :: proc(
  93. hKey: HKEY,
  94. ) -> LSTATUS ---
  95. RegGetValueW :: proc(
  96. hkey: HKEY,
  97. lpSubKey: LPCWSTR,
  98. lpValue: LPCWSTR,
  99. dwFlags: DWORD,
  100. pdwType: LPDWORD,
  101. pvData: PVOID,
  102. pcbData: LPDWORD,
  103. ) -> LSTATUS ---
  104. RegSetValueExW :: proc(
  105. hKey: HKEY,
  106. lpValueName: LPCWSTR,
  107. Reserved: DWORD,
  108. dwType: DWORD,
  109. lpData: ^BYTE,
  110. cbData: DWORD,
  111. ) -> LSTATUS ---
  112. RegSetKeyValueW :: proc(
  113. hKey: HKEY,
  114. lpSubKey: LPCWSTR,
  115. lpValueName: LPCWSTR,
  116. dwType: DWORD,
  117. lpData: LPCVOID,
  118. cbData: DWORD,
  119. ) -> LSTATUS ---
  120. GetFileSecurityW :: proc(
  121. lpFileName: LPCWSTR,
  122. RequestedInformation: SECURITY_INFORMATION,
  123. pSecurityDescriptor: PSECURITY_DESCRIPTOR,
  124. nLength: DWORD,
  125. lpnLengthNeeded: LPDWORD,
  126. ) -> BOOL ---
  127. DuplicateToken :: proc(
  128. ExistingTokenHandle: HANDLE,
  129. ImpersonationLevel: SECURITY_IMPERSONATION_LEVEL,
  130. DuplicateTokenHandle: PHANDLE,
  131. ) -> BOOL ---
  132. MapGenericMask :: proc(
  133. AccessMask: PDWORD,
  134. GenericMapping: PGENERIC_MAPPING,
  135. ) ---
  136. AccessCheck :: proc(
  137. pSecurityDescriptor: PSECURITY_DESCRIPTOR,
  138. ClientToken: HANDLE,
  139. DesiredAccess: DWORD,
  140. GenericMapping: PGENERIC_MAPPING,
  141. PrivilegeSet: PPRIVILEGE_SET,
  142. PrivilegeSetLength: LPDWORD,
  143. GrantedAccess: LPDWORD,
  144. AccessStatus: LPBOOL,
  145. ) -> BOOL ---
  146. }