aboutsummaryrefslogtreecommitdiff
path: root/core/sys/windows
diff options
context:
space:
mode:
authorLaytan Laats <laytanlaats@hotmail.com>2026-01-11 20:15:55 +0100
committerLaytan Laats <laytanlaats@hotmail.com>2026-01-11 20:21:25 +0100
commit24ee35af28a49a110861b49c8aa3a0c7b7c9d5d5 (patch)
treeba9e1fec552c9e3dea3dea5497efed04880873d9 /core/sys/windows
parentb2af4f335d47a9e4424bd5393381a4b226afe998 (diff)
nbio: add package
Diffstat (limited to 'core/sys/windows')
-rw-r--r--core/sys/windows/kernel32.odin23
-rw-r--r--core/sys/windows/mswsock.odin40
-rw-r--r--core/sys/windows/ntdll.odin25
-rw-r--r--core/sys/windows/types.odin12
-rw-r--r--core/sys/windows/winerror.odin7
-rw-r--r--core/sys/windows/ws2_32.odin8
6 files changed, 106 insertions, 9 deletions
diff --git a/core/sys/windows/kernel32.odin b/core/sys/windows/kernel32.odin
index 0ad11121e..dc76cb037 100644
--- a/core/sys/windows/kernel32.odin
+++ b/core/sys/windows/kernel32.odin
@@ -30,6 +30,16 @@ EV_RXCHAR :: DWORD(0x0001)
EV_RXFLAG :: DWORD(0x0002)
EV_TXEMPTY :: DWORD(0x0004)
+WAITORTIMERCALLBACK :: #type proc "system" (lpParameter: PVOID, TimerOrWaitFired: BOOLEAN)
+
+WT_EXECUTEDEFAULT :: 0x00000000
+WT_EXECUTEINIOTHREAD :: 0x00000001
+WT_EXECUTEINPERSISTENTTHREAD :: 0x00000080
+WT_EXECUTEINWAITTHREAD :: 0x00000004
+WT_EXECUTELONGFUNCTION :: 0x00000010
+WT_EXECUTEONLYONCE :: 0x00000008
+WT_TRANSFER_IMPERSONATION :: 0x00000100
+
@(default_calling_convention="system")
foreign kernel32 {
OutputDebugStringA :: proc(lpOutputString: LPCSTR) --- // The only A thing that is allowed
@@ -567,7 +577,7 @@ foreign kernel32 {
// [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/ioapiset/nf-ioapiset-getqueuedcompletionstatusex)
GetQueuedCompletionStatusEx :: proc(CompletionPort: HANDLE, lpCompletionPortEntries: ^OVERLAPPED_ENTRY, ulCount: c_ulong, ulNumEntriesRemoved: ^c_ulong, dwMilliseconds: DWORD, fAlertable: BOOL) -> BOOL ---
// [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/ioapiset/nf-ioapiset-postqueuedcompletionstatus)
- PostQueuedCompletionStatus :: proc(CompletionPort: HANDLE, dwNumberOfBytesTransferred: DWORD, dwCompletionKey: c_ulong, lpOverlapped: ^OVERLAPPED) -> BOOL ---
+ PostQueuedCompletionStatus :: proc(CompletionPort: HANDLE, dwNumberOfBytesTransferred: DWORD, dwCompletionKey: ULONG_PTR, lpOverlapped: ^OVERLAPPED) -> BOOL ---
// [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/handleapi/nf-handleapi-gethandleinformation)
GetHandleInformation :: proc(hObject: HANDLE, lpdwFlags: ^DWORD) -> BOOL ---
@@ -575,6 +585,17 @@ foreign kernel32 {
RtlNtStatusToDosError :: proc(status: NTSTATUS) -> ULONG ---
GetSystemPowerStatus :: proc(lpSystemPowerStatus: ^SYSTEM_POWER_STATUS) -> BOOL ---
+
+ RegisterWaitForSingleObject :: proc(
+ phNewWaitObject: PHANDLE,
+ hObject: HANDLE,
+ Callback: WAITORTIMERCALLBACK,
+ Context: PVOID,
+ dwMilliseconds: ULONG,
+ dwFlags: ULONG,
+ ) -> BOOL ---
+
+ UnregisterWaitEx :: proc(WaitHandle: HANDLE, CompletionEvent: HANDLE) -> BOOL ---
}
DEBUG_PROCESS :: 0x00000001
diff --git a/core/sys/windows/mswsock.odin b/core/sys/windows/mswsock.odin
new file mode 100644
index 000000000..9019fc821
--- /dev/null
+++ b/core/sys/windows/mswsock.odin
@@ -0,0 +1,40 @@
+#+build windows
+package sys_windows
+
+foreign import mswsock "system:mswsock.lib"
+
+foreign mswsock {
+ TransmitFile :: proc(
+ hSocket: SOCKET,
+ hFile: HANDLE,
+ nNumberOfBytesToWrite: DWORD,
+ nNumberOfBytesPerSend: DWORD,
+ lpOverlapped: LPOVERLAPPED,
+ lpTransmitBuffers: rawptr,
+ dwReserved: DWORD,
+ ) -> BOOL ---
+
+ AcceptEx :: proc(
+ sListenSocket: SOCKET,
+ sAcceptSocket: SOCKET,
+ lpOutputBuffer: PVOID,
+ dwReceiveDataLength: DWORD,
+ dwLocalAddressLength: DWORD,
+ dwRemoteAddressLength: DWORD,
+ lpdwBytesReceived: LPDWORD,
+ lpOverlapped: LPOVERLAPPED,
+ ) -> BOOL ---
+
+ GetAcceptExSockaddrs :: proc(
+ lpOutputBuffer: PVOID,
+ dwReceiveDataLength: DWORD,
+ dwLocalAddressLength: DWORD,
+ dwRemoteAddressLength: DWORD,
+ LocalSockaddr: ^^sockaddr,
+ LocalSockaddrLength: LPINT,
+ RemoteSockaddr: ^^sockaddr,
+ RemoteSockaddrLength: LPINT,
+ ) ---
+}
+
+SO_UPDATE_CONNECT_CONTEXT :: 0x7010 \ No newline at end of file
diff --git a/core/sys/windows/ntdll.odin b/core/sys/windows/ntdll.odin
index 747130749..8362bb9df 100644
--- a/core/sys/windows/ntdll.odin
+++ b/core/sys/windows/ntdll.odin
@@ -36,6 +36,20 @@ foreign ntdll_lib {
QueryFlags: ULONG,
FileName : PUNICODE_STRING,
) -> NTSTATUS ---
+
+ NtCreateFile :: proc(
+ FileHandle: PHANDLE,
+ DesiredAccess: ACCESS_MASK,
+ ObjectAttributes: POBJECT_ATTRIBUTES,
+ IoStatusBlock: PIO_STATUS_BLOCK,
+ AllocationSize: PLARGE_INTEGER,
+ FileAttributes: ULONG,
+ ShareAccess: ULONG,
+ CreateDisposition: ULONG,
+ CreateOptions: ULONG,
+ EaBuffer: PVOID,
+ EaLength: ULONG,
+ ) -> NTSTATUS ---
}
@@ -256,4 +270,13 @@ RTL_DRIVE_LETTER_CURDIR :: struct {
LIST_ENTRY :: struct {
Flink: ^LIST_ENTRY,
Blink: ^LIST_ENTRY,
-} \ No newline at end of file
+}
+
+FILE_SUPERSEDE :: 0x00000000
+FILE_OPEN :: 0x00000001
+FILE_CREATE :: 0x00000002
+FILE_OPEN_IF :: 0x00000003
+FILE_OVERWRITE :: 0x00000004
+FILE_OVERWRITE_IF :: 0x00000005
+
+FILE_NON_DIRECTORY_FILE :: 0x00000040
diff --git a/core/sys/windows/types.odin b/core/sys/windows/types.odin
index e1a14fb94..0d8854724 100644
--- a/core/sys/windows/types.odin
+++ b/core/sys/windows/types.odin
@@ -3139,6 +3139,7 @@ OBJECT_ATTRIBUTES :: struct {
SecurityDescriptor: rawptr,
SecurityQualityOfService: rawptr,
}
+POBJECT_ATTRIBUTES :: ^OBJECT_ATTRIBUTES
PUNICODE_STRING :: ^UNICODE_STRING
UNICODE_STRING :: struct {
@@ -3150,9 +3151,14 @@ UNICODE_STRING :: struct {
OVERLAPPED :: struct {
Internal: ^c_ulong,
InternalHigh: ^c_ulong,
- Offset: DWORD,
- OffsetHigh: DWORD,
- hEvent: HANDLE,
+ using _: struct #raw_union {
+ using _: struct {
+ Offset: DWORD,
+ OffsetHigh: DWORD,
+ },
+ OffsetFull: u64, // Convenience field to set Offset and OffsetHigh with one value.
+ },
+ hEvent: HANDLE,
}
OVERLAPPED_ENTRY :: struct {
diff --git a/core/sys/windows/winerror.odin b/core/sys/windows/winerror.odin
index 23467761d..2807ca0f8 100644
--- a/core/sys/windows/winerror.odin
+++ b/core/sys/windows/winerror.odin
@@ -248,6 +248,13 @@ E_HANDLE :: 0x80070006 // Handle that is not valid
E_OUTOFMEMORY :: 0x8007000E // Failed to allocate necessary memory
E_INVALIDARG :: 0x80070057 // One or more arguments are not valid
+SEC_E_INCOMPLETE_MESSAGE :: 0x80090318
+
+SEC_I_INCOMPLETE_CREDENTIALS :: 0x00090320
+SEC_I_CONTINUE_NEEDED :: 0x00090312
+SEC_I_CONTEXT_EXPIRED :: 0x00090317
+SEC_I_RENEGOTIATE :: 0x00090321
+
// Severity values
SEVERITY :: enum DWORD {
SUCCESS = 0,
diff --git a/core/sys/windows/ws2_32.odin b/core/sys/windows/ws2_32.odin
index ad9089c6e..77a288d6f 100644
--- a/core/sys/windows/ws2_32.odin
+++ b/core/sys/windows/ws2_32.odin
@@ -38,7 +38,7 @@ WSANETWORKEVENTS :: struct {
WSAID_ACCEPTEX :: GUID{0xb5367df1, 0xcbac, 0x11cf, {0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}}
WSAID_GETACCEPTEXSOCKADDRS :: GUID{0xb5367df2, 0xcbac, 0x11cf, {0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}}
-WSAID_CONNECTX :: GUID{0x25a207b9, 0xddf3, 0x4660, {0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e}}
+WSAID_CONNECTEX :: GUID{0x25a207b9, 0xddf3, 0x4660, {0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e}}
SIO_GET_EXTENSION_FUNCTION_POINTER :: IOC_INOUT | IOC_WS2 | 6
SIO_UDP_CONNRESET :: IOC_IN | IOC_VENDOR | 12
@@ -129,7 +129,7 @@ foreign ws2_32 {
dwBufferCount: DWORD,
lpNumberOfBytesSent: LPDWORD,
dwFlags: DWORD,
- lpTo: ^SOCKADDR_STORAGE_LH,
+ lpTo: ^sockaddr,
iToLen: c_int,
lpOverlapped: LPWSAOVERLAPPED,
lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
@@ -151,8 +151,8 @@ foreign ws2_32 {
dwBufferCount: DWORD,
lpNumberOfBytesRecvd: LPDWORD,
lpFlags: LPDWORD,
- lpFrom: ^SOCKADDR_STORAGE_LH,
- lpFromlen: ^c_int,
+ lpFrom: ^sockaddr,
+ lpFromlen: LPINT,
lpOverlapped: LPWSAOVERLAPPED,
lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE,
) -> c_int ---