mirror of
https://github.com/odin-lang/Odin.git
synced 2026-04-20 13:25:19 +00:00
sys/windows: add registry functions and create winerror.odin
This commit is contained in:
@@ -70,4 +70,44 @@ foreign advapi32 {
|
||||
lpStartupInfo: LPSTARTUPINFO,
|
||||
lpProcessInformation: LPPROCESS_INFORMATION,
|
||||
) -> BOOL ---
|
||||
}
|
||||
|
||||
RegCreateKeyExW :: proc(
|
||||
hKey: HKEY,
|
||||
lpSubKey: LPCWSTR,
|
||||
Reserved: DWORD,
|
||||
lpClass: LPWSTR,
|
||||
dwOptions: DWORD,
|
||||
samDesired: REGSAM,
|
||||
lpSecurityAttributes: LPSECURITY_ATTRIBUTES,
|
||||
phkResult: PHKEY,
|
||||
lpdwDisposition: LPDWORD,
|
||||
) -> LSTATUS ---
|
||||
|
||||
RegOpenKeyW :: proc(
|
||||
hKey: HKEY,
|
||||
lpSubKey: LPCWSTR,
|
||||
phkResult: PHKEY,
|
||||
) -> LSTATUS ---
|
||||
|
||||
RegOpenKeyExW :: proc(
|
||||
hKey: HKEY,
|
||||
lpSubKey: LPCWSTR,
|
||||
ulOptions: DWORD,
|
||||
samDesired: REGSAM,
|
||||
phkResult: PHKEY,
|
||||
) -> LSTATUS ---
|
||||
|
||||
RegCloseKey :: proc(
|
||||
hKey: HKEY,
|
||||
) -> LSTATUS ---
|
||||
|
||||
RegGetValueW :: proc(
|
||||
hkey: HKEY,
|
||||
lpSubKey: LPCWSTR,
|
||||
lpValue: LPCWSTR,
|
||||
dwFlags: DWORD,
|
||||
pdwType: LPDWORD,
|
||||
pvData: PVOID,
|
||||
pcbData: LPDWORD,
|
||||
) -> LSTATUS ---
|
||||
}
|
||||
|
||||
@@ -329,7 +329,6 @@ foreign kernel32 {
|
||||
}
|
||||
|
||||
|
||||
STANDARD_RIGHTS_REQUIRED :: DWORD(0x000F0000)
|
||||
SECTION_QUERY :: DWORD(0x0001)
|
||||
SECTION_MAP_WRITE :: DWORD(0x0002)
|
||||
SECTION_MAP_READ :: DWORD(0x0004)
|
||||
|
||||
@@ -33,6 +33,7 @@ HGDIOBJ :: distinct HANDLE
|
||||
HBITMAP :: distinct HANDLE
|
||||
HGLOBAL :: distinct HANDLE
|
||||
HHOOK :: distinct HANDLE
|
||||
HKEY :: distinct HANDLE
|
||||
BOOL :: distinct b32
|
||||
BYTE :: distinct u8
|
||||
BOOLEAN :: distinct b8
|
||||
@@ -64,6 +65,8 @@ WPARAM :: UINT_PTR
|
||||
LRESULT :: LONG_PTR
|
||||
LPRECT :: ^RECT
|
||||
LPPOINT :: ^POINT
|
||||
LSTATUS :: LONG
|
||||
PHKEY :: ^HKEY
|
||||
|
||||
UINT8 :: u8
|
||||
UINT16 :: u16
|
||||
@@ -194,11 +197,8 @@ FILE_APPEND_DATA: DWORD : 0x00000004
|
||||
FILE_WRITE_EA: DWORD : 0x00000010
|
||||
FILE_WRITE_ATTRIBUTES: DWORD : 0x00000100
|
||||
FILE_READ_ATTRIBUTES: DWORD : 0x000000080
|
||||
READ_CONTROL: DWORD : 0x00020000
|
||||
SYNCHRONIZE: DWORD : 0x00100000
|
||||
GENERIC_READ: DWORD : 0x80000000
|
||||
GENERIC_WRITE: DWORD : 0x40000000
|
||||
STANDARD_RIGHTS_WRITE: DWORD : READ_CONTROL
|
||||
FILE_GENERIC_WRITE: DWORD : STANDARD_RIGHTS_WRITE |
|
||||
FILE_WRITE_DATA |
|
||||
FILE_WRITE_ATTRIBUTES |
|
||||
@@ -266,6 +266,156 @@ REASON_CONTEXT :: struct {
|
||||
}
|
||||
PREASON_CONTEXT :: ^REASON_CONTEXT
|
||||
|
||||
// RRF - Registry Routine Flags (for RegGetValue)
|
||||
RRF_RT_REG_NONE :: 0x00000001
|
||||
RRF_RT_REG_SZ :: 0x00000002
|
||||
RRF_RT_REG_EXPAND_SZ :: 0x00000004
|
||||
RRF_RT_REG_BINARY :: 0x00000008
|
||||
RRF_RT_REG_DWORD :: 0x00000010
|
||||
RRF_RT_REG_MULTI_SZ :: 0x00000020
|
||||
RRF_RT_REG_QWORD :: 0x00000040
|
||||
RRF_RT_DWORD :: (RRF_RT_REG_BINARY | RRF_RT_REG_DWORD)
|
||||
RRF_RT_QWORD :: (RRF_RT_REG_BINARY | RRF_RT_REG_QWORD)
|
||||
RRF_RT_ANY :: 0x0000ffff
|
||||
RRF_NOEXPAND :: 0x10000000
|
||||
RRF_ZEROONFAILURE :: 0x20000000
|
||||
|
||||
ACCESS_MASK :: DWORD
|
||||
PACCESS_MASK :: ^ACCESS_MASK
|
||||
REGSAM :: ACCESS_MASK
|
||||
|
||||
// Reserved Key Handles.
|
||||
HKEY_CLASSES_ROOT :: HKEY(uintptr(0x80000000))
|
||||
HKEY_CURRENT_USER :: HKEY(uintptr(0x80000001))
|
||||
HKEY_LOCAL_MACHINE :: HKEY(uintptr(0x80000002))
|
||||
HKEY_USERS :: HKEY(uintptr(0x80000003))
|
||||
HKEY_PERFORMANCE_DATA :: HKEY(uintptr(0x80000004))
|
||||
HKEY_PERFORMANCE_TEXT :: HKEY(uintptr(0x80000050))
|
||||
HKEY_PERFORMANCE_NLSTEXT :: HKEY(uintptr(0x80000060))
|
||||
HKEY_CURRENT_CONFIG :: HKEY(uintptr(0x80000005))
|
||||
HKEY_DYN_DATA :: HKEY(uintptr(0x80000006))
|
||||
HKEY_CURRENT_USER_LOCAL_SETTINGS :: HKEY(uintptr(0x80000007))
|
||||
|
||||
// The following are masks for the predefined standard access types
|
||||
DELETE : DWORD : 0x00010000
|
||||
READ_CONTROL : DWORD : 0x00020000
|
||||
WRITE_DAC : DWORD : 0x00040000
|
||||
WRITE_OWNER : DWORD : 0x00080000
|
||||
SYNCHRONIZE : DWORD : 0x00100000
|
||||
|
||||
STANDARD_RIGHTS_REQUIRED : DWORD : 0x000F0000
|
||||
STANDARD_RIGHTS_READ : DWORD : READ_CONTROL
|
||||
STANDARD_RIGHTS_WRITE : DWORD : READ_CONTROL
|
||||
STANDARD_RIGHTS_EXECUTE : DWORD : READ_CONTROL
|
||||
STANDARD_RIGHTS_ALL : DWORD : 0x001F0000
|
||||
SPECIFIC_RIGHTS_ALL : DWORD : 0x0000FFFF
|
||||
|
||||
// Registry Specific Access Rights.
|
||||
KEY_QUERY_VALUE :: 0x0001
|
||||
KEY_SET_VALUE :: 0x0002
|
||||
KEY_CREATE_SUB_KEY :: 0x0004
|
||||
KEY_ENUMERATE_SUB_KEYS :: 0x0008
|
||||
KEY_NOTIFY :: 0x0010
|
||||
KEY_CREATE_LINK :: 0x0020
|
||||
KEY_WOW64_32KEY :: 0x0200
|
||||
KEY_WOW64_64KEY :: 0x0100
|
||||
KEY_WOW64_RES :: 0x0300
|
||||
|
||||
KEY_READ :: (STANDARD_RIGHTS_READ | KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS | KEY_NOTIFY) & (~SYNCHRONIZE)
|
||||
KEY_WRITE :: (STANDARD_RIGHTS_WRITE | KEY_SET_VALUE | KEY_CREATE_SUB_KEY) & (~SYNCHRONIZE)
|
||||
KEY_EXECUTE :: (KEY_READ) & (~SYNCHRONIZE)
|
||||
KEY_ALL_ACCESS :: (STANDARD_RIGHTS_ALL |
|
||||
KEY_QUERY_VALUE |
|
||||
KEY_SET_VALUE |
|
||||
KEY_CREATE_SUB_KEY |
|
||||
KEY_ENUMERATE_SUB_KEYS |
|
||||
KEY_NOTIFY |
|
||||
KEY_CREATE_LINK) & (~SYNCHRONIZE)
|
||||
|
||||
// Open/Create Options
|
||||
REG_OPTION_RESERVED :: 0x00000000
|
||||
REG_OPTION_NON_VOLATILE :: 0x00000000
|
||||
REG_OPTION_VOLATILE :: 0x00000001
|
||||
REG_OPTION_CREATE_LINK :: 0x00000002
|
||||
REG_OPTION_BACKUP_RESTORE :: 0x00000004
|
||||
REG_OPTION_OPEN_LINK :: 0x00000008
|
||||
REG_OPTION_DONT_VIRTUALIZE :: 0x00000010
|
||||
|
||||
REG_LEGAL_OPTION :: REG_OPTION_RESERVED |
|
||||
REG_OPTION_NON_VOLATILE |
|
||||
REG_OPTION_VOLATILE |
|
||||
REG_OPTION_CREATE_LINK |
|
||||
REG_OPTION_BACKUP_RESTORE |
|
||||
REG_OPTION_OPEN_LINK |
|
||||
REG_OPTION_DONT_VIRTUALIZE
|
||||
|
||||
REG_OPEN_LEGAL_OPTION :: REG_OPTION_RESERVED |
|
||||
REG_OPTION_BACKUP_RESTORE |
|
||||
REG_OPTION_OPEN_LINK |
|
||||
REG_OPTION_DONT_VIRTUALIZE
|
||||
|
||||
// Key creation/open disposition
|
||||
REG_CREATED_NEW_KEY :: 0x00000001
|
||||
REG_OPENED_EXISTING_KEY :: 0x00000002
|
||||
|
||||
// hive format to be used by Reg(Nt)SaveKeyEx
|
||||
REG_STANDARD_FORMAT :: 1
|
||||
REG_LATEST_FORMAT :: 2
|
||||
REG_NO_COMPRESSION :: 4
|
||||
|
||||
// Key restore & hive load flags
|
||||
REG_WHOLE_HIVE_VOLATILE :: 0x00000001
|
||||
REG_REFRESH_HIVE :: 0x00000002
|
||||
REG_NO_LAZY_FLUSH :: 0x00000004
|
||||
REG_FORCE_RESTORE :: 0x00000008
|
||||
REG_APP_HIVE :: 0x00000010
|
||||
REG_PROCESS_PRIVATE :: 0x00000020
|
||||
REG_START_JOURNAL :: 0x00000040
|
||||
REG_HIVE_EXACT_FILE_GROWTH :: 0x00000080
|
||||
REG_HIVE_NO_RM :: 0x00000100
|
||||
REG_HIVE_SINGLE_LOG :: 0x00000200
|
||||
REG_BOOT_HIVE :: 0x00000400
|
||||
REG_LOAD_HIVE_OPEN_HANDLE :: 0x00000800
|
||||
REG_FLUSH_HIVE_FILE_GROWTH :: 0x00001000
|
||||
REG_OPEN_READ_ONLY :: 0x00002000
|
||||
REG_IMMUTABLE :: 0x00004000
|
||||
REG_NO_IMPERSONATION_FALLBACK :: 0x00008000
|
||||
REG_APP_HIVE_OPEN_READ_ONLY :: REG_OPEN_READ_ONLY
|
||||
|
||||
// Unload Flags
|
||||
REG_FORCE_UNLOAD :: 1
|
||||
REG_UNLOAD_LEGAL_FLAGS :: REG_FORCE_UNLOAD
|
||||
|
||||
// Notify filter values
|
||||
REG_NOTIFY_CHANGE_NAME :: 0x00000001
|
||||
REG_NOTIFY_CHANGE_ATTRIBUTES :: 0x00000002
|
||||
REG_NOTIFY_CHANGE_LAST_SET :: 0x00000004
|
||||
REG_NOTIFY_CHANGE_SECURITY :: 0x00000008
|
||||
REG_NOTIFY_THREAD_AGNOSTIC :: 0x10000000
|
||||
|
||||
REG_LEGAL_CHANGE_FILTER :: REG_NOTIFY_CHANGE_NAME |
|
||||
REG_NOTIFY_CHANGE_ATTRIBUTES |
|
||||
REG_NOTIFY_CHANGE_LAST_SET |
|
||||
REG_NOTIFY_CHANGE_SECURITY |
|
||||
REG_NOTIFY_THREAD_AGNOSTIC
|
||||
|
||||
// Predefined Value Types.
|
||||
REG_NONE :: 0
|
||||
REG_SZ :: 1
|
||||
REG_EXPAND_SZ :: 2
|
||||
REG_BINARY :: 3
|
||||
REG_DWORD :: 4
|
||||
REG_DWORD_LITTLE_ENDIAN :: 4
|
||||
REG_DWORD_BIG_ENDIAN :: 5
|
||||
REG_LINK :: 6
|
||||
REG_MULTI_SZ :: 7
|
||||
REG_RESOURCE_LIST :: 8
|
||||
REG_FULL_RESOURCE_DESCRIPTOR :: 9
|
||||
REG_RESOURCE_REQUIREMENTS_LIST :: 10
|
||||
REG_QWORD :: 11
|
||||
REG_QWORD_LITTLE_ENDIAN :: 11
|
||||
|
||||
|
||||
PTIMERAPCROUTINE :: #type proc "stdcall" (lpArgToCompletionRoutine: LPVOID, dwTimerLowValue, dwTimerHighValue: DWORD)
|
||||
|
||||
TIMERPROC :: #type proc "stdcall" (HWND, UINT, UINT_PTR, DWORD)
|
||||
@@ -1126,34 +1276,6 @@ STD_ERROR_HANDLE: DWORD : ~DWORD(0) -12 + 1
|
||||
|
||||
PROGRESS_CONTINUE: DWORD : 0
|
||||
|
||||
ERROR_FILE_NOT_FOUND: DWORD : 2
|
||||
ERROR_PATH_NOT_FOUND: DWORD : 3
|
||||
ERROR_ACCESS_DENIED: DWORD : 5
|
||||
ERROR_NOT_ENOUGH_MEMORY: DWORD : 8
|
||||
ERROR_INVALID_HANDLE: DWORD : 6
|
||||
ERROR_NO_MORE_FILES: DWORD : 18
|
||||
ERROR_SHARING_VIOLATION: DWORD : 32
|
||||
ERROR_LOCK_VIOLATION: DWORD : 33
|
||||
ERROR_HANDLE_EOF: DWORD : 38
|
||||
ERROR_NOT_SUPPORTED: DWORD : 50
|
||||
ERROR_FILE_EXISTS: DWORD : 80
|
||||
ERROR_INVALID_PARAMETER: DWORD : 87
|
||||
ERROR_BROKEN_PIPE: DWORD : 109
|
||||
ERROR_CALL_NOT_IMPLEMENTED: DWORD : 120
|
||||
ERROR_INSUFFICIENT_BUFFER: DWORD : 122
|
||||
ERROR_INVALID_NAME: DWORD : 123
|
||||
ERROR_BAD_ARGUMENTS: DWORD: 160
|
||||
ERROR_LOCK_FAILED: DWORD : 167
|
||||
ERROR_ALREADY_EXISTS: DWORD : 183
|
||||
ERROR_NO_DATA: DWORD : 232
|
||||
ERROR_ENVVAR_NOT_FOUND: DWORD : 203
|
||||
ERROR_OPERATION_ABORTED: DWORD : 995
|
||||
ERROR_IO_PENDING: DWORD : 997
|
||||
ERROR_TIMEOUT: DWORD : 0x5B4
|
||||
ERROR_NO_UNICODE_TRANSLATION: DWORD : 1113
|
||||
|
||||
E_NOTIMPL :: HRESULT(-0x7fff_bfff) // 0x8000_4001
|
||||
|
||||
INVALID_HANDLE :: HANDLE(~uintptr(0))
|
||||
INVALID_HANDLE_VALUE :: INVALID_HANDLE
|
||||
|
||||
@@ -2329,4 +2451,4 @@ IMAGE_EXPORT_DIRECTORY :: struct {
|
||||
AddressOfFunctions: DWORD, // RVA from base of image
|
||||
AddressOfNames: DWORD, // RVA from base of image
|
||||
AddressOfNameOrdinals: DWORD, // RVA from base of image
|
||||
}
|
||||
}
|
||||
|
||||
46
core/sys/windows/winerror.odin
Normal file
46
core/sys/windows/winerror.odin
Normal file
@@ -0,0 +1,46 @@
|
||||
// +build windows
|
||||
package sys_windows
|
||||
|
||||
ERROR_SUCCESS : DWORD : 0
|
||||
NO_ERROR :: 0
|
||||
SEC_E_OK : HRESULT : 0x00000000
|
||||
|
||||
ERROR_INVALID_FUNCTION : DWORD : 1
|
||||
ERROR_FILE_NOT_FOUND : DWORD : 2
|
||||
ERROR_PATH_NOT_FOUND : DWORD : 3
|
||||
ERROR_ACCESS_DENIED : DWORD : 5
|
||||
ERROR_INVALID_HANDLE : DWORD : 6
|
||||
ERROR_NOT_ENOUGH_MEMORY : DWORD : 8
|
||||
ERROR_INVALID_BLOCK : DWORD : 9
|
||||
ERROR_BAD_ENVIRONMENT : DWORD : 10
|
||||
ERROR_BAD_FORMAT : DWORD : 11
|
||||
ERROR_INVALID_ACCESS : DWORD : 12
|
||||
ERROR_INVALID_DATA : DWORD : 13
|
||||
ERROR_OUTOFMEMORY : DWORD : 14
|
||||
ERROR_INVALID_DRIVE : DWORD : 15
|
||||
ERROR_CURRENT_DIRECTORY : DWORD : 16
|
||||
ERROR_NO_MORE_FILES : DWORD : 18
|
||||
ERROR_SHARING_VIOLATION : DWORD : 32
|
||||
ERROR_LOCK_VIOLATION : DWORD : 33
|
||||
ERROR_HANDLE_EOF : DWORD : 38
|
||||
ERROR_NOT_SUPPORTED : DWORD : 50
|
||||
ERROR_FILE_EXISTS : DWORD : 80
|
||||
ERROR_INVALID_PARAMETER : DWORD : 87
|
||||
ERROR_BROKEN_PIPE : DWORD : 109
|
||||
ERROR_CALL_NOT_IMPLEMENTED : DWORD : 120
|
||||
ERROR_INSUFFICIENT_BUFFER : DWORD : 122
|
||||
ERROR_INVALID_NAME : DWORD : 123
|
||||
ERROR_BAD_ARGUMENTS : DWORD : 160
|
||||
ERROR_LOCK_FAILED : DWORD : 167
|
||||
ERROR_ALREADY_EXISTS : DWORD : 183
|
||||
ERROR_NO_DATA : DWORD : 232
|
||||
ERROR_ENVVAR_NOT_FOUND : DWORD : 203
|
||||
ERROR_OPERATION_ABORTED : DWORD : 995
|
||||
ERROR_IO_PENDING : DWORD : 997
|
||||
ERROR_NO_UNICODE_TRANSLATION : DWORD : 1113
|
||||
ERROR_TIMEOUT : DWORD : 1460
|
||||
ERROR_DATATYPE_MISMATCH : DWORD : 1629
|
||||
ERROR_UNSUPPORTED_TYPE : DWORD : 1630
|
||||
ERROR_NOT_SAME_OBJECT : DWORD : 1656
|
||||
|
||||
E_NOTIMPL :: HRESULT(-0x7fff_bfff) // 0x8000_4001
|
||||
Reference in New Issue
Block a user