Skip to content

Commit

Permalink
Add MapViewOfFile3 WIN32 API
Browse files Browse the repository at this point in the history
  • Loading branch information
jart committed May 4, 2024
1 parent 130fd66 commit d5ebb1f
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 0 deletions.
3 changes: 3 additions & 0 deletions libc/nt/enum/memflags.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,7 @@
#define kNtMemLargePages 0x20000000
#define kNtMem4mbPages 0x80000000

#define kNtMemReplacePlaceholder 0x00004000
#define kNtMemLargePages 0x20000000

#endif /* COSMOPOLITAN_LIBC_NT_ENUM_MEMFLAGS_H_ */
18 changes: 18 additions & 0 deletions libc/nt/kernel32/MapViewOfFile3.S
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#include "libc/nt/codegen.h"
.imp kernel32,__imp_MapViewOfFile3,MapViewOfFile3

.text.windows
.ftrace1
MapViewOfFile3:
.ftrace2
#ifdef __x86_64__
push %rbp
mov %rsp,%rbp
mov __imp_MapViewOfFile3(%rip),%rax
jmp __sysv2nt10
#elif defined(__aarch64__)
mov x0,#0
ret
#endif
.endfn MapViewOfFile3,globl
.previous
1 change: 1 addition & 0 deletions libc/nt/master.sh
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,7 @@ imp 'LoadResource' LoadResource kernel32 2
imp 'LocalFree' LocalFree kernel32 1
imp 'LockFile' LockFile kernel32 5
imp 'LockResource' LockResource kernel32 1
imp 'MapViewOfFile3' MapViewOfFile3 kernel32 9
imp 'MoveFile' MoveFileW kernel32 2
imp 'MultiByteToWideChar' MultiByteToWideChar kernel32 6
imp 'OfferVirtualMemory' OfferVirtualMemory kernel32 3
Expand Down
14 changes: 14 additions & 0 deletions libc/nt/memory.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#ifndef COSMOPOLITAN_LIBC_NT_MEMORY_H_
#define COSMOPOLITAN_LIBC_NT_MEMORY_H_
#include "libc/nt/struct/memextendedparameter.h"
#include "libc/nt/struct/memorybasicinformation.h"
#include "libc/nt/struct/memoryrangeentry.h"
#include "libc/nt/struct/securityattributes.h"
Expand Down Expand Up @@ -82,6 +83,19 @@ void *HeapReAlloc(int64_t hHeap, uint32_t dwFlags, void *lpMem,
void *GlobalAlloc(uint32_t uFlags, uint64_t dwBytes) __wur;
void *GlobalFree(void *hMem);

/**
* @param AllocationType
* - kNtMemReserve
* - kNtMemReplacePlaceholder
* - kNtMemLargePages
*/
void *MapViewOfFile3(
intptr_t FileMapping, intptr_t Process, void *opt_BaseAddress,
uint64_t Offset, size_t ViewSize, unsigned AllocationType,
unsigned PageProtection,
struct NtMemExtendedParameter *in_out_opt_ExtendedParameters,
unsigned ParameterCount);

#if ShouldUseMsabiAttribute()
#include "libc/nt/thunk/memory.inc"
#endif /* ShouldUseMsabiAttribute() */
Expand Down
34 changes: 34 additions & 0 deletions libc/nt/struct/memextendedparameter.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#ifndef COSMOPOLITAN_LIBC_NT_STRUCT_MEMEXTENDEDPARAMETER_H_
#define COSMOPOLITAN_LIBC_NT_STRUCT_MEMEXTENDEDPARAMETER_H_

#define kNtMemExtendedParameterTypeBits 8

#define kNtMemExtendedParameterInvalidType 0
#define kNtMemExtendedParameterAddressRequirements 1
#define kNtMemExtendedParameterNumaNode 2
#define kNtMemExtendedParameterPartitionHandle 3
#define kNtMemExtendedParameterUserPhysicalHandle 4
#define kNtMemExtendedParameterAttributeFlags 5
#define kNtMemExtendedParameterMax 6

#define kNtMemExtendedParameterGraphics 0x00000001
#define kNtMemExtendedParameterNonpaged 0x00000002
#define kNtMemExtendedParameterZeroPagesOptional 0x00000004
#define kNtMemExtendedParameterNonpagedLarge 0x00000008
#define kNtMemExtendedParameterNonpagedHuge 0x00000010

struct NtMemExtendedParameter {
struct {
uint64_t Type : kNtMemExtendedParameterTypeBits;
uint64_t Reserved : 64 - kNtMemExtendedParameterTypeBits;
} DUMMYSTRUCTNAME;
union {
uint64_t ULong64;
void *Pointer;
size_t Size;
intptr_t Handle;
unsigned ULong;
} DUMMYUNIONNAME;
};

#endif /* COSMOPOLITAN_LIBC_NT_STRUCT_MEMEXTENDEDPARAMETER_H_ */

0 comments on commit d5ebb1f

Please sign in to comment.