mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-06-27 23:08:31 +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 kNtMemLargePages 0x20000000
|
||||||
#define kNtMem4mbPages 0x80000000
|
#define kNtMem4mbPages 0x80000000
|
||||||
|
|
||||||
|
#define kNtMemReplacePlaceholder 0x00004000
|
||||||
|
#define kNtMemLargePages 0x20000000
|
||||||
|
|
||||||
#endif /* COSMOPOLITAN_LIBC_NT_ENUM_MEMFLAGS_H_ */
|
#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 'LocalFree' LocalFree kernel32 1
|
||||||
imp 'LockFile' LockFile kernel32 5
|
imp 'LockFile' LockFile kernel32 5
|
||||||
imp 'LockResource' LockResource kernel32 1
|
imp 'LockResource' LockResource kernel32 1
|
||||||
|
imp 'MapViewOfFile3' MapViewOfFile3 kernel32 9
|
||||||
imp 'MoveFile' MoveFileW kernel32 2
|
imp 'MoveFile' MoveFileW kernel32 2
|
||||||
imp 'MultiByteToWideChar' MultiByteToWideChar kernel32 6
|
imp 'MultiByteToWideChar' MultiByteToWideChar kernel32 6
|
||||||
imp 'OfferVirtualMemory' OfferVirtualMemory kernel32 3
|
imp 'OfferVirtualMemory' OfferVirtualMemory kernel32 3
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#ifndef COSMOPOLITAN_LIBC_NT_MEMORY_H_
|
#ifndef COSMOPOLITAN_LIBC_NT_MEMORY_H_
|
||||||
#define 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/memorybasicinformation.h"
|
||||||
#include "libc/nt/struct/memoryrangeentry.h"
|
#include "libc/nt/struct/memoryrangeentry.h"
|
||||||
#include "libc/nt/struct/securityattributes.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 *GlobalAlloc(uint32_t uFlags, uint64_t dwBytes) __wur;
|
||||||
void *GlobalFree(void *hMem);
|
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()
|
#if ShouldUseMsabiAttribute()
|
||||||
#include "libc/nt/thunk/memory.inc"
|
#include "libc/nt/thunk/memory.inc"
|
||||||
#endif /* ShouldUseMsabiAttribute() */
|
#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…
Add table
Add a link
Reference in a new issue