| 1431 | impl PyMmap { |
| 1432 | #[cfg(windows)] |
| 1433 | fn create_mmap_windows( |
| 1434 | handle: HANDLE, |
| 1435 | offset: i64, |
| 1436 | size: usize, |
| 1437 | access: &AccessMode, |
| 1438 | ) -> io::Result<MmapObj> { |
| 1439 | use std::fs::File; |
| 1440 | |
| 1441 | // Create an owned handle wrapper for memmap2 |
| 1442 | // We need to create a File from the handle |
| 1443 | let file = unsafe { File::from_raw_handle(handle as RawHandle) }; |
| 1444 | |
| 1445 | let mut mmap_opt = MmapOptions::new(); |
| 1446 | let mmap_opt = mmap_opt.offset(offset as u64).len(size); |
| 1447 | |
| 1448 | let result = match access { |
| 1449 | AccessMode::Default | AccessMode::Write => { |
| 1450 | unsafe { mmap_opt.map_mut(&file) }.map(MmapObj::Write) |
| 1451 | } |
| 1452 | AccessMode::Read => unsafe { mmap_opt.map(&file) }.map(MmapObj::Read), |
| 1453 | AccessMode::Copy => unsafe { mmap_opt.map_copy(&file) }.map(MmapObj::Write), |
| 1454 | }; |
| 1455 | |
| 1456 | // Don't close the file handle - we're borrowing it |
| 1457 | core::mem::forget(file); |
| 1458 | |
| 1459 | result |
| 1460 | } |
| 1461 | |
| 1462 | /// Try to restore mmap after a failed resize operation. |
| 1463 | /// Returns true if restoration succeeded, false otherwise. |