Browse Source

Merge branch 'master' of https://github.com/odin-lang/Odin

gingerBill 1 year ago
parent
commit
ab39644156

+ 250 - 0
core/sys/windows/dbghelp.odin

@@ -0,0 +1,250 @@
+// +build windows
+package sys_windows
+
+foreign import "system:Dbghelp.lib"
+
+RVA :: DWORD
+
+MINIDUMP_LOCATION_DESCRIPTOR :: struct {
+	DataSize: ULONG32,
+	Rva:      RVA,
+}
+
+MINIDUMP_DIRECTORY :: struct {
+	StreamType: ULONG32,
+	Location:   MINIDUMP_LOCATION_DESCRIPTOR,
+}
+
+MINIDUMP_EXCEPTION_INFORMATION :: struct {
+	ThreadId:          DWORD,
+	ExceptionPointers: ^EXCEPTION_POINTERS,
+	ClientPointers:    BOOL,
+}
+
+MINIDUMP_MEMORY_INFO :: struct {
+	BaseAddress:       ULONG64,
+	AllocationBase:    ULONG64,
+	AllocationProtect: ULONG32,
+	__alignment1:      ULONG32,
+	RegionSize:        ULONG64,
+	State:             ULONG32,
+	Protect:           ULONG32,
+	Type:              ULONG32,
+	__alignment2:      ULONG32,
+}
+
+MINIDUMP_USER_STREAM :: struct {
+	Type:       ULONG32,
+	BufferSize: ULONG,
+	Buffer:     PVOID,
+}
+
+MINIDUMP_USER_STREAM_INFORMATION :: struct {
+	UserStreamCount: ULONG,
+	UserStreamArray: ^MINIDUMP_USER_STREAM,
+}
+
+MINIDUMP_CALLBACK_ROUTINE :: #type proc "stdcall" (
+	CallbackParam: PVOID,
+	CallbackInput: ^MINIDUMP_CALLBACK_INPUT,
+	CallbackOutpu: ^MINIDUMP_CALLBACK_OUTPUT,
+) -> BOOL
+
+MINIDUMP_CALLBACK_INFORMATION :: struct {
+	CallbackRoutine: MINIDUMP_CALLBACK_ROUTINE,
+	CallbackParam:   PVOID,
+}
+
+MINIDUMP_CALLBACK_INPUT :: struct {
+	ProcessId:     ULONG,
+	ProcessHandle: HANDLE,
+	CallbackType:  ULONG,
+	using _: struct #raw_union {
+		Status:            HRESULT,
+		Thread:            MINIDUMP_THREAD_CALLBACK,
+		ThreadEx:          MINIDUMP_THREAD_EX_CALLBACK,
+		Module:            MINIDUMP_MODULE_CALLBACK,
+		IncludeThread:     MINIDUMP_INCLUDE_THREAD_CALLBACK,
+		IncludeModule:     MINIDUMP_INCLUDE_MODULE_CALLBACK,
+		Io:                MINIDUMP_IO_CALLBACK,
+		ReadMemoryFailure: MINIDUMP_READ_MEMORY_FAILURE_CALLBACK,
+		SecondaryFlags:    ULONG,
+		VmQuery:           MINIDUMP_VM_QUERY_CALLBACK,
+		VmPreRead:         MINIDUMP_VM_PRE_READ_CALLBACK,
+		VmPostRead:        MINIDUMP_VM_POST_READ_CALLBACK,
+	},
+}
+
+_MINIDUMP_ARM64_PAD :: ULONG when ODIN_ARCH == .arm64 else struct {}
+
+MINIDUMP_THREAD_CALLBACK :: struct {
+	ThreadId:      ULONG,
+	ThreadHandle:  HANDLE,
+	Pad:           _MINIDUMP_ARM64_PAD,
+	Context:       CONTEXT,
+	SizeOfContext: ULONG,
+	StackBase:     ULONG64,
+	StackEnd:      ULONG64,
+}
+
+MINIDUMP_THREAD_EX_CALLBACK :: struct {
+	ThreadId:         ULONG,
+	ThreadHandle:     HANDLE,
+	Pad:              _MINIDUMP_ARM64_PAD,
+	Context:          CONTEXT,
+	SizeOfContext:    ULONG,
+	StackBase:        ULONG64,
+	StackEnd:         ULONG64,
+	BackingStoreBase: ULONG64,
+	BackingStoreEnd:  ULONG64,
+}
+
+MINIDUMP_INCLUDE_THREAD_CALLBACK :: struct {
+	ThreadId: ULONG,
+}
+
+// NOTE(jakubtomsu): From verrsrc.h
+VS_FIXEDFILEINFO :: struct {
+	dwSignature:        DWORD, /* e.g. 0xfeef04bd */
+	dwStrucVersion:     DWORD, /* e.g. 0x00000042 = "0.42" */
+	dwFileVersionMS:    DWORD, /* e.g. 0x00030075 = "3.75" */
+	dwFileVersionLS:    DWORD, /* e.g. 0x00000031 = "0.31" */
+	dwProductVersionMS: DWORD, /* e.g. 0x00030010 = "3.10" */
+	dwProductVersionLS: DWORD, /* e.g. 0x00000031 = "0.31" */
+	dwFileFlagsMask:    DWORD, /* = 0x3F for version "0.42" */
+	dwFileFlags:        DWORD, /* e.g. VFF_DEBUG | VFF_PRERELEASE */
+	dwFileOS:           DWORD, /* e.g. VOS_DOS_WINDOWS16 */
+	dwFileType:         DWORD, /* e.g. VFT_DRIVER */
+	dwFileSubtype:      DWORD, /* e.g. VFT2_DRV_KEYBOARD */
+	dwFileDateMS:       DWORD, /* e.g. 0 */
+	dwFileDateLS:       DWORD, /* e.g. 0 */
+}
+
+MINIDUMP_MODULE_CALLBACK :: struct {
+	FullPath:         ^WCHAR,
+	BaseOfImage:      ULONG64,
+	SizeOfImage:      ULONG,
+	CheckSum:         ULONG,
+	TimeDateStamp:    ULONG,
+	VersionInfo:      VS_FIXEDFILEINFO,
+	CvRecord:         PVOID,
+	SizeOfCvRecord:   ULONG,
+	MiscRecord:       PVOID,
+	SizeOfMiscRecord: ULONG,
+}
+
+MINIDUMP_INCLUDE_MODULE_CALLBACK :: struct {
+	BaseOfImage: u64,
+}
+
+MINIDUMP_IO_CALLBACK :: struct {
+	Handle:      HANDLE,
+	Offset:      ULONG64,
+	Buffer:      PVOID,
+	BufferBytes: ULONG,
+}
+
+MINIDUMP_READ_MEMORY_FAILURE_CALLBACK :: struct {
+	Offset:        ULONG64,
+	Bytes:         ULONG,
+	FailureStatus: HRESULT,
+}
+
+MINIDUMP_VM_QUERY_CALLBACK :: struct {
+	Offset: ULONG64,
+}
+
+MINIDUMP_VM_PRE_READ_CALLBACK :: struct {
+	Offset: ULONG64,
+	Buffer: PVOID,
+	Size:   ULONG,
+}
+
+MINIDUMP_VM_POST_READ_CALLBACK :: struct {
+	Offset:    ULONG64,
+	Buffer:    PVOID,
+	Size:      ULONG,
+	Completed: ULONG,
+	Status:    HRESULT,
+}
+
+MINIDUMP_CALLBACK_OUTPUT :: struct {
+	using _: struct #raw_union {
+		ModuleWriteFlags: ULONG,
+		ThreadWriteFlags: ULONG,
+		SecondaryFlags:   ULONG,
+		using _: struct {
+			MemoryBase: ULONG64,
+			MemorySize: ULONG,
+		},
+		using _: struct {
+			CheckCancel: BOOL,
+			Cancel:      BOOL,
+		},
+		Handle: HANDLE,
+		using _: struct {
+			VmRegion: MINIDUMP_MEMORY_INFO,
+			Continue: BOOL,
+		},
+		using _: struct {
+			VmQueryStatus: HRESULT,
+			VmQueryResult: MINIDUMP_MEMORY_INFO,
+		},
+		using _: struct {
+			VmReadStatus:         HRESULT,
+			VmReadBytesCompleted: ULONG,
+		},
+		Status: HRESULT,
+	},
+}
+
+MINIDUMP_TYPE :: enum u32 {
+	Normal                         = 0x00000000,
+	WithDataSegs                   = 0x00000001,
+	WithFullMemory                 = 0x00000002,
+	WithHandleData                 = 0x00000004,
+	FilterMemory                   = 0x00000008,
+	ScanMemory                     = 0x00000010,
+	WithUnloadedModules            = 0x00000020,
+	WithIndirectlyReferencedMemory = 0x00000040,
+	FilterModulePaths              = 0x00000080,
+	WithProcessThreadData          = 0x00000100,
+	WithPrivateReadWriteMemory     = 0x00000200,
+	WithoutOptionalData            = 0x00000400,
+	WithFullMemoryInfo             = 0x00000800,
+	WithThreadInfo                 = 0x00001000,
+	WithCodeSegs                   = 0x00002000,
+	WithoutAuxiliaryState          = 0x00004000,
+	WithFullAuxiliaryState         = 0x00008000,
+	WithPrivateWriteCopyMemory     = 0x00010000,
+	IgnoreInaccessibleMemory       = 0x00020000,
+	WithTokenInformation           = 0x00040000,
+	WithModuleHeaders              = 0x00080000,
+	FilterTriage                   = 0x00100000,
+	WithAvxXStateContext           = 0x00200000,
+	WithIptTrace                   = 0x00400000,
+	ScanInaccessiblePartialPages   = 0x00800000,
+	FilterWriteCombinedMemory      = 0x01000000,
+	ValidTypeFlags                 = 0x01ffffff,
+}
+
+@(default_calling_convention = "stdcall")
+foreign Dbghelp {
+	MiniDumpWriteDump :: proc(
+		hProcess:        HANDLE,
+		ProcessId:       DWORD,
+		hFile:           HANDLE,
+		DumpType:        MINIDUMP_TYPE,
+		ExceptionParam:  ^MINIDUMP_EXCEPTION_INFORMATION,
+		UserStreamParam: ^MINIDUMP_USER_STREAM_INFORMATION,
+		CallbackPara:    ^MINIDUMP_CALLBACK_INFORMATION,
+	) -> BOOL ---
+	
+	MiniDumpReadDumpStream :: proc(
+		BaseOfDump:    PVOID,
+		StreamNumber:  ULONG,
+		Dir:           ^^MINIDUMP_DIRECTORY,
+		StreamPointer: ^PVOID,
+		StreamSize:    ^ULONG,
+	) -> BOOL ---
+}

+ 8 - 0
core/sys/windows/kernel32.odin

@@ -172,6 +172,7 @@ foreign kernel32 {
 		TolerableDelay: ULONG,
 	) -> BOOL ---
 	WaitForSingleObject :: proc(hHandle: HANDLE, dwMilliseconds: DWORD) -> DWORD ---
+	WaitForSingleObjectEx :: proc(hHandle: HANDLE, dwMilliseconds: DWORD, bAlterable: BOOL) -> DWORD ---
 	Sleep :: proc(dwMilliseconds: DWORD) ---
 	GetProcessId :: proc(handle: HANDLE) -> DWORD ---
 	CopyFileW :: proc(
@@ -320,6 +321,13 @@ foreign kernel32 {
 		bWaitAll: BOOL,
 		dwMilliseconds: DWORD,
 	) -> DWORD ---
+	WaitForMultipleObjectsEx :: proc(
+		nCount: DWORD,
+		lpHandles: ^HANDLE,
+		bWaitAll: BOOL,
+		dwMilliseconds: DWORD,
+		bAlterable: BOOL,
+	) -> DWORD ---
 	CreateNamedPipeW :: proc(
 		lpName: LPCWSTR,
 		dwOpenMode: DWORD,

+ 145 - 0
core/sys/windows/known_folders.odin

@@ -0,0 +1,145 @@
+// +build windows
+package sys_windows
+
+FOLDERID_NetworkFolder          :: GUID {0xD20BEEC4, 0x5CA8, 0x4905, {0xAE, 0x3B, 0xBF, 0x25, 0x1E, 0xA0, 0x9B, 0x53}}
+FOLDERID_ComputerFolder         :: GUID {0x0AC0837C, 0xBBF8, 0x452A, {0x85, 0x0D, 0x79, 0xD0, 0x8E, 0x66, 0x7C, 0xA7}}
+FOLDERID_InternetFolder         :: GUID {0x4D9F7874, 0x4E0C, 0x4904, {0x96, 0x7B, 0x40, 0xB0, 0xD2, 0x0C, 0x3E, 0x4B}}
+FOLDERID_ControlPanelFolder     :: GUID {0x82A74AEB, 0xAEB4, 0x465C, {0xA0, 0x14, 0xD0, 0x97, 0xEE, 0x34, 0x6D, 0x63}}
+FOLDERID_PrintersFolder         :: GUID {0x76FC4E2D, 0xD6AD, 0x4519, {0xA6, 0x63, 0x37, 0xBD, 0x56, 0x06, 0x81, 0x85}}
+FOLDERID_SyncManagerFolder      :: GUID {0x43668BF8, 0xC14E, 0x49B2, {0x97, 0xC9, 0x74, 0x77, 0x84, 0xD7, 0x84, 0xB7}}
+FOLDERID_SyncSetupFolder        :: GUID {0xf214138 , 0xb1d3, 0x4a90, {0xbb, 0xa9, 0x27, 0xcb, 0xc0, 0xc5, 0x38, 0x9a}}
+FOLDERID_ConflictFolder         :: GUID {0x4bfefb45, 0x347d, 0x4006, {0xa5, 0xbe, 0xac, 0x0c, 0xb0, 0x56, 0x71, 0x92}}
+FOLDERID_SyncResultsFolder      :: GUID {0x289a9a43, 0xbe44, 0x4057, {0xa4, 0x1b, 0x58, 0x7a, 0x76, 0xd7, 0xe7, 0xf9}}
+FOLDERID_RecycleBinFolder       :: GUID {0xB7534046, 0x3ECB, 0x4C18, {0xBE, 0x4E, 0x64, 0xCD, 0x4C, 0xB7, 0xD6, 0xAC}}
+FOLDERID_ConnectionsFolder      :: GUID {0x6F0CD92B, 0x2E97, 0x45D1, {0x88, 0xFF, 0xB0, 0xD1, 0x86, 0xB8, 0xDE, 0xDD}}
+FOLDERID_Fonts                  :: GUID {0xFD228CB7, 0xAE11, 0x4AE3, {0x86, 0x4C, 0x16, 0xF3, 0x91, 0x0A, 0xB8, 0xFE}}
+FOLDERID_Desktop                :: GUID {0xB4BFCC3A, 0xDB2C, 0x424C, {0xB0, 0x29, 0x7F, 0xE9, 0x9A, 0x87, 0xC6, 0x41}}
+FOLDERID_Startup                :: GUID {0xB97D20BB, 0xF46A, 0x4C97, {0xBA, 0x10, 0x5E, 0x36, 0x08, 0x43, 0x08, 0x54}}
+FOLDERID_Programs               :: GUID {0xA77F5D77, 0x2E2B, 0x44C3, {0xA6, 0xA2, 0xAB, 0xA6, 0x01, 0x05, 0x4A, 0x51}}
+FOLDERID_StartMenu              :: GUID {0x625B53C3, 0xAB48, 0x4EC1, {0xBA, 0x1F, 0xA1, 0xEF, 0x41, 0x46, 0xFC, 0x19}}
+FOLDERID_Recent                 :: GUID {0xAE50C081, 0xEBD2, 0x438A, {0x86, 0x55, 0x8A, 0x09, 0x2E, 0x34, 0x98, 0x7A}}
+FOLDERID_SendTo                 :: GUID {0x8983036C, 0x27C0, 0x404B, {0x8F, 0x08, 0x10, 0x2D, 0x10, 0xDC, 0xFD, 0x74}}
+FOLDERID_Documents              :: GUID {0xFDD39AD0, 0x238F, 0x46AF, {0xAD, 0xB4, 0x6C, 0x85, 0x48, 0x03, 0x69, 0xC7}}
+FOLDERID_Favorites              :: GUID {0x1777F761, 0x68AD, 0x4D8A, {0x87, 0xBD, 0x30, 0xB7, 0x59, 0xFA, 0x33, 0xDD}}
+FOLDERID_NetHood                :: GUID {0xC5ABBF53, 0xE17F, 0x4121, {0x89, 0x00, 0x86, 0x62, 0x6F, 0xC2, 0xC9, 0x73}}
+FOLDERID_PrintHood              :: GUID {0x9274BD8D, 0xCFD1, 0x41C3, {0xB3, 0x5E, 0xB1, 0x3F, 0x55, 0xA7, 0x58, 0xF4}}
+FOLDERID_Templates              :: GUID {0xA63293E8, 0x664E, 0x48DB, {0xA0, 0x79, 0xDF, 0x75, 0x9E, 0x05, 0x09, 0xF7}}
+FOLDERID_CommonStartup          :: GUID {0x82A5EA35, 0xD9CD, 0x47C5, {0x96, 0x29, 0xE1, 0x5D, 0x2F, 0x71, 0x4E, 0x6E}}
+FOLDERID_CommonPrograms         :: GUID {0x0139D44E, 0x6AFE, 0x49F2, {0x86, 0x90, 0x3D, 0xAF, 0xCA, 0xE6, 0xFF, 0xB8}}
+FOLDERID_CommonStartMenu        :: GUID {0xA4115719, 0xD62E, 0x491D, {0xAA, 0x7C, 0xE7, 0x4B, 0x8B, 0xE3, 0xB0, 0x67}}
+FOLDERID_PublicDesktop          :: GUID {0xC4AA340D, 0xF20F, 0x4863, {0xAF, 0xEF, 0xF8, 0x7E, 0xF2, 0xE6, 0xBA, 0x25}}
+FOLDERID_ProgramData            :: GUID {0x62AB5D82, 0xFDC1, 0x4DC3, {0xA9, 0xDD, 0x07, 0x0D, 0x1D, 0x49, 0x5D, 0x97}}
+FOLDERID_CommonTemplates        :: GUID {0xB94237E7, 0x57AC, 0x4347, {0x91, 0x51, 0xB0, 0x8C, 0x6C, 0x32, 0xD1, 0xF7}}
+FOLDERID_PublicDocuments        :: GUID {0xED4824AF, 0xDCE4, 0x45A8, {0x81, 0xE2, 0xFC, 0x79, 0x65, 0x08, 0x36, 0x34}}
+FOLDERID_RoamingAppData         :: GUID {0x3EB685DB, 0x65F9, 0x4CF6, {0xA0, 0x3A, 0xE3, 0xEF, 0x65, 0x72, 0x9F, 0x3D}}
+FOLDERID_LocalAppData           :: GUID {0xF1B32785, 0x6FBA, 0x4FCF, {0x9D, 0x55, 0x7B, 0x8E, 0x7F, 0x15, 0x70, 0x91}}
+FOLDERID_LocalAppDataLow        :: GUID {0xA520A1A4, 0x1780, 0x4FF6, {0xBD, 0x18, 0x16, 0x73, 0x43, 0xC5, 0xAF, 0x16}}
+FOLDERID_InternetCache          :: GUID {0x352481E8, 0x33BE, 0x4251, {0xBA, 0x85, 0x60, 0x07, 0xCA, 0xED, 0xCF, 0x9D}}
+FOLDERID_Cookies                :: GUID {0x2B0F765D, 0xC0E9, 0x4171, {0x90, 0x8E, 0x08, 0xA6, 0x11, 0xB8, 0x4F, 0xF6}}
+FOLDERID_History                :: GUID {0xD9DC8A3B, 0xB784, 0x432E, {0xA7, 0x81, 0x5A, 0x11, 0x30, 0xA7, 0x59, 0x63}}
+FOLDERID_System                 :: GUID {0x1AC14E77, 0x02E7, 0x4E5D, {0xB7, 0x44, 0x2E, 0xB1, 0xAE, 0x51, 0x98, 0xB7}}
+FOLDERID_SystemX86              :: GUID {0xD65231B0, 0xB2F1, 0x4857, {0xA4, 0xCE, 0xA8, 0xE7, 0xC6, 0xEA, 0x7D, 0x27}}
+FOLDERID_Windows                :: GUID {0xF38BF404, 0x1D43, 0x42F2, {0x93, 0x05, 0x67, 0xDE, 0x0B, 0x28, 0xFC, 0x23}}
+FOLDERID_Profile                :: GUID {0x5E6C858F, 0x0E22, 0x4760, {0x9A, 0xFE, 0xEA, 0x33, 0x17, 0xB6, 0x71, 0x73}}
+FOLDERID_Pictures               :: GUID {0x33E28130, 0x4E1E, 0x4676, {0x83, 0x5A, 0x98, 0x39, 0x5C, 0x3B, 0xC3, 0xBB}}
+FOLDERID_ProgramFilesX86        :: GUID {0x7C5A40EF, 0xA0FB, 0x4BFC, {0x87, 0x4A, 0xC0, 0xF2, 0xE0, 0xB9, 0xFA, 0x8E}}
+FOLDERID_ProgramFilesCommonX86  :: GUID {0xDE974D24, 0xD9C6, 0x4D3E, {0xBF, 0x91, 0xF4, 0x45, 0x51, 0x20, 0xB9, 0x17}}
+FOLDERID_ProgramFilesX64        :: GUID {0x6d809377, 0x6af0, 0x444b, {0x89, 0x57, 0xa3, 0x77, 0x3f, 0x02, 0x20, 0x0e}}
+FOLDERID_ProgramFilesCommonX64  :: GUID {0x6365d5a7, 0xf0d , 0x45e5, {0x87, 0xf6, 0xd, 0xa5, 0x6b, 0x6a, 0x4f, 0x7d }}
+FOLDERID_ProgramFiles           :: GUID {0x905e63b6, 0xc1bf, 0x494e, {0xb2, 0x9c, 0x65, 0xb7, 0x32, 0xd3, 0xd2, 0x1a}}
+FOLDERID_ProgramFilesCommon     :: GUID {0xF7F1ED05, 0x9F6D, 0x47A2, {0xAA, 0xAE, 0x29, 0xD3, 0x17, 0xC6, 0xF0, 0x66}}
+FOLDERID_UserProgramFiles       :: GUID {0x5cd7aee2, 0x2219, 0x4a67, {0xb8, 0x5d, 0x6c, 0x9c, 0xe1, 0x56, 0x60, 0xcb}}
+FOLDERID_UserProgramFilesCommon :: GUID {0xbcbd3057, 0xca5c, 0x4622, {0xb4, 0x2d, 0xbc, 0x56, 0xdb, 0x0a, 0xe5, 0x16}}
+FOLDERID_AdminTools             :: GUID {0x724EF170, 0xA42D, 0x4FEF, {0x9F, 0x26, 0xB6, 0x0E, 0x84, 0x6F, 0xBA, 0x4F}}
+FOLDERID_CommonAdminTools       :: GUID {0xD0384E7D, 0xBAC3, 0x4797, {0x8F, 0x14, 0xCB, 0xA2, 0x29, 0xB3, 0x92, 0xB5}}
+FOLDERID_Music                  :: GUID {0x4BD8D571, 0x6D19, 0x48D3, {0xBE, 0x97, 0x42, 0x22, 0x20, 0x08, 0x0E, 0x43}}
+FOLDERID_Videos                 :: GUID {0x18989B1D, 0x99B5, 0x455B, {0x84, 0x1C, 0xAB, 0x7C, 0x74, 0xE4, 0xDD, 0xFC}}
+FOLDERID_Ringtones              :: GUID {0xC870044B, 0xF49E, 0x4126, {0xA9, 0xC3, 0xB5, 0x2A, 0x1F, 0xF4, 0x11, 0xE8}}
+FOLDERID_PublicPictures         :: GUID {0xB6EBFB86, 0x6907, 0x413C, {0x9A, 0xF7, 0x4F, 0xC2, 0xAB, 0xF0, 0x7C, 0xC5}}
+FOLDERID_PublicMusic            :: GUID {0x3214FAB5, 0x9757, 0x4298, {0xBB, 0x61, 0x92, 0xA9, 0xDE, 0xAA, 0x44, 0xFF}}
+FOLDERID_PublicVideos           :: GUID {0x2400183A, 0x6185, 0x49FB, {0xA2, 0xD8, 0x4A, 0x39, 0x2A, 0x60, 0x2B, 0xA3}}
+FOLDERID_PublicRingtones        :: GUID {0xE555AB60, 0x153B, 0x4D17, {0x9F, 0x04, 0xA5, 0xFE, 0x99, 0xFC, 0x15, 0xEC}}
+FOLDERID_ResourceDir            :: GUID {0x8AD10C31, 0x2ADB, 0x4296, {0xA8, 0xF7, 0xE4, 0x70, 0x12, 0x32, 0xC9, 0x72}}
+FOLDERID_LocalizedResourcesDir  :: GUID {0x2A00375E, 0x224C, 0x49DE, {0xB8, 0xD1, 0x44, 0x0D, 0xF7, 0xEF, 0x3D, 0xDC}}
+FOLDERID_CommonOEMLinks         :: GUID {0xC1BAE2D0, 0x10DF, 0x4334, {0xBE, 0xDD, 0x7A, 0xA2, 0x0B, 0x22, 0x7A, 0x9D}}
+FOLDERID_CDBurning              :: GUID {0x9E52AB10, 0xF80D, 0x49DF, {0xAC, 0xB8, 0x43, 0x30, 0xF5, 0x68, 0x78, 0x55}}
+FOLDERID_UserProfiles           :: GUID {0x0762D272, 0xC50A, 0x4BB0, {0xA3, 0x82, 0x69, 0x7D, 0xCD, 0x72, 0x9B, 0x80}}
+FOLDERID_Playlists              :: GUID {0xDE92C1C7, 0x837F, 0x4F69, {0xA3, 0xBB, 0x86, 0xE6, 0x31, 0x20, 0x4A, 0x23}}
+FOLDERID_SamplePlaylists        :: GUID {0x15CA69B3, 0x30EE, 0x49C1, {0xAC, 0xE1, 0x6B, 0x5E, 0xC3, 0x72, 0xAF, 0xB5}}
+FOLDERID_SampleMusic            :: GUID {0xB250C668, 0xF57D, 0x4EE1, {0xA6, 0x3C, 0x29, 0x0E, 0xE7, 0xD1, 0xAA, 0x1F}}
+FOLDERID_SamplePictures         :: GUID {0xC4900540, 0x2379, 0x4C75, {0x84, 0x4B, 0x64, 0xE6, 0xFA, 0xF8, 0x71, 0x6B}}
+FOLDERID_SampleVideos           :: GUID {0x859EAD94, 0x2E85, 0x48AD, {0xA7, 0x1A, 0x09, 0x69, 0xCB, 0x56, 0xA6, 0xCD}}
+FOLDERID_PhotoAlbums            :: GUID {0x69D2CF90, 0xFC33, 0x4FB7, {0x9A, 0x0C, 0xEB, 0xB0, 0xF0, 0xFC, 0xB4, 0x3C}}
+FOLDERID_Public                 :: GUID {0xDFDF76A2, 0xC82A, 0x4D63, {0x90, 0x6A, 0x56, 0x44, 0xAC, 0x45, 0x73, 0x85}}
+FOLDERID_ChangeRemovePrograms   :: GUID {0xdf7266ac, 0x9274, 0x4867, {0x8d, 0x55, 0x3b, 0xd6, 0x61, 0xde, 0x87, 0x2d}}
+FOLDERID_AppUpdates             :: GUID {0xa305ce99, 0xf527, 0x492b, {0x8b, 0x1a, 0x7e, 0x76, 0xfa, 0x98, 0xd6, 0xe4}}
+FOLDERID_AddNewPrograms         :: GUID {0xde61d971, 0x5ebc, 0x4f02, {0xa3, 0xa9, 0x6c, 0x82, 0x89, 0x5e, 0x5c, 0x04}}
+FOLDERID_Downloads              :: GUID {0x374de290, 0x123f, 0x4565, {0x91, 0x64, 0x39, 0xc4, 0x92, 0x5e, 0x46, 0x7b}}
+FOLDERID_PublicDownloads        :: GUID {0x3d644c9b, 0x1fb8, 0x4f30, {0x9b, 0x45, 0xf6, 0x70, 0x23, 0x5f, 0x79, 0xc0}}
+FOLDERID_SavedSearches          :: GUID {0x7d1d3a04, 0xdebb, 0x4115, {0x95, 0xcf, 0x2f, 0x29, 0xda, 0x29, 0x20, 0xda}}
+FOLDERID_QuickLaunch            :: GUID {0x52a4f021, 0x7b75, 0x48a9, {0x9f, 0x6b, 0x4b, 0x87, 0xa2, 0x10, 0xbc, 0x8f}}
+FOLDERID_Contacts               :: GUID {0x56784854, 0xc6cb, 0x462b, {0x81, 0x69, 0x88, 0xe3, 0x50, 0xac, 0xb8, 0x82}}
+FOLDERID_SidebarParts           :: GUID {0xa75d362e, 0x50fc, 0x4fb7, {0xac, 0x2c, 0xa8, 0xbe, 0xaa, 0x31, 0x44, 0x93}}
+FOLDERID_SidebarDefaultParts    :: GUID {0x7b396e54, 0x9ec5, 0x4300, {0xbe, 0xa , 0x24, 0x82, 0xeb, 0xae, 0x1a, 0x26}}
+FOLDERID_PublicGameTasks        :: GUID {0xdebf2536, 0xe1a8, 0x4c59, {0xb6, 0xa2, 0x41, 0x45, 0x86, 0x47, 0x6a, 0xea}}
+FOLDERID_GameTasks              :: GUID {0x54fae61 , 0x4dd8, 0x4787, {0x80, 0xb6, 0x9 , 0x2 , 0x20, 0xc4, 0xb7, 0x0 }}
+FOLDERID_SavedGames             :: GUID {0x4c5c32ff, 0xbb9d, 0x43b0, {0xb5, 0xb4, 0x2d, 0x72, 0xe5, 0x4e, 0xaa, 0xa4}}
+FOLDERID_Games                  :: GUID {0xcac52c1a, 0xb53d, 0x4edc, {0x92, 0xd7, 0x6b, 0x2e, 0x8a, 0xc1, 0x94, 0x34}}
+FOLDERID_SEARCH_MAPI            :: GUID {0x98ec0e18, 0x2098, 0x4d44, {0x86, 0x44, 0x66, 0x97, 0x93, 0x15, 0xa2, 0x81}}
+FOLDERID_SEARCH_CSC             :: GUID {0xee32e446, 0x31ca, 0x4aba, {0x81, 0x4f, 0xa5, 0xeb, 0xd2, 0xfd, 0x6d, 0x5e}}
+FOLDERID_Links                  :: GUID {0xbfb9d5e0, 0xc6a9, 0x404c, {0xb2, 0xb2, 0xae, 0x6d, 0xb6, 0xaf, 0x49, 0x68}}
+FOLDERID_UsersFiles             :: GUID {0xf3ce0f7c, 0x4901, 0x4acc, {0x86, 0x48, 0xd5, 0xd4, 0x4b, 0x04, 0xef, 0x8f}}
+FOLDERID_UsersLibraries         :: GUID {0xa302545d, 0xdeff, 0x464b, {0xab, 0xe8, 0x61, 0xc8, 0x64, 0x8d, 0x93, 0x9b}}
+FOLDERID_SearchHome             :: GUID {0x190337d1, 0xb8ca, 0x4121, {0xa6, 0x39, 0x6d, 0x47, 0x2d, 0x16, 0x97, 0x2a}}
+FOLDERID_OriginalImages         :: GUID {0x2C36C0AA, 0x5812, 0x4b87, {0xbf, 0xd0, 0x4c, 0xd0, 0xdf, 0xb1, 0x9b, 0x39}}
+FOLDERID_DocumentsLibrary       :: GUID {0x7b0db17d, 0x9cd2, 0x4a93, {0x97, 0x33, 0x46, 0xcc, 0x89, 0x02, 0x2e, 0x7c}}
+FOLDERID_MusicLibrary           :: GUID {0x2112ab0a, 0xc86a, 0x4ffe, {0xa3, 0x68, 0xd , 0xe9, 0x6e, 0x47, 0x1 , 0x2e}}
+FOLDERID_PicturesLibrary        :: GUID {0xa990ae9f, 0xa03b, 0x4e80, {0x94, 0xbc, 0x99, 0x12, 0xd7, 0x50, 0x41, 0x4 }}
+FOLDERID_VideosLibrary          :: GUID {0x491e922f, 0x5643, 0x4af4, {0xa7, 0xeb, 0x4e, 0x7a, 0x13, 0x8d, 0x81, 0x74}}
+FOLDERID_RecordedTVLibrary      :: GUID {0x1a6fdba2, 0xf42d, 0x4358, {0xa7, 0x98, 0xb7, 0x4d, 0x74, 0x59, 0x26, 0xc5}}
+FOLDERID_HomeGroup              :: GUID {0x52528a6b, 0xb9e3, 0x4add, {0xb6, 0xd , 0x58, 0x8c, 0x2d, 0xba, 0x84, 0x2d}}
+FOLDERID_HomeGroupCurrentUser   :: GUID {0x9b74b6a3, 0xdfd , 0x4f11, {0x9e, 0x78, 0x5f, 0x78, 0x0 , 0xf2, 0xe7, 0x72}}
+FOLDERID_DeviceMetadataStore    :: GUID {0x5ce4a5e9, 0xe4eb, 0x479d, {0xb8, 0x9f, 0x13, 0x0c, 0x02, 0x88, 0x61, 0x55}}
+FOLDERID_Libraries              :: GUID {0x1b3ea5dc, 0xb587, 0x4786, {0xb4, 0xef, 0xbd, 0x1d, 0xc3, 0x32, 0xae, 0xae}}
+FOLDERID_PublicLibraries        :: GUID {0x48daf80b, 0xe6cf, 0x4f4e, {0xb8, 0x00, 0x0e, 0x69, 0xd8, 0x4e, 0xe3, 0x84}}
+FOLDERID_UserPinned             :: GUID {0x9e3995ab, 0x1f9c, 0x4f13, {0xb8, 0x27, 0x48, 0xb2, 0x4b, 0x6c, 0x71, 0x74}}
+FOLDERID_ImplicitAppShortcuts   :: GUID {0xbcb5256f, 0x79f6, 0x4cee, {0xb7, 0x25, 0xdc, 0x34, 0xe4, 0x2 , 0xfd, 0x46}}
+FOLDERID_AccountPictures        :: GUID {0x008ca0b1, 0x55b4, 0x4c56, {0xb8, 0xa8, 0x4d, 0xe4, 0xb2, 0x99, 0xd3, 0xbe}}
+FOLDERID_PublicUserTiles        :: GUID {0x0482af6c, 0x08f1, 0x4c34, {0x8c, 0x90, 0xe1, 0x7e, 0xc9, 0x8b, 0x1e, 0x17}}
+FOLDERID_AppsFolder             :: GUID {0x1e87508d, 0x89c2, 0x42f0, {0x8a, 0x7e, 0x64, 0x5a, 0x0f, 0x50, 0xca, 0x58}}
+FOLDERID_StartMenuAllPrograms   :: GUID {0xf26305ef, 0x6948, 0x40b9, {0xb2, 0x55, 0x81, 0x45, 0x3d, 0x9 , 0xc7, 0x85}}
+FOLDERID_CommonStartMenuPlaces  :: GUID {0xa440879f, 0x87a0, 0x4f7d, {0xb7, 0x0 , 0x2 , 0x7 , 0xb9, 0x66, 0x19, 0x4a}}
+FOLDERID_ApplicationShortcuts   :: GUID {0xa3918781, 0xe5f2, 0x4890, {0xb3, 0xd9, 0xa7, 0xe5, 0x43, 0x32, 0x32, 0x8c}}
+FOLDERID_RoamingTiles           :: GUID {0xbcfc5a  , 0xed94, 0x4e48, {0x96, 0xa1, 0x3f, 0x62, 0x17, 0xf2, 0x19, 0x90}}
+FOLDERID_RoamedTileImages       :: GUID {0xaaa8d5a5, 0xf1d6, 0x4259, {0xba, 0xa8, 0x78, 0xe7, 0xef, 0x60, 0x83, 0x5e}}
+FOLDERID_Screenshots            :: GUID {0xb7bede81, 0xdf94, 0x4682, {0xa7, 0xd8, 0x57, 0xa5, 0x26, 0x20, 0xb8, 0x6f}}
+FOLDERID_CameraRoll             :: GUID {0xab5fb87b, 0x7ce2, 0x4f83, {0x91, 0x5d, 0x55, 0x8 , 0x46, 0xc9, 0x53, 0x7b}}
+FOLDERID_SkyDrive               :: GUID {0xa52bba46, 0xe9e1, 0x435f, {0xb3, 0xd9, 0x28, 0xda, 0xa6, 0x48, 0xc0, 0xf6}}
+FOLDERID_OneDrive               :: GUID {0xa52bba46, 0xe9e1, 0x435f, {0xb3, 0xd9, 0x28, 0xda, 0xa6, 0x48, 0xc0, 0xf6}}
+FOLDERID_SkyDriveDocuments      :: GUID {0x24d89e24, 0x2f19, 0x4534, {0x9d, 0xde, 0x6a, 0x66, 0x71, 0xfb, 0xb8, 0xfe}}
+FOLDERID_SkyDrivePictures       :: GUID {0x339719b5, 0x8c47, 0x4894, {0x94, 0xc2, 0xd8, 0xf7, 0x7a, 0xdd, 0x44, 0xa6}}
+FOLDERID_SkyDriveMusic          :: GUID {0xc3f2459e, 0x80d6, 0x45dc, {0xbf, 0xef, 0x1f, 0x76, 0x9f, 0x2b, 0xe7, 0x30}}
+FOLDERID_SkyDriveCameraRoll     :: GUID {0x767e6811, 0x49cb, 0x4273, {0x87, 0xc2, 0x20, 0xf3, 0x55, 0xe1, 0x08, 0x5b}}
+FOLDERID_SearchHistory          :: GUID {0x0d4c3db6, 0x03a3, 0x462f, {0xa0, 0xe6, 0x08, 0x92, 0x4c, 0x41, 0xb5, 0xd4}}
+FOLDERID_SearchTemplates        :: GUID {0x7e636bfe, 0xdfa9, 0x4d5e, {0xb4, 0x56, 0xd7, 0xb3, 0x98, 0x51, 0xd8, 0xa9}}
+FOLDERID_CameraRollLibrary      :: GUID {0x2b20df75, 0x1eda, 0x4039, {0x80, 0x97, 0x38, 0x79, 0x82, 0x27, 0xd5, 0xb7}}
+FOLDERID_SavedPictures          :: GUID {0x3b193882, 0xd3ad, 0x4eab, {0x96, 0x5a, 0x69, 0x82, 0x9d, 0x1f, 0xb5, 0x9f}}
+FOLDERID_SavedPicturesLibrary   :: GUID {0xe25b5812, 0xbe88, 0x4bd9, {0x94, 0xb0, 0x29, 0x23, 0x34, 0x77, 0xb6, 0xc3}}
+FOLDERID_RetailDemo             :: GUID {0x12d4c69e, 0x24ad, 0x4923, {0xbe, 0x19, 0x31, 0x32, 0x1c, 0x43, 0xa7, 0x67}}
+FOLDERID_Device                 :: GUID {0x1C2AC1DC, 0x4358, 0x4B6C, {0x97, 0x33, 0xAF, 0x21, 0x15, 0x65, 0x76, 0xF0}}
+FOLDERID_DevelopmentFiles       :: GUID {0xdbe8e08e, 0x3053, 0x4bbc, {0xb1, 0x83, 0x2a, 0x7b, 0x2b, 0x19, 0x1e, 0x59}}
+FOLDERID_Objects3D              :: GUID {0x31c0dd25, 0x9439, 0x4f12, {0xbf, 0x41, 0x7f, 0xf4, 0xed, 0xa3, 0x87, 0x22}}
+FOLDERID_AppCaptures            :: GUID {0xedc0fe71, 0x98d8, 0x4f4a, {0xb9, 0x20, 0xc8, 0xdc, 0x13, 0x3c, 0xb1, 0x65}}
+FOLDERID_LocalDocuments         :: GUID {0xf42ee2d3, 0x909f, 0x4907, {0x88, 0x71, 0x4c, 0x22, 0xfc, 0x0b, 0xf7, 0x56}}
+FOLDERID_LocalPictures          :: GUID {0x0ddd015d, 0xb06c, 0x45d5, {0x8c, 0x4c, 0xf5, 0x97, 0x13, 0x85, 0x46, 0x39}}
+FOLDERID_LocalVideos            :: GUID {0x35286a68, 0x3c57, 0x41a1, {0xbb, 0xb1, 0x0e, 0xae, 0x73, 0xd7, 0x6c, 0x95}}
+FOLDERID_LocalMusic             :: GUID {0xa0c69a99, 0x21c8, 0x4671, {0x87, 0x03, 0x79, 0x34, 0x16, 0x2f, 0xcf, 0x1d}}
+FOLDERID_LocalDownloads         :: GUID {0x7d83ee9b, 0x2244, 0x4e70, {0xb1, 0xf5, 0x53, 0x93, 0x04, 0x2a, 0xf1, 0xe4}}
+FOLDERID_RecordedCalls          :: GUID {0x2f8b40c2, 0x83ed, 0x48ee, {0xb3, 0x83, 0xa1, 0xf1, 0x57, 0xec, 0x6f, 0x9a}}
+FOLDERID_AllAppMods             :: GUID {0x7ad67899, 0x66af, 0x43ba, {0x91, 0x56, 0x6a, 0xad, 0x42, 0xe6, 0xc5, 0x96}}
+FOLDERID_CurrentAppMods         :: GUID {0x3db40b20, 0x2a30, 0x4dbe, {0x91, 0x7e, 0x77, 0x1d, 0xd2, 0x1d, 0xd0, 0x99}}
+FOLDERID_AppDataDesktop         :: GUID {0xb2c5e279, 0x7add, 0x439f, {0xb2, 0x8c, 0xc4, 0x1f, 0xe1, 0xbb, 0xf6, 0x72}}
+FOLDERID_AppDataDocuments       :: GUID {0x7be16610, 0x1f7f, 0x44ac, {0xbf, 0xf0, 0x83, 0xe1, 0x5f, 0x2f, 0xfc, 0xa1}}
+FOLDERID_AppDataFavorites       :: GUID {0x7cfbefbc, 0xde1f, 0x45aa, {0xb8, 0x43, 0xa5, 0x42, 0xac, 0x53, 0x6c, 0xc9}}
+FOLDERID_AppDataProgramData     :: GUID {0x559d40a3, 0xa036, 0x40fa, {0xaf, 0x61, 0x84, 0xcb, 0x43, 0xa , 0x4d, 0x34}}
+FOLDERID_LocalStorage           :: GUID {0xB3EB08D3, 0xA1F3, 0x496B, {0x86, 0x5A, 0x42, 0xB5, 0x36, 0xCD, 0xA0, 0xEC}}

+ 37 - 4
core/sys/windows/shell32.odin

@@ -22,9 +22,13 @@ foreign shell32 {
 	) -> c_int ---
 	SHFileOperationW :: proc(lpFileOp: LPSHFILEOPSTRUCTW) -> c_int ---
 	SHGetFolderPathW :: proc(hwnd: HWND, csidl: c_int, hToken: HANDLE, dwFlags: DWORD, pszPath: LPWSTR) -> HRESULT ---
-	SHAppBarMessage :: proc(dwMessage: DWORD, pData: PAPPBARDATA) -> UINT_PTR --- 
+	SHAppBarMessage :: proc(dwMessage: DWORD, pData: PAPPBARDATA) -> UINT_PTR ---
 
 	Shell_NotifyIconW :: proc(dwMessage: DWORD, lpData: ^NOTIFYICONDATAW) -> BOOL ---
+
+	SHGetKnownFolderIDList :: proc(rfid: REFKNOWNFOLDERID, dwFlags: /* KNOWN_FOLDER_FLAG */ DWORD, hToken: HANDLE, ppidl: rawptr) -> HRESULT ---
+	SHSetKnownFolderPath :: proc(rfid: REFKNOWNFOLDERID, dwFlags: /* KNOWN_FOLDER_FLAG */ DWORD, hToken: HANDLE, pszPath: PCWSTR ) -> HRESULT ---
+	SHGetKnownFolderPath :: proc(rfid: REFKNOWNFOLDERID, dwFlags: /* KNOWN_FOLDER_FLAG */ DWORD, hToken: HANDLE, ppszPath: ^LPWSTR) -> HRESULT ---
 }
 
 APPBARDATA :: struct {
@@ -36,16 +40,16 @@ APPBARDATA :: struct {
 	lParam: LPARAM,
 }
 PAPPBARDATA :: ^APPBARDATA
- 
+
 ABM_NEW              :: 0x00000000
 ABM_REMOVE           :: 0x00000001
 ABM_QUERYPOS         :: 0x00000002
 ABM_SETPOS           :: 0x00000003
 ABM_GETSTATE         :: 0x00000004
 ABM_GETTASKBARPOS    :: 0x00000005
-ABM_ACTIVATE         :: 0x00000006 
+ABM_ACTIVATE         :: 0x00000006
 ABM_GETAUTOHIDEBAR   :: 0x00000007
-ABM_SETAUTOHIDEBAR   :: 0x00000008 
+ABM_SETAUTOHIDEBAR   :: 0x00000008
 ABM_WINDOWPOSCHANGED :: 0x0000009
 ABM_SETSTATE         :: 0x0000000a
 ABN_STATECHANGE      :: 0x0000000
@@ -58,3 +62,32 @@ ABE_LEFT             :: 0
 ABE_TOP              :: 1
 ABE_RIGHT            :: 2
 ABE_BOTTOM           :: 3
+
+KNOWNFOLDERID :: GUID
+REFKNOWNFOLDERID :: ^KNOWNFOLDERID
+
+KNOWN_FOLDER_FLAG :: enum u32 {
+	DEFAULT                          = 0x00000000,
+
+	// if NTDDI_VERSION >= NTDDI_WIN10_RS3
+	FORCE_APP_DATA_REDIRECTION       = 0x00080000,
+
+	// if NTDDI_VERSION >= NTDDI_WIN10_RS2
+	RETURN_FILTER_REDIRECTION_TARGET = 0x00040000,
+	FORCE_PACKAGE_REDIRECTION        = 0x00020000,
+	NO_PACKAGE_REDIRECTION           = 0x00010000,
+	FORCE_APPCONTAINER_REDIRECTION   = 0x00020000,
+
+	// if NTDDI_VERSION >= NTDDI_WIN7
+	NO_APPCONTAINER_REDIRECTION      = 0x00010000,
+
+	CREATE                           = 0x00008000,
+	DONT_VERIFY                      = 0x00004000,
+	DONT_UNEXPAND                    = 0x00002000,
+	NO_ALIAS                         = 0x00001000,
+	INIT                             = 0x00000800,
+	DEFAULT_PATH                     = 0x00000400,
+	NOT_PARENT_RELATIVE              = 0x00000200,
+	SIMPLE_IDLIST                    = 0x00000100,
+	ALIAS_ONLY                       = 0x80000000,
+}

+ 2 - 0
core/sys/windows/types.odin

@@ -86,6 +86,8 @@ INT16 :: i16
 INT32 :: i32
 INT64 :: i64
 
+ULONG32 :: u32
+LONG32  :: i32
 
 ULONG64 :: u64
 LONG64  :: i64