Add Wine-internal allocation type MEM_SYSTEM for VirtualAlloc to
register external mappings (like video frame buffers).
This commit is contained in:
parent
f61d7e0a24
commit
bda3e66201
|
@ -909,6 +909,9 @@ typedef DWORD (WINAPI *LPPROGRESS_ROUTINE)(LARGE_INTEGER, LARGE_INTEGER, LARGE_I
|
||||||
#define MEM_PRIVATE 0x00020000
|
#define MEM_PRIVATE 0x00020000
|
||||||
#define MEM_MAPPED 0x00040000
|
#define MEM_MAPPED 0x00040000
|
||||||
#define MEM_TOP_DOWN 0x00100000
|
#define MEM_TOP_DOWN 0x00100000
|
||||||
|
#ifdef __WINE__
|
||||||
|
#define MEM_SYSTEM 0x80000000
|
||||||
|
#endif
|
||||||
|
|
||||||
#define SEC_FILE 0x00800000
|
#define SEC_FILE 0x00800000
|
||||||
#define SEC_IMAGE 0x01000000
|
#define SEC_IMAGE 0x01000000
|
||||||
|
|
|
@ -256,6 +256,7 @@ static FILE_VIEW *VIRTUAL_CreateView( UINT base, UINT size, UINT offset,
|
||||||
static void VIRTUAL_DeleteView(
|
static void VIRTUAL_DeleteView(
|
||||||
FILE_VIEW *view /* [in] View */
|
FILE_VIEW *view /* [in] View */
|
||||||
) {
|
) {
|
||||||
|
if (!(view->flags & VFLAG_SYSTEM))
|
||||||
FILE_munmap( (void *)view->base, 0, view->size );
|
FILE_munmap( (void *)view->base, 0, view->size );
|
||||||
if (view->next) view->next->prev = view->prev;
|
if (view->next) view->next->prev = view->prev;
|
||||||
if (view->prev) view->prev->next = view->next;
|
if (view->prev) view->prev->next = view->next;
|
||||||
|
@ -598,13 +599,13 @@ LPVOID WINAPI VirtualAlloc(
|
||||||
}
|
}
|
||||||
/* Compute the protection flags */
|
/* Compute the protection flags */
|
||||||
|
|
||||||
if (!(type & (MEM_COMMIT | MEM_RESERVE)) ||
|
if (!(type & (MEM_COMMIT | MEM_RESERVE | MEM_SYSTEM)) ||
|
||||||
(type & ~(MEM_COMMIT | MEM_RESERVE)))
|
(type & ~(MEM_COMMIT | MEM_RESERVE | MEM_SYSTEM)))
|
||||||
{
|
{
|
||||||
SetLastError( ERROR_INVALID_PARAMETER );
|
SetLastError( ERROR_INVALID_PARAMETER );
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (type & MEM_COMMIT)
|
if (type & (MEM_COMMIT | MEM_SYSTEM))
|
||||||
vprot = VIRTUAL_GetProt( protect ) | VPROT_COMMITTED;
|
vprot = VIRTUAL_GetProt( protect ) | VPROT_COMMITTED;
|
||||||
else vprot = 0;
|
else vprot = 0;
|
||||||
|
|
||||||
|
@ -613,6 +614,9 @@ LPVOID WINAPI VirtualAlloc(
|
||||||
if ((type & MEM_RESERVE) || !base)
|
if ((type & MEM_RESERVE) || !base)
|
||||||
{
|
{
|
||||||
view_size = size + (base ? 0 : granularity_mask + 1);
|
view_size = size + (base ? 0 : granularity_mask + 1);
|
||||||
|
if (type & MEM_SYSTEM)
|
||||||
|
ptr = base;
|
||||||
|
else
|
||||||
ptr = (UINT)FILE_dommap( -1, (LPVOID)base, 0, view_size, 0, 0,
|
ptr = (UINT)FILE_dommap( -1, (LPVOID)base, 0, view_size, 0, 0,
|
||||||
VIRTUAL_GetUnixProt( vprot ), MAP_PRIVATE );
|
VIRTUAL_GetUnixProt( vprot ), MAP_PRIVATE );
|
||||||
if (ptr == (UINT)-1)
|
if (ptr == (UINT)-1)
|
||||||
|
@ -642,7 +646,8 @@ LPVOID WINAPI VirtualAlloc(
|
||||||
SetLastError( ERROR_INVALID_ADDRESS );
|
SetLastError( ERROR_INVALID_ADDRESS );
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (!(view = VIRTUAL_CreateView( ptr, size, 0, 0, vprot, -1 )))
|
if (!(view = VIRTUAL_CreateView( ptr, size, 0, (type & MEM_SYSTEM) ?
|
||||||
|
VFLAG_SYSTEM : 0, vprot, -1 )))
|
||||||
{
|
{
|
||||||
FILE_munmap( (void *)ptr, 0, size );
|
FILE_munmap( (void *)ptr, 0, size );
|
||||||
SetLastError( ERROR_OUTOFMEMORY );
|
SetLastError( ERROR_OUTOFMEMORY );
|
||||||
|
|
Loading…
Reference in New Issue