Download Latest Version (392.3 kB) Get Updates
Home / OldFiles
Name Modified Size InfoDownloads / Week
Parent folder 2002-12-02 384.8 kB 2002-12-02 794.5 kB 2002-12-01 389.3 kB 2002-12-01 796.5 kB 2002-10-22 372.2 kB 2002-10-22 904.8 kB 2002-10-16 373.4 kB 2002-10-16 884.0 kB 2002-08-06 406.2 kB 2002-08-06 650.4 kB 2002-08-04 405.7 kB 2002-08-04 650.8 kB 2002-07-25 396.6 kB 2002-07-25 612.7 kB 2002-07-23 393.1 kB 2002-07-23 610.7 kB 2002-07-22 392.6 kB 2002-07-22 608.2 kB 2002-07-21 396.9 kB 2002-07-21 597.5 kB 2002-07-21 48.6 kB 2002-07-20 386.0 kB 2002-07-20 590.2 kB 2002-07-18 382.1 kB 2002-07-18 593.2 kB 2002-07-02 374.9 kB 2002-07-02 599.8 kB
readme.txt 2002-06-25 7.5 kB 2002-06-23 373.1 kB 2002-06-23 552.0 kB 2002-06-20 369.3 kB 2002-06-20 545.4 kB 2002-06-17 358.0 kB 2002-06-17 601.4 kB 2002-06-05 167.3 kB
psx-readme.txt 2002-06-05 1.0 kB 2002-06-05 289.9 kB 2002-06-05 218.7 kB 2002-06-05 122.7 kB 2002-06-04 79.5 kB 2002-06-04 136.7 kB
Totals: 41 Items   17.8 MB 1
Fully compatible and efficient POSIX library for Microsoft Windows NT box (currently W2K-XP and probably later), like Interix. Windows NT generally allowed to implement POSIX API, but all existing implementations are could divided into two parts: * Microsoft (posix.exe, psxss.exe, psxdll.dll not distributed with W2K and later) and extended Interix, but still single threaded, only console and not integrated with Win32. * From others developers (Win 9X support too). All of them implemented at the top of Win32 API and so not fully compatible and efficient. This is fully integrated with Win32, except SEH or any other installed subsystems and efficient and compatible library. Now implemented: threads, mutexes, condvars, spins, rwlocks, barrier, signals (all functions from last specification including shared locks, shared lock objects do not automatically released when process die), except sigstack, sigaltstack return ENOSYS and sched_rr_get_interval return ENOTSUP; semaphores. Mainly implemented as syscalls in the driver. Syscalls are exported like general NT syscall throw the 4s NT syscall table (KeAddSystemServiceTable), not throw IOCTL. Also implemented SMP heap (malloc, free, ...), some string functions (faster then from msvcrt.dll/ntdll.dll), X86 disassembler (tested only generic mode), XSI-conformant clock, setitimer, getitimer, alarm, timer_create, timer_delete, timer_getoverrun, timer_settime, timer_gettime. Many of them implemented using undocumented functions and structures. Signals delivered not only when THREAD IN THE USER mode (usually used suspend + get + modify + set context + resume thread scheme, I use normal kernel mode APC + setup callback), when in the kernel mode too. Interrupted only POSIX syscalls that can be interrupted, others are always restarted. But not delivered when thread suspended. Asynchronous signals are implemented throw normal kernel mode APC (KeInsertQueueApc) * Previous mode was kernel (thread call any syscall: WaitForSingleObject (NtWaitForSingleObject), ReadFile (NtReadFile), or other) - user mode callback (KeUserModeCallback). * Previous mode was user mode - setup handler and context from saved in the kernel stack KTRAP_FRAME. For working exceptions in POSIX manner driver modify some system vectors (working fine), so SEH hardware exceptions only for the POSIX task don't work (difference from Interix). To handle its use signal handlers instead. Use NtPsxSetPosixSignalMode to set task POSIX manner hardware exception processing. You can use any other Win32 API. If NtPsxSetPosixSignalMode is not used task is general Win32 (or something else) application. Also some problems may occur when debugging signal handler and thread was in the kernel mode before signal arrived (for example windows debugger not responded later under XP :-( ). To install unzip and run setup.exe, psxsys.sys must be in the same path and will be started from this place every time. EXPORT LIST: NtPsxCreateThread NtPsxExitThread NtPsxJoinThread NtPsxDetachThread NtPsxThreadSetScheduler NtPsxThreadGetScheduler NtPsxThreadSetCancelState NtPsxThreadGetCancelState NtPsxThreadSetCancelType NtPsxThreadGetCancelType NtPsxCancelThread NtPsxThreadTestCancel NtPsxWaitThread NtPsxTimedWaitThread NtPsxUnWaitThread NtPsxKillThread NtPsxCreateCondVar NtPsxDestroyCondVar NtPsxWaitCondVar NtPsxTimedWaitCondVar NtPsxSignalCondVar NtPsxBroadCastCondVar NtPsxCreateWaitObj NtPsxDestroyWaitObj NtPsxWaitObject NtPsxTimedWaitObject NtPsxSignalWaitObj NtPsxKill NtPsxSignalMask NtPsxHoldSignal NtPsxSignalAction NtPsxPause NtPsxPending NtPsxWaitSignal NtPsxSignalVector NtPsxClock NtPsxGetClockResolution NtPsxGetKUTime NtPsxIntervalTimer NtPsxGet86Vector NtPsxGet86PageEntry NtPsxGet86VAD NtIx86Disassemble NtPsxSetScheduler NtPsxGetScheduler NtPsxCreateBarrier NtPsxDestroyBarrier NtPsxWaitBarrier NtPsxCreateWaitObjEx NtPsxDestroyWaitObjEx NtPsxGetWaitObjValue NtPsxThreadGetKUTime RtHeapCreate RtHeapDestroy RtHeapAlloc RtHeapAllocDbg RtHeapFree RtHeapFreeDbg RtHeapReAlloc RtHeapReAllocDbg RtHeapCompact RtHeapUsableSize RtHeapUsableSizeDbg RtHeapWalk RtHeapUsageDump RtAllocEx RtAllocExDbg RtFreeEx RtFreeExDbg RtReAllocEx RtReAllocExDbg RtCompact RtUsableSizeEx RtUsableSizeExDbg RtUsageDump malloc malloc_dbg calloc calloc_dbg memalign memalign_dbg valloc valloc_dbg pvalloc pvalloc_dbg free cfree = free free_dbg realloc realloc_dbg malloc_trim malloc_usable_size malloc_usable_size_dbg memcpy memmove bcopy memccpy memset bzero memcmp bcmp memchr rawmemchr memrchr strlen strnlen strcmp strncmp strcpy strncpy strcat strncat strchr strrchr wmemcpy wmemmove wmemccpy wmemset wmemcmp wmemchr wrawmemchr wmemrchr wcslen wcsnlen wcscmp wcsncmp wcscpy wcsncpy wcsncat wcscat wcschr wcsrchr _RtAssert sched_setparam sched_getparam sched_setscheduler sched_getscheduler sched_yield sched_get_priority_max sched_get_priority_min sched_rr_get_interval sigreturn sigismember sigaddset sigdelset sighold sigrelse sigprocmask pthread_sigmask pthread_kill kill sigaction sysv_signal signal ssignal bsd_signal killpg raise gsignal pause _sigpause sigpause sigblock sigsetmask siggetmask sigsuspend sigpending sigwait sigwaitinfo sigtimedwait sigqueue siginterrupt sigvec sigignore sigstack sigaltstack sigset sys_siglist sig_number psignal strsignal pthread_mutex_init pthread_mutex_destroy pthread_mutex_lock pthread_mutex_timedlock pthread_mutex_trylock pthread_mutex_unlock pthread_mutexattr_init pthread_mutexattr_destroy pthread_mutexattr_gettype pthread_mutexattr_settype pthread_mutexattr_getpshared pthread_mutexattr_setpshared pthread_mutexattr_getkind_np pthread_mutexattr_setkind_np pthread_spin_init pthread_spin_destroy pthread_spin_lock pthread_spin_unlock pthread_spin_trylock pthread_rwlock_init pthread_rwlock_destroy pthread_rwlock_wrlock pthread_rwlock_trywrlock pthread_rwlock_rdlock pthread_rwlock_tryrdlock pthread_rwlock_unlock __errnop __signgamp pthread_create pthread_self pthread_equal pthread_exit pthread_join pthread_detach pthread_setschedparam pthread_getschedparam pthread_getconcurrency pthread_setconcurrency pthread_yield pthread_key_create pthread_key_delete pthread_setspecific pthread_getspecific __rt_push_cleanup_buffer __rt_pop_cleanup_buffer pthread_once pthread_setcancelstate pthread_setcanceltype pthread_cancel pthread_testcancel pthread_allocate_stack_np pthread_attr_init pthread_attr_setdetachstate pthread_attr_getdetachstate pthread_attr_setschedparam pthread_attr_getschedparam pthread_attr_setschedpolicy pthread_attr_getschedpolicy pthread_attr_setinheritsched pthread_attr_getinheritsched pthread_attr_setscope pthread_attr_getscope pthread_attr_setguardsize pthread_attr_getguardsize pthread_attr_setstackaddr pthread_attr_getstackaddr pthread_attr_setstacksize pthread_attr_getstacksize pthread_attr_setstack pthread_attr_getstack pthread_getattr_np clock getitimer setitimer alarm timer_create timer_delete timer_getoverrun timer_settime timer_gettime pthread_barrier_init pthread_barrier_destroy pthread_barrier_wait pthread_barrierattr_init pthread_barrierattr_destroy pthread_barrierattr_getpshared pthread_barrierattr_setpshared
Source: readme.txt, updated 2002-06-25