aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgingerBill <gingerBill@users.noreply.github.com>2022-10-10 22:08:30 +0100
committerGitHub <noreply@github.com>2022-10-10 22:08:30 +0100
commit29f2ecd2280106cb917ed2e2d5eb0be3448d3c5c (patch)
tree345c2b0e25380502d97be567c4648c00aac51eb3
parent970ac226479d84889e83f7451d34b5d566e71400 (diff)
parenta1935bc1f4b4f966e132cb42f4d0f6419a60222b (diff)
Merge pull request #2101 from ftphikari/master
sys/windows: add a bunch of stuff
-rw-r--r--core/sys/windows/advapi32.odin30
-rw-r--r--core/sys/windows/comctl32.odin9
-rw-r--r--core/sys/windows/gdi32.odin1
-rw-r--r--core/sys/windows/kernel32.odin7
-rw-r--r--core/sys/windows/shell32.odin5
-rw-r--r--core/sys/windows/shlwapi.odin1
-rw-r--r--core/sys/windows/types.odin146
-rw-r--r--core/sys/windows/user32.odin1
-rw-r--r--core/sys/windows/window_messages.odin3
9 files changed, 200 insertions, 3 deletions
diff --git a/core/sys/windows/advapi32.odin b/core/sys/windows/advapi32.odin
index 82031d4f7..e98aa6c43 100644
--- a/core/sys/windows/advapi32.odin
+++ b/core/sys/windows/advapi32.odin
@@ -128,4 +128,34 @@ foreign advapi32 {
lpData: LPCVOID,
cbData: DWORD,
) -> LSTATUS ---
+
+ GetFileSecurityW :: proc(
+ lpFileName: LPCWSTR,
+ RequestedInformation: SECURITY_INFORMATION,
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ nLength: DWORD,
+ lpnLengthNeeded: LPDWORD,
+ ) -> BOOL ---
+
+ DuplicateToken :: proc(
+ ExistingTokenHandle: HANDLE,
+ ImpersonationLevel: SECURITY_IMPERSONATION_LEVEL,
+ DuplicateTokenHandle: PHANDLE,
+ ) -> BOOL ---
+
+ MapGenericMask :: proc(
+ AccessMask: PDWORD,
+ GenericMapping: PGENERIC_MAPPING,
+ ) ---
+
+ AccessCheck :: proc(
+ pSecurityDescriptor: PSECURITY_DESCRIPTOR,
+ ClientToken: HANDLE,
+ DesiredAccess: DWORD,
+ GenericMapping: PGENERIC_MAPPING,
+ PrivilegeSet: PPRIVILEGE_SET,
+ PrivilegeSetLength: LPDWORD,
+ GrantedAccess: LPDWORD,
+ AccessStatus: LPBOOL,
+ ) -> BOOL ---
}
diff --git a/core/sys/windows/comctl32.odin b/core/sys/windows/comctl32.odin
new file mode 100644
index 000000000..983c45d36
--- /dev/null
+++ b/core/sys/windows/comctl32.odin
@@ -0,0 +1,9 @@
+// +build windows
+package sys_windows
+
+foreign import "system:Comctl32.lib"
+
+@(default_calling_convention="stdcall")
+foreign Comctl32 {
+ LoadIconWithScaleDown :: proc(hinst: HINSTANCE, pszName: PCWSTR, cx: c_int, cy: c_int, phico: ^HICON) -> HRESULT ---
+}
diff --git a/core/sys/windows/gdi32.odin b/core/sys/windows/gdi32.odin
index 4403a5dc3..274cae35b 100644
--- a/core/sys/windows/gdi32.odin
+++ b/core/sys/windows/gdi32.odin
@@ -77,6 +77,7 @@ foreign gdi32 {
) -> HFONT ---
TextOutW :: proc(hdc: HDC, x, y: c_int, lpString: LPCWSTR, c: c_int) -> BOOL ---
GetTextExtentPoint32W :: proc(hdc: HDC, lpString: LPCWSTR, c: c_int, psizl: LPSIZE) -> BOOL ---
+ GetTextMetricsW :: proc(hdc: HDC, lptm: LPTEXTMETRICW) -> BOOL ---
}
RGB :: #force_inline proc "contextless" (r, g, b: u8) -> COLORREF {
diff --git a/core/sys/windows/kernel32.odin b/core/sys/windows/kernel32.odin
index 9e5e5448b..05686b7d2 100644
--- a/core/sys/windows/kernel32.odin
+++ b/core/sys/windows/kernel32.odin
@@ -346,6 +346,13 @@ foreign kernel32 {
GenerateConsoleCtrlEvent :: proc(dwCtrlEvent: DWORD, dwProcessGroupId: DWORD) -> BOOL ---
FreeConsole :: proc() -> BOOL ---
GetConsoleWindow :: proc() -> HWND ---
+
+ GetDiskFreeSpaceExW :: proc(
+ lpDirectoryName: LPCWSTR,
+ lpFreeBytesAvailableToCaller: PULARGE_INTEGER,
+ lpTotalNumberOfBytes: PULARGE_INTEGER,
+ lpTotalNumberOfFreeBytes: PULARGE_INTEGER,
+ ) -> BOOL ---
}
diff --git a/core/sys/windows/shell32.odin b/core/sys/windows/shell32.odin
index fa7a24906..a3d6c6fb8 100644
--- a/core/sys/windows/shell32.odin
+++ b/core/sys/windows/shell32.odin
@@ -14,4 +14,9 @@ foreign shell32 {
lpDirectory: LPCWSTR,
nShowCmd: INT,
) -> HINSTANCE ---
+ SHCreateDirectoryExW :: proc(
+ hwnd: HWND,
+ pszPath: LPCWSTR,
+ psa: ^SECURITY_ATTRIBUTES,
+ ) -> c_int ---
}
diff --git a/core/sys/windows/shlwapi.odin b/core/sys/windows/shlwapi.odin
index 1852d536f..241ade8f6 100644
--- a/core/sys/windows/shlwapi.odin
+++ b/core/sys/windows/shlwapi.odin
@@ -8,4 +8,5 @@ foreign shlwapi {
PathFileExistsW :: proc(pszPath: wstring) -> BOOL ---
PathFindExtensionW :: proc(pszPath: wstring) -> wstring ---
PathFindFileNameW :: proc(pszPath: wstring) -> wstring ---
+ SHAutoComplete :: proc(hwndEdit: HWND, dwFlags: DWORD) -> LWSTDAPI ---
}
diff --git a/core/sys/windows/types.odin b/core/sys/windows/types.odin
index 85c94284c..30cc62451 100644
--- a/core/sys/windows/types.odin
+++ b/core/sys/windows/types.odin
@@ -20,6 +20,7 @@ DWORD :: c_ulong
DWORDLONG :: c.ulonglong
QWORD :: c.ulonglong
HANDLE :: distinct LPVOID
+PHANDLE :: ^HANDLE
HINSTANCE :: HANDLE
HMODULE :: distinct HINSTANCE
HRESULT :: distinct LONG
@@ -43,6 +44,7 @@ BOOLEAN :: distinct b8
GROUP :: distinct c_uint
LARGE_INTEGER :: distinct c_longlong
ULARGE_INTEGER :: distinct c_ulonglong
+PULARGE_INTEGER :: ^ULARGE_INTEGER
LONG :: c_long
UINT :: c_uint
INT :: c_int
@@ -133,6 +135,11 @@ LPWSAOVERLAPPED :: distinct rawptr
LPWSAOVERLAPPED_COMPLETION_ROUTINE :: distinct rawptr
LPCVOID :: rawptr
+PACCESS_TOKEN :: PVOID
+PSECURITY_DESCRIPTOR :: PVOID
+PSID :: PVOID
+PCLAIMS_BLOB :: PVOID
+
PCONDITION_VARIABLE :: ^CONDITION_VARIABLE
PLARGE_INTEGER :: ^LARGE_INTEGER
PSRWLOCK :: ^SRWLOCK
@@ -175,6 +182,7 @@ FILE_SHARE_DELETE: DWORD : 0x00000004
FILE_GENERIC_ALL: DWORD : 0x10000000
FILE_GENERIC_EXECUTE: DWORD : 0x20000000
FILE_GENERIC_READ: DWORD : 0x80000000
+FILE_ALL_ACCESS :: STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF
FILE_ACTION_ADDED :: 0x00000001
FILE_ACTION_REMOVED :: 0x00000002
@@ -230,6 +238,20 @@ SECURITY_SQOS_PRESENT: DWORD : 0x00100000
FIONBIO: c_ulong : 0x8004667e
+OWNER_SECURITY_INFORMATION :: 0x00000001
+GROUP_SECURITY_INFORMATION :: 0x00000002
+DACL_SECURITY_INFORMATION :: 0x00000004
+SACL_SECURITY_INFORMATION :: 0x00000008
+LABEL_SECURITY_INFORMATION :: 0x00000010
+ATTRIBUTE_SECURITY_INFORMATION :: 0x00000020
+SCOPE_SECURITY_INFORMATION :: 0x00000040
+PROCESS_TRUST_LABEL_SECURITY_INFORMATION :: 0x00000080
+ACCESS_FILTER_SECURITY_INFORMATION :: 0x00000100
+BACKUP_SECURITY_INFORMATION :: 0x00010000
+PROTECTED_DACL_SECURITY_INFORMATION :: 0x80000000
+PROTECTED_SACL_SECURITY_INFORMATION :: 0x40000000
+UNPROTECTED_DACL_SECURITY_INFORMATION :: 0x20000000
+UNPROTECTED_SACL_SECURITY_INFORMATION :: 0x10000000
GET_FILEEX_INFO_LEVELS :: distinct i32
GetFileExInfoStandard: GET_FILEEX_INFO_LEVELS : 0
@@ -773,6 +795,30 @@ MSG :: struct {
LPMSG :: ^MSG
+TEXTMETRICW :: struct {
+ tmHeight: LONG,
+ tmAscent: LONG,
+ tmDescent: LONG,
+ tmInternalLeading: LONG,
+ tmExternalLeading: LONG,
+ tmAveCharWidth: LONG,
+ tmMaxCharWidth: LONG,
+ tmWeight: LONG,
+ tmOverhang: LONG,
+ tmDigitizedAspectX: LONG,
+ tmDigitizedAspectY: LONG,
+ tmFirstChar: WCHAR,
+ tmLastChar: WCHAR,
+ tmDefaultChar: WCHAR,
+ tmBreakChar: WCHAR,
+ tmItalic: BYTE,
+ tmUnderlined: BYTE,
+ tmStruckOut: BYTE,
+ tmPitchAndFamily: BYTE,
+ tmCharSet: BYTE,
+}
+LPTEXTMETRICW :: ^TEXTMETRICW
+
PAINTSTRUCT :: struct {
hdc: HDC,
fErase: BOOL,
@@ -1066,8 +1112,14 @@ WS_EX_TOPMOST : UINT : 0x0000_0008
WS_EX_TRANSPARENT : UINT : 0x0000_0020
WS_EX_WINDOWEDGE : UINT : 0x0000_0100
-PBS_SMOOTH :: 0x01
-PBS_VERTICAL :: 0x04
+PBS_SMOOTH :: 0x01
+PBS_VERTICAL :: 0x04
+PBS_MARQUEE :: 0x08
+PBS_SMOOTHREVERSE :: 0x10
+
+PBST_NORMAL :: 0x0001
+PBST_ERROR :: 0x0002
+PBST_PAUSED :: 0x0003
QS_ALLEVENTS : UINT : QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY
QS_ALLINPUT : UINT : QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY | QS_SENDMESSAGE
@@ -1462,6 +1514,24 @@ IDI_WARNING := IDI_EXCLAMATION
IDI_ERROR := IDI_HAND
IDI_INFORMATION := IDI_ASTERISK
+IMAGE_BITMAP :: 0
+IMAGE_ICON :: 1
+IMAGE_CURSOR :: 2
+IMAGE_ENHMETAFILE :: 3
+
+LR_DEFAULTCOLOR :: 0x00000000
+LR_MONOCHROME :: 0x00000001
+LR_COLOR :: 0x00000002
+LR_COPYRETURNORG :: 0x00000004
+LR_COPYDELETEORG :: 0x00000008
+LR_LOADFROMFILE :: 0x00000010
+LR_LOADTRANSPARENT :: 0x00000020
+LR_DEFAULTSIZE :: 0x00000040
+LR_VGACOLOR :: 0x00000080
+LR_LOADMAP3DCOLORS :: 0x00001000
+LR_CREATEDIBSECTION :: 0x00002000
+LR_COPYFROMRESOURCE :: 0x00004000
+LR_SHARED :: 0x00008000
// DIB color table identifiers
DIB_RGB_COLORS :: 0
@@ -1774,12 +1844,15 @@ WAIT_FAILED: DWORD : 0xFFFFFFFF
PIPE_ACCESS_INBOUND: DWORD : 0x00000001
PIPE_ACCESS_OUTBOUND: DWORD : 0x00000002
+PIPE_ACCESS_DUPLEX: DWORD : 0x00000003
FILE_FLAG_FIRST_PIPE_INSTANCE: DWORD : 0x00080000
FILE_FLAG_OVERLAPPED: DWORD : 0x40000000
PIPE_WAIT: DWORD : 0x00000000
PIPE_TYPE_BYTE: DWORD : 0x00000000
+PIPE_TYPE_MESSAGE: DWORD : 0x00000004
PIPE_REJECT_REMOTE_CLIENTS: DWORD : 0x00000008
PIPE_READMODE_BYTE: DWORD : 0x00000000
+PIPE_READMODE_MESSAGE: DWORD : 0x00000002
PIPE_ACCEPT_REMOTE_CLIENTS: DWORD : 0x00000000
FD_SETSIZE :: 64
@@ -1793,7 +1866,58 @@ HEAP_ZERO_MEMORY: DWORD : 0x00000008
HANDLE_FLAG_INHERIT: DWORD : 0x00000001
HANDLE_FLAG_PROTECT_FROM_CLOSE :: 0x00000002
-TOKEN_READ: DWORD : 0x20008
+GENERIC_MAPPING :: struct {
+ GenericRead: ACCESS_MASK,
+ GenericWrite: ACCESS_MASK,
+ GenericExecute: ACCESS_MASK,
+ GenericAll: ACCESS_MASK,
+}
+PGENERIC_MAPPING :: ^GENERIC_MAPPING
+
+SECURITY_IMPERSONATION_LEVEL :: enum {
+ SecurityAnonymous,
+ SecurityIdentification,
+ SecurityImpersonation,
+ SecurityDelegation,
+}
+
+SECURITY_INFORMATION :: DWORD
+ANYSIZE_ARRAY :: 1
+
+LUID_AND_ATTRIBUTES :: struct {
+ Luid: LUID,
+ Attributes: DWORD,
+}
+
+PRIVILEGE_SET :: struct {
+ PrivilegeCount: DWORD,
+ Control: DWORD,
+ Privilege: [ANYSIZE_ARRAY]LUID_AND_ATTRIBUTES,
+}
+PPRIVILEGE_SET :: ^PRIVILEGE_SET
+
+// Token Specific Access Rights.
+TOKEN_ASSIGN_PRIMARY :: 0x0001
+TOKEN_DUPLICATE :: 0x0002
+TOKEN_IMPERSONATE :: 0x0004
+TOKEN_QUERY :: 0x0008
+TOKEN_QUERY_SOURCE :: 0x0010
+TOKEN_ADJUST_PRIVILEGES :: 0x0020
+TOKEN_ADJUST_GROUPS :: 0x0040
+TOKEN_ADJUST_DEFAULT :: 0x0080
+TOKEN_ADJUST_SESSIONID :: 0x0100
+
+TOKEN_ALL_ACCESS_P :: STANDARD_RIGHTS_REQUIRED | TOKEN_ASSIGN_PRIMARY | TOKEN_DUPLICATE | TOKEN_IMPERSONATE | TOKEN_QUERY |\
+ TOKEN_QUERY_SOURCE | TOKEN_ADJUST_PRIVILEGES | TOKEN_ADJUST_GROUPS | TOKEN_ADJUST_DEFAULT
+
+TOKEN_ALL_ACCESS :: TOKEN_ALL_ACCESS_P | TOKEN_ADJUST_SESSIONID
+TOKEN_READ :: STANDARD_RIGHTS_READ | TOKEN_QUERY
+TOKEN_WRITE :: STANDARD_RIGHTS_WRITE | TOKEN_ADJUST_PRIVILEGES | TOKEN_ADJUST_GROUPS | TOKEN_ADJUST_DEFAULT
+TOKEN_EXECUTE :: STANDARD_RIGHTS_EXECUTE
+TOKEN_TRUST_CONSTRAINT_MASK :: STANDARD_RIGHTS_READ | TOKEN_QUERY | TOKEN_QUERY_SOURCE
+TOKEN_ACCESS_PSEUDO_HANDLE_WIN8 :: TOKEN_QUERY | TOKEN_QUERY_SOURCE
+TOKEN_ACCESS_PSEUDO_HANDLE :: TOKEN_ACCESS_PSEUDO_HANDLE_WIN8
+
CP_ACP :: 0 // default to ANSI code page
CP_OEMCP :: 1 // default to OEM code page
@@ -3048,6 +3172,22 @@ SHCONTF_FLATLIST :: 0x4000
SHCONTF_ENABLE_ASYNC :: 0x8000
SHCONTF_INCLUDESUPERHIDDEN :: 0x10000
+SHACF_DEFAULT :: 0x00000000 // Currently (SHACF_FILESYSTEM | SHACF_URLALL)
+SHACF_FILESYSTEM :: 0x00000001 // This includes the File System as well as the rest of the shell (Desktop\My Computer\Control Panel\)
+SHACF_URLALL :: (SHACF_URLHISTORY | SHACF_URLMRU)
+SHACF_URLHISTORY :: 0x00000002 // URLs in the User's History
+SHACF_URLMRU :: 0x00000004 // URLs in the User's Recently Used list.
+SHACF_USETAB :: 0x00000008 // Use the tab to move thru the autocomplete possibilities instead of to the next dialog/window control.
+SHACF_FILESYS_ONLY :: 0x00000010 // This includes the File System
+SHACF_FILESYS_DIRS :: 0x00000020 // Same as SHACF_FILESYS_ONLY except it only includes directories, UNC servers, and UNC server shares.
+SHACF_VIRTUAL_NAMESPACE :: 0x00000040 // Also include the virtual namespace
+SHACF_AUTOSUGGEST_FORCE_ON :: 0x10000000 // Ignore the registry default and force the feature on.
+SHACF_AUTOSUGGEST_FORCE_OFF :: 0x20000000 // Ignore the registry default and force the feature off.
+SHACF_AUTOAPPEND_FORCE_ON :: 0x40000000 // Ignore the registry default and force the feature on. (Also know as AutoComplete)
+SHACF_AUTOAPPEND_FORCE_OFF :: 0x80000000 // Ignore the registry default and force the feature off. (Also know as AutoComplete)
+
+LWSTDAPI :: HRESULT
+
CLSID_FileOpenDialog := &GUID{0xDC1C5A9C, 0xE88A, 0x4DDE, {0xA5, 0xA1, 0x60, 0xF8, 0x2A, 0x20, 0xAE, 0xF7}}
CLSID_FileSaveDialog := &GUID{0xC0B4E2F3, 0xBA21, 0x4773, {0x8D, 0xBA, 0x33, 0x5E, 0xC9, 0x46, 0xEB, 0x8B}}
diff --git a/core/sys/windows/user32.odin b/core/sys/windows/user32.odin
index ffb82ad0e..9a30e6454 100644
--- a/core/sys/windows/user32.odin
+++ b/core/sys/windows/user32.odin
@@ -78,6 +78,7 @@ foreign user32 {
LoadIconW :: proc(hInstance: HINSTANCE, lpIconName: LPCWSTR) -> HICON ---
LoadCursorA :: proc(hInstance: HINSTANCE, lpCursorName: LPCSTR) -> HCURSOR ---
LoadCursorW :: proc(hInstance: HINSTANCE, lpCursorName: LPCWSTR) -> HCURSOR ---
+ LoadImageW :: proc(hInst: HINSTANCE, name: LPCWSTR, type: UINT, cx: c_int, cy: c_int, fuLoad: UINT) -> HANDLE ---
GetWindowRect :: proc(hWnd: HWND, lpRect: LPRECT) -> BOOL ---
GetClientRect :: proc(hWnd: HWND, lpRect: LPRECT) -> BOOL ---
diff --git a/core/sys/windows/window_messages.odin b/core/sys/windows/window_messages.odin
index 616247f59..888c5ccf9 100644
--- a/core/sys/windows/window_messages.odin
+++ b/core/sys/windows/window_messages.odin
@@ -454,6 +454,7 @@ TB_ISBUTTONENABLED :: 0x0409
TBM_CLEARTICS :: 0x0409
TTM_SETTOOLINFOA :: 0x0409
CBEM_HASEDITCHANGED :: 0x040a
+PBM_SETMARQUEE :: 0x040a
RB_INSERTBANDW :: 0x040a
SB_GETRECT :: 0x040a
TB_ISBUTTONCHECKED :: 0x040a
@@ -488,10 +489,12 @@ TTM_ENUMTOOLSA :: 0x040e
SB_SETICON :: 0x040f
TBM_GETTICPOS :: 0x040f
TTM_GETCURRENTTOOLA :: 0x040f
+PBM_SETSTATE :: 0x0410
RB_IDTOINDEX :: 0x0410
SB_SETTIPTEXTA :: 0x0410
TBM_GETNUMTICS :: 0x0410
TTM_WINDOWFROMPOINT :: 0x0410
+PBM_GETSTATE :: 0x0411
RB_GETTOOLTIPS :: 0x0411
SB_SETTIPTEXTW :: 0x0411
TBM_GETSELSTART :: 0x0411