diff options
| author | Jon Lipstate <Jon@Lipstate.com> | 2023-04-04 00:42:38 -0700 |
|---|---|---|
| committer | Jon Lipstate <Jon@Lipstate.com> | 2023-04-04 00:42:38 -0700 |
| commit | 6cba4d348383f66655f088ad1dc65e1eb3b3335d (patch) | |
| tree | 82b6aa4a9c422f552fe513e3a10adc6858d98282 /core | |
| parent | 738cf837def804b06e3869b02d5d8055301294ac (diff) | |
iocp support
Diffstat (limited to 'core')
| -rw-r--r-- | core/sys/windows/kernel32.odin | 17 | ||||
| -rw-r--r-- | core/sys/windows/types.odin | 21 | ||||
| -rw-r--r-- | core/sys/windows/ws2_32.odin | 3 |
3 files changed, 39 insertions, 2 deletions
diff --git a/core/sys/windows/kernel32.odin b/core/sys/windows/kernel32.odin index 1bbf910bb..c0f09ef2a 100644 --- a/core/sys/windows/kernel32.odin +++ b/core/sys/windows/kernel32.odin @@ -404,6 +404,23 @@ foreign kernel32 { ) -> BOOL --- GetLogicalProcessorInformation :: proc(buffer: ^SYSTEM_LOGICAL_PROCESSOR_INFORMATION, returnedLength: PDWORD) -> BOOL --- + + // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-setfilecompletionnotificationmodes) + SetFileCompletionNotificationModes :: proc(FileHandle: HANDLE, Flags: u8) -> BOOL --- + // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/ioapiset/nf-ioapiset-createiocompletionport) + CreateIoCompletionPort :: proc(FileHandle: HANDLE, ExistingCompletionPort: HANDLE, CompletionKey: uintptr, NumberOfConcurrentThreads: DWORD) -> HANDLE --- + // [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 --- + // [MS-Docs] (https://learn.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-gettickcount64) + GetTickCount64 :: proc() -> u64 --- + // [MS-Docs](https://github.com/mic101/windows/blob/master/WRK-v1.2/base/ntos/ex/keyedevent.c) + NtCreateKeyedEvent :: proc(KeyedEventHandle: ^HANDLE, DesiredAccess: ACCESS_MASK, ObjectAttributes: OBJECT_ATTRIBUTES, Flags: u32) -> NTSTATUS --- + // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/handleapi/nf-handleapi-gethandleinformation) + GetHandleInformation :: proc(hObject: HANDLE, lpdwFlags: ^DWORD) -> BOOL --- + //[MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/ioapiset/nf-ioapiset-getqueuedcompletionstatus) + GetQueuedCompletionStatus :: proc(CompletionPort: HANDLE, lpNumberOfBytesTransferred: ^DWORD, lpCompletionKey: uintptr, lpOverlapped: ^^OVERLAPPED, dwMilliseconds: DWORD) -> BOOL --- } diff --git a/core/sys/windows/types.odin b/core/sys/windows/types.odin index cd8bb4060..dd2b0e49b 100644 --- a/core/sys/windows/types.odin +++ b/core/sys/windows/types.odin @@ -2450,6 +2450,20 @@ FILETIME_as_unix_nanoseconds :: proc "contextless" (ft: FILETIME) -> i64 { return (t - 116444736000000000) * 100 } +OBJECT_ATTRIBUTES :: struct { + Length: c_ulong, + RootDirectory: HANDLE, + ObjectName: ^UNICODE_STRING, + Attributes: c_ulong, + SecurityDescriptor: rawptr, + SecurityQualityOfService: rawptr, +} + +UNICODE_STRING :: struct { + Length: u16, + MaximumLength: u16, + Buffer: ^u16, +} OVERLAPPED :: struct { Internal: ^c_ulong, @@ -2459,6 +2473,13 @@ OVERLAPPED :: struct { hEvent: HANDLE, } +OVERLAPPED_ENTRY :: struct { + lpCompletionKey: c_ulong, + lpOverlapped: ^OVERLAPPED, + Internal: c_ulong, + dwNumberOfBytesTransferred: DWORD, +} + LPOVERLAPPED_COMPLETION_ROUTINE :: #type proc "stdcall" ( dwErrorCode: DWORD, dwNumberOfBytesTransfered: DWORD, diff --git a/core/sys/windows/ws2_32.odin b/core/sys/windows/ws2_32.odin index cfb09e1fc..ef4a9465b 100644 --- a/core/sys/windows/ws2_32.odin +++ b/core/sys/windows/ws2_32.odin @@ -36,7 +36,6 @@ WSANETWORKEVENTS :: struct { } WSAEVENT :: HANDLE -WSAOVERLAPPED_COMPLETION_ROUTINE :: proc(dwError: DWORD, cbTransferred: DWORD, lpOverlapped: ^OVERLAPPED, dwFlags: DWORD) 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}} @@ -127,7 +126,7 @@ foreign ws2_32 { dwFlags: DWORD, ) -> SOCKET --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsaioctl) - WSAIoctl :: proc(s: SOCKET, dwIoControlCode: DWORD, lpvInBuffer: rawptr, cbInBuffer: DWORD, lpvOutBuffer: rawptr, cbOutBuffer: DWORD, lpcbBytesReturned: ^DWORD, lpOverlapped: ^OVERLAPPED, lpCompletionRoutine: ^WSAOVERLAPPED_COMPLETION_ROUTINE) -> c_int --- + WSAIoctl :: proc(s: SOCKET, dwIoControlCode: DWORD, lpvInBuffer: rawptr, cbInBuffer: DWORD, lpvOutBuffer: rawptr, cbOutBuffer: DWORD, lpcbBytesReturned: ^DWORD, lpOverlapped: ^OVERLAPPED, lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE) -> c_int --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsaeventselect) WSAEventSelect :: proc(s: SOCKET, hEventObject: WSAEVENT, lNetworkEvents: i32) -> c_int --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsawaitformultipleevents) |