source: trunk/src/win32k/k32/k32AllocMemEx.cpp@ 2823

Last change on this file since 2823 was 2823, checked in by bird, 26 years ago

Unfinised stuff! Don't work. Don't even compile!

File size: 3.9 KB
Line 
1/* $Id: k32AllocMemEx.cpp,v 1.2 2000-02-18 19:27:30 bird Exp $
2 *
3 * k32AllocMemEx - Equivalent to DosAllocMem, but this one
4 * uses the address in ppv.
5 *
6 * Copyright (c) 2000 knut st. osmundsen (knut.stange.osmundsen@pmsc.no)
7 *
8 * Project Odin Software License can be found in LICENSE.TXT
9 *
10 */
11
12
13/*******************************************************************************
14* Defined Constants And Macros *
15*******************************************************************************/
16#define INCL_DOSMEMMGR
17#define INCL_DOSERRORS
18#define INCL_OS2KRNL_VM
19
20#ifndef OBJ_SELMAPALL
21#define OBJ_SELMAPALL 0x00000800UL
22#endif
23
24
25/*******************************************************************************
26* Header Files *
27*******************************************************************************/
28#include <os2.h>
29#include "OS2Krnl.h"
30#include "k32.h"
31#include "options.h"
32#include "dev32.h"
33#include "log.h"
34
35
36/* nasty! These should be imported from the kernel later! */
37
38ULONG vmApiF0[] =
39{
40 0,
41 VMA_READ,
42 VMA_WRITE | VMA_READ,
43 VMA_WRITE | VMA_READ,
44 VMA_EXECUTE,
45 VMA_EXECUTE | VMA_READ,
46 VMA_WRITE | VMA_EXECUTE | VMA_READ,
47 VMA_WRITE | VMA_EXECUTE | VMA_READ,
48 VMA_GUARD,
49 VMA_READ | VMA_GUARD,
50 VMA_WRITE | VMA_READ | VMA_GUARD,
51 VMA_WRITE | VMA_READ | VMA_GUARD,
52 VMA_EXECUTE | VMA_GUARD,
53 VMA_EXECUTE | VMA_READ | VMA_GUARD,
54 VMA_WRITE | VMA_EXECUTE | VMA_READ | VMA_GUARD,
55 VMA_WRITE | VMA_EXECUTE | VMA_READ | VMA_GUARD
56};
57
58
59ULONG vmApiF1[] =
60{
61 0,
62 0,
63 VMA_DECOMMIT,
64 VMA_DECOMMIT,
65 VMA_TILE,
66 VMA_TILE,
67 VMA_DECOMMIT | VMA_TILE,
68 VMA_DECOMMIT | VMA_TILE,
69 VMA_PROTECTED,
70 VMA_PROTECTED,
71 VMA_PROTECTED | VMA_DECOMMIT,
72 VMA_PROTECTED | VMA_DECOMMIT,
73 VMA_PROTECTED | VMA_TILE,
74 VMA_PROTECTED | VMA_TILE,
75 VMA_PROTECTED | VMA_DECOMMIT | VMA_TILE,
76 VMA_PROTECTED | VMA_DECOMMIT | VMA_TILE
77};
78
79
80/**
81 * Extended edition of DosAllocMem. Allows you to suggest an address where you
82 * want the memory allocated.
83 * @returns OS2 returncode.
84 * @param ppv Pointer to a pointer. This points to a pointer which points to the
85 * suggested address of the memory block.
86 * @param cb Size of the memory block.
87 * @param flag Flags just as for DosAllocMem.
88 * @param ulCS CS where the memoryobject were requested.
89 * @param ulEIP EIP where the memoryobject were requested.
90 * @sketch
91 * @status stub
92 * @author knut st. osmundsen (knut.stange.osmundsen@pmsc.no)
93 * @remark
94 */
95APIRET k32AllocMemEx(PPVOID ppv, ULONG cb, ULONG flag, ULONG ulCS, ULONG ulEIP)
96{
97 APIRET rc;
98 ULONG flFlags2;
99 VMAC vmac = {0};
100 ULONG cbCommit;
101 HMTE hMTE;
102
103 if ((flag & ~(PAG_READ | PAG_WRITE | PAG_EXECUTE | PAG_GUARD | PAG_COMMIT
104 | OBJ_TILE | OBJ_SELMAPALL))
105 || (flag & (PAG_READ | PAG_WRITE | PAG_EXECUTE)) == 0UL
106 || cb == 0
107 || ulCS == 0
108 || ulEIP == 0
109 )
110 return ERROR_INVALID_PARAMETER;
111 if (cb > 0xC0000000UL)
112 return ERROR_NOT_ENOUGH_MEMORY;
113
114 vmac.ac_va = (ULONG)*ppv;
115 cb = (cb + 0xFFFUL) & ~0xFFFUL;
116 if (flag & PAG_COMMIT)
117 cbCommit = cb;
118 flag = vmApiF0[flag & (PAG_READ | PAG_WRITE | PAG_EXECUTE | PAG_GUARD)]
119 | vmApiF1[(flag & (PAG_COMMIT | PAG_DECOMMIT | OBJ_TILE | OBJ_PROTECTED)) >> 2]
120 | VMA_USER | VMA_RESIDENT | VMA_LOWMEM2 | VMA_TILE | 0x12000000;
121 flFlags2 = (flag & VMA_WRITE ? VMAF2_WRITE : 0) | 0x460;
122
123 hMTE = VMGetOwner(ulCS, ulEIP);
124 rc = VMAllocMem(cb,
125 cbCommit,
126 flag,
127 0,
128 0,
129 hMTE,
130 flFlags2,
131 0,
132 (PVMAC)SSToDS(&vmac));
133
134 return rc;
135}
136
Note: See TracBrowser for help on using the repository browser.