Download Latest Version psx-src-1.1.4.zip (392.3 kB)
Email in envelope

Get an email when there's a new version of WINNT POSIX

Home / OldFiles
Name Modified Size InfoDownloads / Week
Parent folder
psx-src-1.1.3.zip 2002-12-02 384.8 kB
psx-bin-.1.1.3.zip 2002-12-02 794.5 kB
psx-src-1.1.2.zip 2002-12-01 389.3 kB
psx-bin-1.1.2.zip 2002-12-01 796.5 kB
psx-src-1.1.1.zip 2002-10-22 372.2 kB
psx-bin-1.1.1.zip 2002-10-22 904.8 kB
psx-src-1.1.0.zip 2002-10-16 373.4 kB
psx-bin-1.1.0.zip 2002-10-16 884.0 kB
psx-src-1.0.6.zip 2002-08-06 406.2 kB
psx-bin-1.0.6.zip 2002-08-06 650.4 kB
psx-src-1.0.5.zip 2002-08-04 405.7 kB
psx-bin-1.0.5.zip 2002-08-04 650.8 kB
psx-src-1.0.4.zip 2002-07-25 396.6 kB
psx-bin-1.0.4.zip 2002-07-25 612.7 kB
psx-src-1.0.3.zip 2002-07-23 393.1 kB
psx-bin-1.0.3.zip 2002-07-23 610.7 kB
psx-src-1.0.2.zip 2002-07-22 392.6 kB
psx-bin-1.0.2.zip 2002-07-22 608.2 kB
psx-src-1.0.1.zip 2002-07-21 396.9 kB
psx-bin-1.0.1.zip 2002-07-21 597.5 kB
psx-bin-1.2.2.zip 2002-07-21 48.6 kB
psx-src-1.2.1.zip 2002-07-20 386.0 kB
psx-bin-1.2.1.zip 2002-07-20 590.2 kB
psx-src-1.2.zip 2002-07-18 382.1 kB
psx-bin-1.2.zip 2002-07-18 593.2 kB
psx-src-1.1.zip 2002-07-02 374.9 kB
psx-bin-1.1.zip 2002-07-02 599.8 kB
readme.txt 2002-06-25 7.5 kB
psx-src-1.0.zip 2002-06-23 373.1 kB
psx-bin-1.0.zip 2002-06-23 552.0 kB
psx-src.zip 2002-06-20 369.3 kB
psx-bin.zip 2002-06-20 545.4 kB
psxsys-src.zip 2002-06-17 358.0 kB
psxsys-bin.zip 2002-06-17 601.4 kB
psxsys.zip 2002-06-05 167.3 kB
psx-readme.txt 2002-06-05 1.0 kB
psxdll.zip 2002-06-05 289.9 kB
posix-src.zip 2002-06-05 218.7 kB
include.zip 2002-06-05 122.7 kB
psxssys-bin.zip 2002-06-04 79.5 kB
psx-include.zip 2002-06-04 136.7 kB
Totals: 41 Items   17.8 MB 2
    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