2008-05-15 06:20:42 -04:00
|
|
|
USING: alien alien.c-types arrays destructors generic io.mmap
|
2008-12-14 21:03:00 -05:00
|
|
|
io.ports io.backend.windows io.files.windows io.backend.windows.privileges
|
2008-09-05 20:29:14 -04:00
|
|
|
kernel libc math math.bitwise namespaces quotations sequences
|
2008-05-15 06:20:42 -04:00
|
|
|
windows windows.advapi32 windows.kernel32 io.backend system
|
2009-04-30 11:25:59 -04:00
|
|
|
accessors locals windows.errors ;
|
2008-12-14 21:03:00 -05:00
|
|
|
IN: io.mmap.windows
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-06-09 17:27:52 -04:00
|
|
|
: create-file-mapping ( hFile lpAttributes flProtect dwMaximumSizeHigh dwMaximumSizeLow lpName -- HANDLE )
|
2008-05-15 06:20:42 -04:00
|
|
|
CreateFileMapping [ win32-error=0/f ] keep <win32-handle> ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-06-09 17:27:52 -04:00
|
|
|
: map-view-of-file ( hFileMappingObject dwDesiredAccess dwFileOffsetHigh dwFileOffsetLow dwNumberOfBytesToMap -- HANDLE )
|
2008-05-15 06:20:42 -04:00
|
|
|
MapViewOfFile [ win32-error=0/f ] keep ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-05-15 06:20:42 -04:00
|
|
|
:: mmap-open ( path length access-mode create-mode protect access -- handle handle address )
|
2009-04-30 11:25:59 -04:00
|
|
|
[let | lo [ length 32 bits ]
|
|
|
|
hi [ length -32 shift 32 bits ] |
|
2008-05-15 06:20:42 -04:00
|
|
|
{ "SeCreateGlobalPrivilege" "SeLockMemoryPrivilege" } [
|
|
|
|
path access-mode create-mode 0 open-file |dispose
|
|
|
|
dup handle>> f protect hi lo f create-file-mapping |dispose
|
|
|
|
dup handle>> access 0 0 0 map-view-of-file
|
|
|
|
] with-privileges
|
|
|
|
] ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-05-15 06:20:42 -04:00
|
|
|
TUPLE: win32-mapped-file file mapping ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-05-15 06:20:42 -04:00
|
|
|
M: win32-mapped-file dispose
|
|
|
|
[ file>> dispose ] [ mapping>> dispose ] bi ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-05-15 06:20:42 -04:00
|
|
|
C: <win32-mapped-file> win32-mapped-file
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2009-04-25 20:22:00 -04:00
|
|
|
M: windows (mapped-file-r/w)
|
2007-09-20 18:09:08 -04:00
|
|
|
[
|
2008-05-15 06:20:42 -04:00
|
|
|
{ GENERIC_WRITE GENERIC_READ } flags
|
2007-11-17 23:06:34 -05:00
|
|
|
OPEN_ALWAYS
|
2008-05-15 06:20:42 -04:00
|
|
|
{ PAGE_READWRITE SEC_COMMIT } flags
|
2007-11-17 23:06:34 -05:00
|
|
|
FILE_MAP_ALL_ACCESS mmap-open
|
2008-05-15 06:20:42 -04:00
|
|
|
-rot <win32-mapped-file>
|
2007-09-20 18:09:08 -04:00
|
|
|
] with-destructors ;
|
|
|
|
|
2009-04-25 20:22:00 -04:00
|
|
|
M: windows (mapped-file-reader)
|
|
|
|
[
|
|
|
|
GENERIC_READ
|
|
|
|
OPEN_ALWAYS
|
|
|
|
{ PAGE_READONLY SEC_COMMIT } flags
|
|
|
|
FILE_MAP_READ mmap-open
|
|
|
|
-rot <win32-mapped-file>
|
|
|
|
] with-destructors ;
|
|
|
|
|
2008-04-02 21:09:56 -04:00
|
|
|
M: windows close-mapped-file ( mapped-file -- )
|
2007-09-20 18:09:08 -04:00
|
|
|
[
|
2008-05-15 06:20:42 -04:00
|
|
|
[ handle>> &dispose drop ]
|
|
|
|
[ address>> UnmapViewOfFile win32-error=0/f ] bi
|
2007-09-20 18:09:08 -04:00
|
|
|
] with-destructors ;
|