// Win32 type aliases, constants, and struct definitions — data layout only, no function types. // 1. Base types — CHAR→i8, DWORD→u32, NTSTATUS→i32, BOOL→i32, ULONG_PTR→usize. // 2. Pointers/handles — LPVOID→*anyopaque, HANDLE, HMODULE, PHANDLE, HINTERNET. // 3. Strings — LPSTR→[*:0]u8, LPCWSTR→[*:0]const u16, FARPROC, PDWORD. // 4. Inline helpers — NT_SUCCESS, memory/page constants (PAGE_NOACCESS→MEM_RELEASE). // 5. Exception — EXCEPTION_SINGLE_STEP=0x80000004, CONTEXT_DEBUG_REGISTERS=0x00100010. // 6. Startup — STARTUPINFOEXA, PROCESS_INFORMATION, PROC_THREAD_ATTRIBUTE_*. // 7. COFF — section/symbol/relocation structs for BOF loader. // 8. Crypto — BCRYPT_AES_ALGORITHM, ECDH P-256, AES-256-GCM sizes, auth mode info. // 9. NT kernel — CONTEXT (debug regs at offset 192+), EXCEPTION_RECORD, OBJECT_ATTRIBUTES. // 10. Security — TOKEN_PRIVILEGES, LUID, SE_PRIVILEGE_ENABLED, token access masks. const std = @import("std"); pub const WINAPI = std.builtin.CallingConvention.winapi; pub const CHAR = i8; pub const UCHAR = u8; pub const BYTE = u8; pub const WORD = u16; pub const WCHAR = u16; pub const SHORT = i16; pub const INT = i32; pub const UINT = u32; pub const LONG = i32; pub const DWORD = u32; pub const DWORD64 = u64; pub const ULONG = u32; pub const LONGLONG = i64; pub const ULONGLONG = u64; pub const BOOL = i32; pub const BOOLEAN = u8; pub const NTSTATUS = i32; pub const HRESULT = i32; pub const SIZE_T = usize; pub const DWORD_PTR = usize; pub const UINT_PTR = usize; pub const ULONG_PTR = usize; pub const LONG_PTR = isize; pub const LARGE_INTEGER = i64; pub const INTERNET_PORT = u16; pub const LPVOID = *anyopaque; pub const LPCVOID = *const anyopaque; pub const HANDLE = *anyopaque; pub const PHANDLE = *HANDLE; pub const HMODULE = *anyopaque; pub const HINSTANCE = *anyopaque; pub const HINTERNET = *anyopaque; pub const LPSTR = [*:0]u8; pub const LPCSTR = [*:0]const u8; pub const LPWSTR = [*:0]u16; pub const LPCWSTR = [*:0]const u16; pub const PDWORD = *DWORD; pub const PULONG = *ULONG; pub const PSIZE_T = *SIZE_T; pub const PBOOL = *BOOL; pub const FARPROC = *const fn() callconv(WINAPI) isize; // 1a. type aliases done. below: inline helpers + memory/page constants pub inline fn NT_SUCCESS(status: NTSTATUS) bool { return status >= 0; } pub const MEM_COMMIT: ULONG = 0x00001000; pub const MEM_RESERVE: ULONG = 0x00002000; pub const MEM_RELEASE: ULONG = 0x00008000; pub const PAGE_NOACCESS: ULONG = 0x01; pub const PAGE_READONLY: ULONG = 0x02; pub const PAGE_READWRITE: ULONG = 0x04; pub const DLL_PROCESS_ATTACH: ULONG = 1; pub const PAGE_EXECUTE: ULONG = 0x10; pub const PAGE_EXECUTE_READ: ULONG = 0x20; pub const PAGE_EXECUTE_READWRITE: ULONG = 0x40; pub const CONTEXT_AMD64: DWORD = 0x00100000; pub const CONTEXT_DEBUG_REGISTERS: DWORD = CONTEXT_AMD64 | 0x00000010; // 0x00100010 pub const EXCEPTION_SINGLE_STEP: DWORD = 0x80000004; pub const EXCEPTION_CONTINUE_EXECUTION: LONG = -1; pub const EXCEPTION_CONTINUE_SEARCH: LONG = 0; // process/startup constants + structures pub const STARTF_USESTDHANDLES: DWORD = 0x00000100; pub const EXTENDED_STARTUPINFO_PRESENT: DWORD = 0x00080000; pub const PROC_THREAD_ATTRIBUTE_PARENT_PROCESS: DWORD_PTR = 0x00020000; pub const STARTUPINFOEXA = extern struct { StartupInfo: STARTUPINFOA, lpAttributeList: ?*anyopaque, }; pub const CREATE_NO_WINDOW: DWORD = 0x08000000; pub const MAX_PATH: usize = 260; pub const WINHTTP_FLAG_SECURE: ULONG = 0x00800000; pub const WINHTTP_ACCESS_TYPE_DEFAULT_PROXY: ULONG = 0; pub const WINHTTP_ACCESS_TYPE_NAMED_PROXY: ULONG = 3; pub const WINHTTP_ADDREQ_FLAG_ADD_IF_NEW: ULONG = 0x10000000; pub const WINHTTP_OPTION_ENABLE_HTTP2_PROTOCOL: ULONG = 133; pub const WINHTTP_PROTOCOL_FLAG_HTTP2: ULONG = 0x1; pub const WINHTTP_WEB_SOCKET_BUFFER_TYPE = enum(u32) { BINARY_MESSAGE = 0, BINARY_FRAGMENT = 1, UTF8_MESSAGE = 2, UTF8_FRAGMENT = 3, CLOSE = 4, }; // 1c. PE/COFF constants for the BOF loader and export parsing pub const IMAGE_DIRECTORY_ENTRY_EXPORT: usize = 0; pub const IMAGE_SYM_CLASS_EXTERNAL: u8 = 2; pub const IMAGE_FILE_MACHINE_AMD64: u16 = 0x8664; pub const IMAGE_REL_AMD64_ABSOLUTE: u16 = 0x0000; pub const IMAGE_REL_AMD64_ADDR64: u16 = 0x0001; pub const IMAGE_REL_AMD64_ADDR32: u16 = 0x0002; pub const IMAGE_REL_AMD64_ADDR32NB: u16 = 0x0003; pub const IMAGE_REL_AMD64_REL32: u16 = 0x0004; pub const IMAGE_REL_AMD64_REL32_1: u16 = 0x0005; pub const IMAGE_REL_AMD64_REL32_2: u16 = 0x0006; pub const IMAGE_REL_AMD64_REL32_3: u16 = 0x0007; pub const IMAGE_REL_AMD64_REL32_4: u16 = 0x0008; pub const IMAGE_REL_AMD64_REL32_5: u16 = 0x0009; pub const COFF_SECT_EXEC: u32 = 0x20000000; pub const COFF_SECT_WRITE: u32 = 0x80000000; pub const COFF_SECT_DATA: u32 = 0x40000000; // 1b. BCrypt crypto constants + structs for ECDH/AES-GCM pub const BCRYPT_AES_ALGORITHM: LPCWSTR = &[_:0]u16{ 'a', 'e', 's' }; pub const BCRYPT_CHAINING_MODE: LPCWSTR = &[_:0]u16{ 'C', 'h', 'a', 'i', 'n', 'i', 'n', 'g', 'M', 'o', 'd', 'e' }; pub const BCRYPT_CHAIN_MODE_GCM: LPCWSTR = &[_:0]u16{ 'C', 'h', 'a', 'i', 'n', 'i', 'n', 'g', 'M', 'o', 'd', 'e', 'G', 'C', 'M' }; pub const BCRYPT_USE_SYSTEM_PREFERRED_RNG: ULONG = 0x00000002; pub const BCRYPT_ECDH_P256_ALGORITHM: LPCWSTR = &[_:0]u16{ 'E', 'C', 'D', 'H', '_', 'P', '2', '5', '6' }; pub const BCRYPT_ECCPUBLIC_BLOB: LPCWSTR = &[_:0]u16{ 'E', 'C', 'C', 'P', 'U', 'B', 'L', 'I', 'C', 'B', 'L', 'O', 'B' }; pub const BCRYPT_KDF_RAW_SECRET: ?*const anyopaque = @as(?*const anyopaque, @ptrFromInt(3)); pub const AES_KEY_SIZE: usize = 32; pub const GCM_NONCE_SIZE: usize = 12; pub const GCM_TAG_SIZE: usize = 16; pub fn BCRYPT_INIT_AUTH_MODE_INFO(info: *BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO) void { info.cbSize = @sizeOf(BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO); info.dwInfoVersion = 1; info.pbNonce = null; info.cbNonce = 0; info.pbAuthData = null; info.cbAuthData = 0; info.pbTag = null; info.cbTag = 0; info.pbMacContext = null; info.cbMacContext = 0; info.dwFlags = 0; info.pbIV = null; info.cbIV = 0; } pub const UNICODE_STRING = extern struct { Length: u16, MaximumLength: u16, Buffer: [*]u16, }; pub const SYSTEM_INFO = extern struct { u: extern union { dwOemId: DWORD, s: extern struct { wProcessorArchitecture: WORD, wReserved: WORD, }, }, dwPageSize: DWORD, lpMinimumApplicationAddress: LPVOID, lpMaximumApplicationAddress: LPVOID, dwActiveProcessorMask: DWORD_PTR, dwNumberOfProcessors: DWORD, dwProcessorType: DWORD, dwAllocationGranularity: DWORD, wProcessorLevel: WORD, wProcessorRevision: WORD, }; pub const COORD = extern struct { X: SHORT, Y: SHORT, }; pub const MEMORY_BASIC_INFORMATION = extern struct { BaseAddress: LPVOID, AllocationBase: LPVOID, AllocationProtect: DWORD, RegionSize: SIZE_T, State: DWORD, Protect: DWORD, Type: DWORD, }; pub const SECURITY_ATTRIBUTES = extern struct { nLength: DWORD, lpSecurityDescriptor: ?LPVOID, bInheritHandle: BOOL, }; pub const PROCESS_INFORMATION = extern struct { hProcess: HANDLE, hThread: HANDLE, dwProcessId: DWORD, dwThreadId: DWORD, }; pub const STARTUPINFOA = extern struct { cb: DWORD, lpReserved: LPSTR, lpDesktop: LPSTR, lpTitle: LPSTR, dwX: DWORD, dwY: DWORD, dwXSize: DWORD, dwYSize: DWORD, dwXCountChars: DWORD, dwYCountChars: DWORD, dwFillAttribute: DWORD, dwFlags: DWORD, wShowWindow: WORD, cbReserved2: WORD, lpReserved2: *BYTE, hStdInput: HANDLE, hStdOutput: HANDLE, hStdError: HANDLE, }; pub const SYSTEMTIME = extern struct { wYear: WORD, wMonth: WORD, wDayOfWeek: WORD, wDay: WORD, wHour: WORD, wMinute: WORD, wSecond: WORD, wMilliseconds: WORD, }; // 1d. NT kernel structures — CONTEXT, EXCEPTION_RECORD, object/process types pub const CONTEXT = extern struct { P1Home: DWORD64, P2Home: DWORD64, P3Home: DWORD64, P4Home: DWORD64, P5Home: DWORD64, P6Home: DWORD64, ContextFlags: DWORD, MxCsr: DWORD, SegCs: WORD, SegDs: WORD, SegEs: WORD, SegFs: WORD, SegGs: WORD, SegSs: WORD, EFlags: DWORD, Dr0: DWORD64, Dr1: DWORD64, Dr2: DWORD64, Dr3: DWORD64, Dr6: DWORD64, Dr7: DWORD64, Rax: DWORD64, Rcx: DWORD64, Rdx: DWORD64, Rbx: DWORD64, Rsp: DWORD64, Rbp: DWORD64, Rsi: DWORD64, Rdi: DWORD64, R8: DWORD64, R9: DWORD64, R10: DWORD64, R11: DWORD64, R12: DWORD64, R13: DWORD64, R14: DWORD64, R15: DWORD64, Rip: DWORD64, }; pub const EXCEPTION_RECORD = extern struct { ExceptionCode: DWORD, ExceptionFlags: DWORD, ExceptionRecord: *EXCEPTION_RECORD, ExceptionAddress: *anyopaque, NumberParameters: DWORD, ExceptionInformation: [15]ULONG_PTR, }; pub const EXCEPTION_POINTERS = extern struct { ExceptionRecord: *EXCEPTION_RECORD, ContextRecord: *CONTEXT, }; pub const RTL_OSVERSIONINFOW = extern struct { dwOSVersionInfoSize: DWORD, dwMajorVersion: DWORD, dwMinorVersion: DWORD, dwBuildNumber: DWORD, dwPlatformId: DWORD, szCSDVersion: [128]WCHAR, }; pub const BCRYPT_ALG_HANDLE = *opaque {}; pub const BCRYPT_KEY_HANDLE = *opaque {}; pub const BCRYPT_SECRET_HANDLE = *opaque {}; // 1e. BCrypt auth mode info + COFF loader structs for BOF parsing pub const BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO = extern struct { cbSize: ULONG, dwInfoVersion: ULONG, pbNonce: ?*u8, cbNonce: ULONG, pbAuthData: ?*u8, cbAuthData: ULONG, pbTag: ?*u8, cbTag: ULONG, pbMacContext: ?*u8, cbMacContext: ULONG, dwFlags: ULONG, pbIV: ?*u8, cbIV: ULONG, }; pub const coff_file_header_t = extern struct { Machine: u16, NumberOfSections: u16, TimeDateStamp: u32, PointerToSymbolTable: u32, NumberOfSymbols: u32, SizeOfOptionalHeader: u16, Characteristics: u16, }; pub const coff_section_header_t = extern struct { Name: [8]u8, VirtualSize: u32, VirtualAddress: u32, SizeOfRawData: u32, PointerToRawData: u32, PointerToRelocations: u32, PointerToLinenumbers: u32, NumberOfRelocations: u16, NumberOfLinenumbers: u16, Characteristics: u32, }; pub const coff_symbol_t = extern struct { Name: extern union { ShortName: [8]u8, LongName: extern struct { Zeroes: u32, Offset: u32, }, }, Value: u32, SectionNumber: i16, Type: u16, StorageClass: u8, NumberOfAuxSymbols: u8, }; pub const coff_reloc_t = extern struct { VirtualAddress: u32, SymbolTableIndex: u32, Type: u16, }; pub const coff_mapped_section_t = struct { data: []u8, characteristics: u32, name: [8]u8, }; pub const bof_data_parser_t = struct { data: []const u8, offset: usize, }; pub const OBJECT_ATTRIBUTES = extern struct { Length: ULONG, RootDirectory: ?HANDLE, ObjectName: ?*anyopaque, Attributes: ULONG, SecurityDescriptor: ?*anyopaque, SecurityQualityOfService: ?*anyopaque, }; pub const CLIENT_ID = extern struct { UniqueProcess: HANDLE, UniqueThread: ?HANDLE, }; pub const PROCESS_INSTRUMENTATION_CALLBACK = extern struct { Version: ULONG, Reserved: ULONG, Callback: ?*anyopaque, }; pub const PROCESS_CREATE_INFO = extern struct { Size: SIZE_T, ProcessHandle: HANDLE, ParentProcess: HANDLE, }; pub const SECURITY_IMPERSONATION_LEVEL = enum(u32) { SecurityAnonymous = 0, SecurityIdentification = 1, SecurityImpersonation = 2, SecurityDelegation = 3, }; pub const TOKEN_TYPE = enum(u32) { TokenPrimary = 1, TokenImpersonation = 2, }; pub const TOKEN_DUPLICATE: DWORD = 0x0002; pub const TOKEN_QUERY: DWORD = 0x0008; pub const TOKEN_ADJUST_PRIVILEGES: DWORD = 0x0020; pub const TOKEN_ASSIGN_PRIMARY: DWORD = 0x0001; pub const TOKEN_IMPERSONATE: DWORD = 0x0004; pub const LUID = extern struct { LowPart: DWORD, HighPart: LONG, }; pub const LUID_AND_ATTRIBUTES = extern struct { Luid: LUID, Attributes: DWORD, }; pub const TOKEN_PRIVILEGES = extern struct { PrivilegeCount: DWORD, Privileges: [1]LUID_AND_ATTRIBUTES, }; // 1f. security/privilege/token constants pub const SE_PRIVILEGE_ENABLED: DWORD = 0x00000002; pub const GENERIC_READ: DWORD = 0x80000000; pub const GENERIC_WRITE: DWORD = 0x40000000; pub const OPEN_EXISTING: DWORD = 3; pub const OPEN_ALWAYS: DWORD = 4; pub const CREATE_ALWAYS: DWORD = 2; pub const FILE_SHARE_READ: DWORD = 0x00000001; pub const FILE_SHARE_WRITE: DWORD = 0x00000002; pub const FILE_ATTRIBUTE_NORMAL: DWORD = 0x00000080; pub const INVALID_HANDLE_VALUE: HANDLE = @ptrFromInt(~@as(usize, 0)); pub const CRITICAL_SECTION = extern struct { DebugInfo: ?*anyopaque, LockCount: LONG, RecursionCount: LONG, OwningThread: HANDLE, LockSemaphore: HANDLE, SpinCount: ULONG_PTR, }; pub const PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE: DWORD_PTR = 0x00020016;