1
0

no need for manual heap initialization (68.11)

git-svn-id: svn://kolibrios.org@6893 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
pathoswithin 2017-05-13 06:41:42 +00:00
parent 5ac8ef4526
commit a4a06a81a0
3 changed files with 13 additions and 42 deletions

View File

@ -595,19 +595,13 @@ endp
align 4
proc user_alloc stdcall, alloc_size:dword
push ebx
push esi
push edi
mov ebx, [current_process]
push ebx esi edi
call init_heap
lea ecx, [ebx+PROC.heap_lock]
call mutex_lock
mov ecx, [alloc_size]
add ecx, (4095+PAGE_SIZE)
and ecx, not 4095
mov esi, dword [ebx+PROC.heap_base] ; heap_base
mov edi, dword [ebx+PROC.heap_top] ; heap_top
.scan:

View File

@ -2577,8 +2577,6 @@ dword-значение цвета 0x00RRGGBB
* 3 = RAW
* 4 и выше зарезервировано
* +8: более детально смотрите файл clipboard_container_rus.txt
* Функция должна использоваться совместно с 68.11. Приложение должно
предварительно проинициализировать локальную кучу вызовом 68.11.
---------------------- Константы для регистров: ----------------------
eax - SF_CLIPBOARD (54)
@ -2991,10 +2989,8 @@ IPC применяется для посылок сообщений от одн
* eax = 1 - недостаточно памяти
Замечания:
* Есть другой способ выделения/освобождения динамической памяти -
подфункции 11, 12, 13 функции 68.
* Функция не может использоваться совместно с 68.11, 68.12, 68.13.
Вызов функции будет игнорироваться, если приложение создаст
локальную кучу вызовом 68.11.
подфункции 12, 13 и 20 функции 68, но после их использования будет
создана куча процесса и вызов функции 64 будет игнорироваться.
---------------------- Константы для регистров: ----------------------
eax - SF_MEMORY_RESIZE (64)
@ -3296,7 +3292,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
eax - SF_SYS_MISC (68)
ebx - SSF_WRITE_MSR (4)
======================================================================
===== Функция 68, подфункция 11 - инициализировать кучу процесса. ====
= Функция 68, подфункция 11 - вручную инициализировать кучу процесса =
======================================================================
Параметры:
* eax = 68 - номер функции
@ -3306,10 +3302,9 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
* иначе размер созданной кучи
Замечания:
* Вызов функции инициализирует кучу, из которой впоследствии можно
выделять и освобождать блоки памяти подфункциями 12 и 13.
выделять и освобождать блоки памяти подфункциями 12, 13 и 20.
* Если куча уже создана, функция вернёт размер существующей кучи.
Размер кучи равен размеру всей свободной памяти приложения.
* При повторном вызове функции тем же процессом функция вернёт
размер существующей кучи.
* После создания кучи вызовы функции 64 игнорируются.
---------------------- Константы для регистров: ----------------------
@ -3325,8 +3320,6 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
Возвращаемое значение:
* eax = указатель на выделенный блок
Замечания:
* Предварительно следует инициализировать кучу процесса вызовом
подфункции 11.
* Функция выделяет целое число страниц (4 Кб) так, что фактический
размер выделенного блока больше или равен запрошенному.
@ -3454,8 +3447,6 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
Возвращаемое значение:
* eax = указатель на перераспределённый блок, 0 при ошибке
Замечания:
* Предварительно следует инициализировать кучу процесса вызовом
подфункции 11.
* Функция выделяет целое число страниц (4 Кб) так, что фактический
размер выделенного блока больше или равен запрошенному.
* Если edx=0, то вызов функции эквивалентен выделению памяти
@ -3519,8 +3510,6 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
* E_NOMEM = 30
* E_PARAM = 33
Замечания:
* Предварительно следует инициализировать кучу процесса вызовом
подфункции 11.
* Если создаётся новая область, то флаги доступа устанавливают
максимальные права доступа для остальных процессов. Попытка
открытия другим потоком с неразрешёнными правами провалится

View File

@ -2548,9 +2548,6 @@ Returned value:
* 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)
@ -2958,10 +2955,8 @@ Returned value:
* eax = 1 - not enough memory
Remarks:
* There is another way to dynamically allocate/free memory -
subfunctions 11, 12, 13 of function 68.
* 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.
subfunctions 12, 13 and 20 of function 68, but after creation
of the process heap 64 function call will be ignored.
---------------------- Constants for registers: ----------------------
eax - SF_MEMORY_RESIZE (64)
@ -3263,7 +3258,7 @@ Remarks:
eax - SF_SYS_MISC (68)
ebx - SSF_WRITE_MSR (4)
======================================================================
======= Function 68, subfunction 11 - initialize process heap. =======
=== Function 68, subfunction 11 - manually initialize process heap ===
======================================================================
Parameters:
* eax = 68 - function number
@ -3272,11 +3267,10 @@ Returned value:
* eax = 0 - failed
* otherwise size of created heap
Remarks:
* The function call initializes heap, from which one can in future
allocate and free memory blocks with subfunctions 12 and 13.
* The function call initializes heap for subfunctions 12, 13 and 20.
* If the process heap is already created, this function will return
the size of the existing heap.
Heap size is equal to total amount of free application memory.
* The second function call from the same process results in
returning the size of the existing heap.
* After creation of the heap calls to function 64 will be ignored.
---------------------- Constants for registers: ----------------------
@ -3292,8 +3286,6 @@ Parameters:
Returned value:
* eax = pointer to the allocated block
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.
@ -3421,8 +3413,6 @@ Parameters:
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.
@ -3485,8 +3475,6 @@ Error codes:
* 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.