Skip to content

Commit d5ebb1f

Browse files
committed
Add MapViewOfFile3 WIN32 API
1 parent 130fd66 commit d5ebb1f

File tree

5 files changed

+70
-0
lines changed

5 files changed

+70
-0
lines changed

libc/nt/enum/memflags.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,7 @@
1616
#define kNtMemLargePages 0x20000000
1717
#define kNtMem4mbPages 0x80000000
1818

19+
#define kNtMemReplacePlaceholder 0x00004000
20+
#define kNtMemLargePages 0x20000000
21+
1922
#endif /* COSMOPOLITAN_LIBC_NT_ENUM_MEMFLAGS_H_ */

libc/nt/kernel32/MapViewOfFile3.S

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#include "libc/nt/codegen.h"
2+
.imp kernel32,__imp_MapViewOfFile3,MapViewOfFile3
3+
4+
.text.windows
5+
.ftrace1
6+
MapViewOfFile3:
7+
.ftrace2
8+
#ifdef __x86_64__
9+
push %rbp
10+
mov %rsp,%rbp
11+
mov __imp_MapViewOfFile3(%rip),%rax
12+
jmp __sysv2nt10
13+
#elif defined(__aarch64__)
14+
mov x0,#0
15+
ret
16+
#endif
17+
.endfn MapViewOfFile3,globl
18+
.previous

libc/nt/master.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@ imp 'LoadResource' LoadResource kernel32 2
203203
imp 'LocalFree' LocalFree kernel32 1
204204
imp 'LockFile' LockFile kernel32 5
205205
imp 'LockResource' LockResource kernel32 1
206+
imp 'MapViewOfFile3' MapViewOfFile3 kernel32 9
206207
imp 'MoveFile' MoveFileW kernel32 2
207208
imp 'MultiByteToWideChar' MultiByteToWideChar kernel32 6
208209
imp 'OfferVirtualMemory' OfferVirtualMemory kernel32 3

libc/nt/memory.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#ifndef COSMOPOLITAN_LIBC_NT_MEMORY_H_
22
#define COSMOPOLITAN_LIBC_NT_MEMORY_H_
3+
#include "libc/nt/struct/memextendedparameter.h"
34
#include "libc/nt/struct/memorybasicinformation.h"
45
#include "libc/nt/struct/memoryrangeentry.h"
56
#include "libc/nt/struct/securityattributes.h"
@@ -82,6 +83,19 @@ void *HeapReAlloc(int64_t hHeap, uint32_t dwFlags, void *lpMem,
8283
void *GlobalAlloc(uint32_t uFlags, uint64_t dwBytes) __wur;
8384
void *GlobalFree(void *hMem);
8485

86+
/**
87+
* @param AllocationType
88+
* - kNtMemReserve
89+
* - kNtMemReplacePlaceholder
90+
* - kNtMemLargePages
91+
*/
92+
void *MapViewOfFile3(
93+
intptr_t FileMapping, intptr_t Process, void *opt_BaseAddress,
94+
uint64_t Offset, size_t ViewSize, unsigned AllocationType,
95+
unsigned PageProtection,
96+
struct NtMemExtendedParameter *in_out_opt_ExtendedParameters,
97+
unsigned ParameterCount);
98+
8599
#if ShouldUseMsabiAttribute()
86100
#include "libc/nt/thunk/memory.inc"
87101
#endif /* ShouldUseMsabiAttribute() */

libc/nt/struct/memextendedparameter.h

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#ifndef COSMOPOLITAN_LIBC_NT_STRUCT_MEMEXTENDEDPARAMETER_H_
2+
#define COSMOPOLITAN_LIBC_NT_STRUCT_MEMEXTENDEDPARAMETER_H_
3+
4+
#define kNtMemExtendedParameterTypeBits 8
5+
6+
#define kNtMemExtendedParameterInvalidType 0
7+
#define kNtMemExtendedParameterAddressRequirements 1
8+
#define kNtMemExtendedParameterNumaNode 2
9+
#define kNtMemExtendedParameterPartitionHandle 3
10+
#define kNtMemExtendedParameterUserPhysicalHandle 4
11+
#define kNtMemExtendedParameterAttributeFlags 5
12+
#define kNtMemExtendedParameterMax 6
13+
14+
#define kNtMemExtendedParameterGraphics 0x00000001
15+
#define kNtMemExtendedParameterNonpaged 0x00000002
16+
#define kNtMemExtendedParameterZeroPagesOptional 0x00000004
17+
#define kNtMemExtendedParameterNonpagedLarge 0x00000008
18+
#define kNtMemExtendedParameterNonpagedHuge 0x00000010
19+
20+
struct NtMemExtendedParameter {
21+
struct {
22+
uint64_t Type : kNtMemExtendedParameterTypeBits;
23+
uint64_t Reserved : 64 - kNtMemExtendedParameterTypeBits;
24+
} DUMMYSTRUCTNAME;
25+
union {
26+
uint64_t ULong64;
27+
void *Pointer;
28+
size_t Size;
29+
intptr_t Handle;
30+
unsigned ULong;
31+
} DUMMYUNIONNAME;
32+
};
33+
34+
#endif /* COSMOPOLITAN_LIBC_NT_STRUCT_MEMEXTENDEDPARAMETER_H_ */

0 commit comments

Comments
 (0)