/kernel/trunk/core/heap.inc |
---|
596,7 → 596,7 |
align 4 |
proc user_alloc stdcall, alloc_size:dword |
push ebx esi edi |
call init_heap |
mov ebx, [current_process] |
lea ecx, [ebx+PROC.heap_lock] |
call mutex_lock |
mov ecx, [alloc_size] |
/kernel/trunk/docs/sysfuncr.txt |
---|
2577,6 → 2577,8 |
* 3 = RAW |
* 4 и выше зарезервировано |
* +8: более детально смотрите файл clipboard_container_rus.txt |
* Функция должна использоваться совместно с 68.11. Приложение должно |
предварительно проинициализировать локальную кучу вызовом 68.11. |
---------------------- Константы для регистров: ---------------------- |
eax - SF_CLIPBOARD (54) |
2989,8 → 2991,10 |
* eax = 1 - недостаточно памяти |
Замечания: |
* Есть другой способ выделения/освобождения динамической памяти - |
подфункции 12, 13 и 20 функции 68, но после их использования будет |
создана куча процесса и вызов функции 64 будет игнорироваться. |
подфункции 11, 12, 13 функции 68. |
* Функция не может использоваться совместно с 68.11, 68.12, 68.13. |
Вызов функции будет игнорироваться, если приложение создаст |
локальную кучу вызовом 68.11. |
---------------------- Константы для регистров: ---------------------- |
eax - SF_MEMORY_RESIZE (64) |
3292,7 → 3296,7 |
eax - SF_SYS_MISC (68) |
ebx - SSF_WRITE_MSR (4) |
====================================================================== |
= Функция 68, подфункция 11 - вручную инициализировать кучу процесса = |
===== Функция 68, подфункция 11 - инициализировать кучу процесса. ==== |
====================================================================== |
Параметры: |
* eax = 68 - номер функции |
3447,6 → 3451,8 |
Возвращаемое значение: |
* eax = указатель на перераспределённый блок, 0 при ошибке |
Замечания: |
* Предварительно следует инициализировать кучу процесса вызовом |
подфункции 11. |
* Функция выделяет целое число страниц (4 Кб) так, что фактический |
размер выделенного блока больше или равен запрошенному. |
* Если edx=0, то вызов функции эквивалентен выделению памяти |
3510,6 → 3516,8 |
* E_NOMEM = 30 |
* E_PARAM = 33 |
Замечания: |
* Предварительно следует инициализировать кучу процесса вызовом |
подфункции 11. |
* Если создаётся новая область, то флаги доступа устанавливают |
максимальные права доступа для остальных процессов. Попытка |
открытия другим потоком с неразрешёнными правами провалится |
3619,6 → 3627,8 |
* edx = размер загруженного файла или 0 |
Примечания: |
* функция загружает и, при необходимости, распаковывает файл (kunpack) |
* Предварительно следует инициализировать кучу процесса вызовом |
подфункции 11. |
---------------------- Константы для регистров: ---------------------- |
eax - SF_SYS_MISC (68) |
/kernel/trunk/docs/sysfuncs.txt |
---|
2548,6 → 2548,9 |
* eax = if successful - pointer to a memory with data |
* eax = 1 - error |
* eax = -1 - main list area not found |
Remarks: |
* The function must be used in conjunction with 68.11. The |
application must pre-initialize the local heap by calling 68.11. |
---------------------- Constants for registers: ---------------------- |
eax - SF_CLIPBOARD (54) |
2957,6 → 2960,9 |
* There is another way to dynamically allocate/free memory - |
subfunctions 12, 13 and 20 of function 68, but after creation |
of the process heap 64 function call will be ignored. |
* The function cannot be used together with 68.11, 68.12, 68.13. |
The function call will be ignored after creation of process heap |
with function 68.11. |
---------------------- Constants for registers: ---------------------- |
eax - SF_MEMORY_RESIZE (64) |
3258,7 → 3264,7 |
eax - SF_SYS_MISC (68) |
ebx - SSF_WRITE_MSR (4) |
====================================================================== |
=== Function 68, subfunction 11 - manually initialize process heap === |
=== Function 68, subfunction 11 - initialize process heap ============ |
====================================================================== |
Parameters: |
* eax = 68 - function number |
3413,6 → 3419,8 |
Returned value: |
* eax = pointer to the reallocated block, 0 = error |
Remarks: |
* Before this call one must initialize process heap by call to |
subfunction 11. |
* The function allocates an integer number of pages (4 Kb) in such |
way that the real size of allocated block is more than or equal to |
requested size. |
3475,6 → 3483,8 |
* E_NOMEM = 30 |
* E_PARAM = 33 |
Remarks: |
* Before this call one must initialize process heap by call to |
subfunction 11. |
* If a new area is created, access flags set maximal rights |
for other processes. An attempt from other process to open |
with denied rights will fail with error code E_ACCESS. |
3584,6 → 3594,8 |
* edx = size of the loaded file, or zero |
Remarks: |
* function loads file and unpacks, if necessary |
* Before this call one must initialize process heap by call to |
subfunction 11. |
---------------------- Constants for registers: ---------------------- |
eax - SF_SYS_MISC (68) |