factor/basis/io/mmap/windows/windows.factor

52 lines
1.7 KiB
Factor
Raw Normal View History

USING: accessors destructors windows.privileges
io.files.windows io.mmap io.mmap.private kernel literals locals
math math.bitwise system windows.errors windows.handles
windows.kernel32 ;
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 )
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 )
MapViewOfFile [ win32-error=0/f ] keep ;
2007-09-20 18:09:08 -04:00
:: mmap-open ( path length access-mode create-mode protect access -- handle handle address )
2009-10-27 22:50:31 -04:00
length 32 bits :> lo
length -32 shift 32 bits :> hi
{ "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
TUPLE: win32-mapped-file file mapping ;
2007-09-20 18:09:08 -04:00
M: win32-mapped-file dispose
[ file>> dispose ] [ mapping>> dispose ] bi ;
2007-09-20 18:09:08 -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
[
flags{ GENERIC_WRITE GENERIC_READ }
2007-11-17 23:06:34 -05:00
OPEN_ALWAYS
flags{ PAGE_READWRITE SEC_COMMIT }
2007-11-17 23:06:34 -05:00
FILE_MAP_ALL_ACCESS mmap-open
-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
flags{ PAGE_READONLY SEC_COMMIT }
2009-04-25 20:22:00 -04:00
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
[
[ handle>> &dispose drop ]
[ address>> UnmapViewOfFile win32-error=0/f ] bi
2007-09-20 18:09:08 -04:00
] with-destructors ;