This module implements a small wrapper for some needed Win API procedures, so that the Nim compiler does not depend on the huge Windows module.
Types
AddrInfo = object ai_flags*: cint ## Input flags. ai_family*: cint ## Address family of socket. ai_socktype*: cint ## Socket type. ai_protocol*: cint ## Protocol of socket. ai_addrlen*: csize_t ## Length of socket address. ai_canonname*: cstring ## Canonical name of service location. ai_addr*: ptr SockAddr ## Socket address of socket. ai_next*: ptr AddrInfo ## Pointer to next in list.
- Source Edit
BY_HANDLE_FILE_INFORMATION = object dwFileAttributes*: DWORD ftCreationTime*: FILETIME ftLastAccessTime*: FILETIME ftLastWriteTime*: FILETIME dwVolumeSerialNumber*: DWORD nFileSizeHigh*: DWORD nFileSizeLow*: DWORD nNumberOfLinks*: DWORD nFileIndexHigh*: DWORD nFileIndexLow*: DWORD
- Source Edit
FILETIME = object dwLowDateTime*: DWORD dwHighDateTime*: DWORD
- CANNOT BE int64 BECAUSE OF ALIGNMENT Source Edit
Hostent = object h_name*: cstring h_aliases*: cstringArray h_addrtype*: int16 h_length*: int16 h_addr_list*: cstringArray
- Source Edit
In6_addr {.importc: "IN6_ADDR", header: "winsock2.h".} = object bytes* {.importc: "u.Byte".}: array[0 .. 15, char]
- Source Edit
KEY_EVENT_RECORD = object eventType*: int16 bKeyDown*: WINBOOL wRepeatCount*: int16 wVirtualKeyCode*: int16 wVirtualScanCode*: int16 uChar*: int16 dwControlKeyState*: DWORD
- Source Edit
OSVERSIONINFO = object dwOSVersionInfoSize*: DWORD dwMajorVersion*: DWORD dwMinorVersion*: DWORD dwBuildNumber*: DWORD dwPlatformId*: DWORD szCSDVersion*: array[0 .. 127, WinChar]
- Source Edit
OVERLAPPED {.pure, inheritable.} = object internal*: PULONG internalHigh*: PULONG offset*: DWORD offsetHigh*: DWORD hEvent*: Handle
- Source Edit
POVERLAPPED = ptr OVERLAPPED
- Source Edit
POVERLAPPED_COMPLETION_ROUTINE = proc (para1: DWORD; para2: DWORD; para3: POVERLAPPED) {.stdcall.}
- Source Edit
PROCESS_INFORMATION = object hProcess*: Handle hThread*: Handle dwProcessId*: int32 dwThreadId*: int32
- Source Edit
Protoent = object p_name*: cstring p_aliases*: cstringArray p_proto*: cshort
- Source Edit
PWOHandleArray = ptr WOHandleArray
- Source Edit
SECURITY_ATTRIBUTES = object nLength*: int32 lpSecurityDescriptor*: pointer bInheritHandle*: WINBOOL
- Source Edit
Servent = object s_name*: cstring s_aliases*: cstringArray when defined(cpu64): s_proto*: cstring s_port*: int16 else: s_port*: int16 s_proto*: cstring
- Source Edit
SID_IDENTIFIER_AUTHORITY {.importc, header: "<windows.h>".} = object value* {.importc: "Value".}: array[6, BYTE]
- Source Edit
SockAddr {.importc: "SOCKADDR", header: "winsock2.h".} = object sa_family*: uint16 sa_data*: array[0 .. 13, char]
- Source Edit
Sockaddr_in {.importc: "SOCKADDR_IN", header: "winsock2.h".} = object sin_family*: uint16 sin_port*: uint16 sin_addr*: InAddr sin_zero*: array[0 .. 7, char]
- Source Edit
Sockaddr_in6 {.importc: "SOCKADDR_IN6", header: "ws2tcpip.h".} = object sin6_family*: uint16 sin6_port*: uint16 sin6_flowinfo*: int32 sin6_addr*: In6_addr sin6_scope_id*: int32
- Source Edit
Sockaddr_storage {.importc: "SOCKADDR_STORAGE", header: "winsock2.h".} = object ss_family*: uint16
- Source Edit
STARTUPINFO = object cb*: int32 lpReserved*: cstring lpDesktop*: cstring lpTitle*: cstring dwX*: int32 dwY*: int32 dwXSize*: int32 dwYSize*: int32 dwXCountChars*: int32 dwYCountChars*: int32 dwFillAttribute*: int32 dwFlags*: int32 wShowWindow*: int16 cbReserved2*: int16 lpReserved2*: pointer hStdInput*: Handle hStdOutput*: Handle hStdError*: Handle
- Source Edit
TFdSet = object fd_count*: cint fd_array*: array[0 .. 64 - 1, SocketHandle]
- Source Edit
WIN32_FIND_DATA {.pure.} = object dwFileAttributes*: int32 ftCreationTime*: FILETIME ftLastAccessTime*: FILETIME ftLastWriteTime*: FILETIME nFileSizeHigh*: int32 nFileSizeLow*: int32 cFileName*: array[0 .. 260 - 1, WinChar] cAlternateFileName*: array[0 .. 13, WinChar]
- Source Edit
WSAPROC_ACCEPTEX = proc (sListenSocket: SocketHandle; sAcceptSocket: SocketHandle; lpOutputBuffer: pointer; dwReceiveDataLength: DWORD; dwLocalAddressLength: DWORD; dwRemoteAddressLength: DWORD; lpdwBytesReceived: ptr DWORD; lpOverlapped: POVERLAPPED): bool {. stdcall, ...gcsafe, raises: [].}
- Source Edit
WSAPROC_CONNECTEX = proc (s: SocketHandle; name: ptr SockAddr; namelen: cint; lpSendBuffer: pointer; dwSendDataLength: DWORD; lpdwBytesSent: ptr DWORD; lpOverlapped: POVERLAPPED): bool {. stdcall, ...gcsafe, raises: [].}
- Source Edit
WSAPROC_GETACCEPTEXSOCKADDRS = proc (lpOutputBuffer: pointer; dwReceiveDataLength: DWORD; dwLocalAddressLength: DWORD; dwRemoteAddressLength: DWORD; LocalSockaddr: ptr PSockAddr; LocalSockaddrLength: ptr cint; RemoteSockaddr: ptr PSockAddr; RemoteSockaddrLength: ptr cint) {.stdcall, ...gcsafe, raises: [].}
- Source Edit
Vars
Consts
ERROR_FILE_NOT_FOUND = 2
- https://docs.microsoft.com/en-us/windows/win32/debug/system-error-codes--0-499- Source Edit
Procs
proc `==`(x, y: SocketHandle): bool {.borrow, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc accept(s: SocketHandle; a: ptr SockAddr; addrlen: ptr SockLen): SocketHandle {. stdcall, importc: "accept", dynlib: ws2dll, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc allocateAndInitializeSid(pIdentifierAuthority: ptr SID_IDENTIFIER_AUTHORITY; nSubAuthorityCount: BYTE; nSubAuthority0: DWORD; nSubAuthority1: DWORD; nSubAuthority2: DWORD; nSubAuthority3: DWORD; nSubAuthority4: DWORD; nSubAuthority5: DWORD; nSubAuthority6: DWORD; nSubAuthority7: DWORD; pSid: ptr PSID): WINBOOL {. stdcall, dynlib: "Advapi32", importc: "AllocateAndInitializeSid", ...raises: [], tags: [], forbids: [].}
- Source Edit
proc closesocket(s: SocketHandle): cint {.stdcall, importc: "closesocket", dynlib: ws2dll, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc copyFileW(lpExistingFileName, lpNewFileName: WideCString; bFailIfExists: WINBOOL): WINBOOL {.importc: "CopyFileW", stdcall, dynlib: "kernel32", sideEffect, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc createDirectoryW(pathName: WideCString; security: pointer = nil): int32 {. importc: "CreateDirectoryW", dynlib: "kernel32", stdcall, sideEffect, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc createHardLinkW(lpFileName, lpExistingFileName: WideCString; security: pointer = nil): int32 {. importc: "CreateHardLinkW", dynlib: "kernel32", stdcall, sideEffect, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc createNamedPipe(lpName: WideCString; dwOpenMode, dwPipeMode, nMaxInstances, nOutBufferSize, nInBufferSize, nDefaultTimeOut: int32; lpSecurityAttributes: ptr SECURITY_ATTRIBUTES): Handle {. stdcall, dynlib: "kernel32", importc: "CreateNamedPipeW", sideEffect, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc createProcessW(lpApplicationName, lpCommandLine: WideCString; lpProcessAttributes: ptr SECURITY_ATTRIBUTES; lpThreadAttributes: ptr SECURITY_ATTRIBUTES; bInheritHandles: WINBOOL; dwCreationFlags: int32; lpEnvironment, lpCurrentDirectory: WideCString; lpStartupInfo: var STARTUPINFO; lpProcessInformation: var PROCESS_INFORMATION): WINBOOL {. stdcall, dynlib: "kernel32", importc: "CreateProcessW", sideEffect, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc createSymbolicLinkW(lpSymlinkFileName, lpTargetFileName: WideCString; flags: DWORD): int32 {.importc: "CreateSymbolicLinkW", dynlib: "kernel32", stdcall, sideEffect, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc deleteFileW(pathName: WideCString): int32 {.importc: "DeleteFileW", dynlib: "kernel32", stdcall, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc duplicateHandle(hSourceProcessHandle: Handle; hSourceHandle: Handle; hTargetProcessHandle: Handle; lpTargetHandle: ptr Handle; dwDesiredAccess: DWORD; bInheritHandle: WINBOOL; dwOptions: DWORD): WINBOOL {.stdcall, dynlib: "kernel32", importc: "DuplicateHandle", ...raises: [], tags: [], forbids: [].}
- Source Edit
proc FD_ISSET(socket: SocketHandle; set: var TFdSet): cint {....raises: [], tags: [], forbids: [].}
- Source Edit
proc FD_SET(socket: SocketHandle; s: var TFdSet) {....raises: [], tags: [], forbids: [].}
- Source Edit
proc findFirstFileW(lpFileName: WideCString; lpFindFileData: var WIN32_FIND_DATA): Handle {. stdcall, dynlib: "kernel32", importc: "FindFirstFileW", sideEffect, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc findNextFileW(hFindFile: Handle; lpFindFileData: var WIN32_FIND_DATA): int32 {. stdcall, dynlib: "kernel32", importc: "FindNextFileW", sideEffect, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc freeEnvironmentStringsW(para1: WideCString): int32 {.stdcall, dynlib: "kernel32", importc: "FreeEnvironmentStringsW", sideEffect, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc get_osfhandle(fd: FileHandle): Handle {.importc: "_get_osfhandle", header: "<io.h>", ...raises: [], tags: [], forbids: [].}
- Source Edit
proc getCommandLineW(): WideCString {.importc: "GetCommandLineW", stdcall, dynlib: "kernel32", sideEffect, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc getCurrentDirectoryW(nBufferLength: int32; lpBuffer: WideCString): int32 {. importc: "GetCurrentDirectoryW", dynlib: "kernel32", stdcall, sideEffect, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc getEnvironmentStringsW(): WideCString {.stdcall, dynlib: "kernel32", importc: "GetEnvironmentStringsW", sideEffect, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc getFileAttributesW(lpFileName: WideCString): int32 {.stdcall, dynlib: "kernel32", importc: "GetFileAttributesW", sideEffect, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc getFileInformationByHandle(hFile: Handle; lpFileInformation: ptr BY_HANDLE_FILE_INFORMATION): WINBOOL {. stdcall, dynlib: "kernel32", importc: "GetFileInformationByHandle", sideEffect, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc getFullPathNameW(lpFileName: WideCString; nBufferLength: int32; lpBuffer: WideCString; lpFilePart: var WideCString): int32 {. stdcall, dynlib: "kernel32", importc: "GetFullPathNameW", sideEffect, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc getQueuedCompletionStatus(CompletionPort: Handle; lpNumberOfBytesTransferred: PDWORD; lpCompletionKey: PULONG_PTR; lpOverlapped: ptr POVERLAPPED; dwMilliseconds: DWORD): WINBOOL {.stdcall, dynlib: "kernel32", importc: "GetQueuedCompletionStatus", ...raises: [], tags: [], forbids: [].}
- Source Edit
proc getVersionExA(lpVersionInfo: ptr OSVERSIONINFO): WINBOOL {.stdcall, dynlib: "kernel32", importc: "GetVersionExA", sideEffect, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc getVersionExW(lpVersionInfo: ptr OSVERSIONINFO): WINBOOL {.stdcall, dynlib: "kernel32", importc: "GetVersionExW", sideEffect, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc listen(s: SocketHandle; backlog: cint): cint {.stdcall, importc: "listen", dynlib: ws2dll, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc moveFileExW(lpExistingFileName, lpNewFileName: WideCString; flags: DWORD): WINBOOL {. importc: "MoveFileExW", stdcall, dynlib: "kernel32", sideEffect, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc moveFileW(lpExistingFileName, lpNewFileName: WideCString): WINBOOL {. importc: "MoveFileW", stdcall, dynlib: "kernel32", sideEffect, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc peekNamedPipe(hNamedPipe: Handle; lpBuffer: pointer = nil; nBufferSize: int32 = 0; lpBytesRead: ptr int32 = nil; lpTotalBytesAvail: ptr int32 = nil; lpBytesLeftThisMessage: ptr int32 = nil): bool {.stdcall, dynlib: "kernel32", importc: "PeekNamedPipe", ...raises: [], tags: [], forbids: [].}
- Source Edit
proc rdFileSize(f: WIN32_FIND_DATA): int64 {....raises: [], tags: [], forbids: [].}
- Source Edit
proc removeDirectoryW(lpPathName: WideCString): int32 {. importc: "RemoveDirectoryW", dynlib: "kernel32", stdcall, sideEffect, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc setCurrentDirectoryW(lpPathName: WideCString): int32 {. importc: "SetCurrentDirectoryW", dynlib: "kernel32", stdcall, sideEffect, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc setEnvironmentVariableW(lpName, lpValue: WideCString): int32 {.stdcall, dynlib: "kernel32", importc: "SetEnvironmentVariableW", sideEffect, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc setFileAttributesW(lpFileName: WideCString; dwFileAttributes: int32): WINBOOL {. stdcall, dynlib: "kernel32", importc: "SetFileAttributesW", sideEffect, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc setFileTime(hFile: Handle; lpCreationTime: LPFILETIME; lpLastAccessTime: LPFILETIME; lpLastWriteTime: LPFILETIME): WINBOOL {. stdcall, dynlib: "kernel32", importc: "SetFileTime", ...raises: [], tags: [], forbids: [].}
- Source Edit
proc shutdown(s: SocketHandle; how: cint): cint {.stdcall, importc: "shutdown", dynlib: ws2dll, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc socket(af, typ, protocol: cint): SocketHandle {.stdcall, importc: "socket", dynlib: ws2dll, ...raises: [], tags: [], forbids: [].}
- Source Edit
proc WSAIoctl(s: SocketHandle; dwIoControlCode: DWORD; lpvInBuffer: pointer; cbInBuffer: DWORD; lpvOutBuffer: pointer; cbOutBuffer: DWORD; lpcbBytesReturned: PDWORD; lpOverlapped: POVERLAPPED; lpCompletionRoutine: POVERLAPPED_COMPLETION_ROUTINE): cint {. stdcall, importc: "WSAIoctl", dynlib: "Ws2_32.dll", ...raises: [], tags: [], forbids: [].}
- Source Edit
proc WSARecv(s: SocketHandle; buf: ptr TWSABuf; bufCount: DWORD; bytesReceived, flags: PDWORD; lpOverlapped: POVERLAPPED; completionProc: POVERLAPPED_COMPLETION_ROUTINE): cint {.stdcall, importc: "WSARecv", dynlib: "Ws2_32.dll", ...raises: [], tags: [], forbids: [].}
- Source Edit
proc WSARecvFrom(s: SocketHandle; buf: ptr TWSABuf; bufCount: DWORD; bytesReceived: PDWORD; flags: PDWORD; name: ptr SockAddr; namelen: ptr cint; lpOverlapped: POVERLAPPED; completionProc: POVERLAPPED_COMPLETION_ROUTINE): cint {. stdcall, importc: "WSARecvFrom", dynlib: "Ws2_32.dll", ...raises: [], tags: [], forbids: [].}
- Source Edit
proc WSASend(s: SocketHandle; buf: ptr TWSABuf; bufCount: DWORD; bytesSent: PDWORD; flags: DWORD; lpOverlapped: POVERLAPPED; completionProc: POVERLAPPED_COMPLETION_ROUTINE): cint {.stdcall, importc: "WSASend", dynlib: "Ws2_32.dll", ...raises: [], tags: [], forbids: [].}
- Source Edit
proc WSASendTo(s: SocketHandle; buf: ptr TWSABuf; bufCount: DWORD; bytesSent: PDWORD; flags: DWORD; name: ptr SockAddr; namelen: cint; lpOverlapped: POVERLAPPED; completionProc: POVERLAPPED_COMPLETION_ROUTINE): cint {.stdcall, importc: "WSASendTo", dynlib: "Ws2_32.dll", ...raises: [], tags: [], forbids: [].}
- Source Edit