mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-02-07 06:53:33 +00:00
Add MapViewOfFile3 WIN32 API
This commit is contained in:
parent
130fd66f9e
commit
d5ebb1fa5b
5 changed files with 70 additions and 0 deletions
|
@ -16,4 +16,7 @@
|
|||
#define kNtMemLargePages 0x20000000
|
||||
#define kNtMem4mbPages 0x80000000
|
||||
|
||||
#define kNtMemReplacePlaceholder 0x00004000
|
||||
#define kNtMemLargePages 0x20000000
|
||||
|
||||
#endif /* COSMOPOLITAN_LIBC_NT_ENUM_MEMFLAGS_H_ */
|
||||
|
|
18
libc/nt/kernel32/MapViewOfFile3.S
Normal file
18
libc/nt/kernel32/MapViewOfFile3.S
Normal file
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
@ -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() */
|
||||
|
|
34
libc/nt/struct/memextendedparameter.h
Normal file
34
libc/nt/struct/memextendedparameter.h
Normal file
|
@ -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_ */
|
Loading…
Reference in a new issue