Здрасте.Подскажите пожалуйста еще раз-как на самом деле работает RtlCreateHeap? насколько. я понимаю,что это выделяется общая куча памяти для процесса,а затем эту память можно юзать RtlAllocateHeap? И если я выделю RtlCreateHeap( 2, 0, 0x100000, 0x1000, 0, &heapParams );,то это означает,что я выделил 0x100000 байт ОБЩЕЙ памяти для моего процесса и каждый раз могу юзать не более 0x1000? Т.е. я смогу выделить для данного случая такую память всего 100 раз?
для каждого процесса винда сама создает дефолтный хип (см.GetProcessHeap) он растет пока есть вирт.память другие хипы создают для: 1) быстрого освобождения памяти одним дестроем. никогда не встречал кроме варианта 3 с HEAP_NO_SERIALIZE 2) для ограничения общего размера. никогда не встречал 3) для ускорения работы с хипом через HEAP_NO_SERIALIZE и для удобства сборки мусора. это часто делается, например в ЛСАСС на каждом рабочем потоке свой хип. терминируется поток - очищается хип, простой и эффективный гарбаж-коллектор 4) для поиска течек при отладке офуенно сложных приложений. но это надо сразу планировать 5) по незнанию или для прикола
z0mailbox RtlGetProcessHeap() Ненашел я в ntdll.lib такой функции. Вроде поиск по инету дал результаты,но компилятор жестко ругается-НЕТ мол такой в ntdll.lib А код этот взят с sysinternals Думаю там не дураки,хотя может быть -приколисты
Да,такая есть. А можно узнать,как ей пользоваться.Туда передается какой-то массив и его размер. Мне нжен указатель на кучу,для использование в функции RtlAllocateHeap. Где этот указатель?
Думаю не зря, а вот поездочка на других либах,кроме ntdll в Bootexecute приложениях может закончится плачевно
Ладно,видать для ПРОФИ непонятным языком спрашиваю, тогда кодом спрошу- так ПРАВИЛЬНО? Код (Text): HANDLE heap[1]; RtlGetProcessHeaps(1,heap); WCHAR *stringBuffer=(PWCHAR)RtlAllocateHeap( heap[0], 0, 512 ); RtlFreeHeap( han[0], 0, stringBuffer );
coocky Бессмысленно. Выше тебе объяснили, что нужно либо использовать созданный самостоятельно хип, либо дефолтный процесса. Первый, надеюсь, понятно, как получать, а о втором я указал в #5.
bootexecute приложение,выполняющееся до загрузки винлогона как,к примеру,autochk виндовый.Да ненадо мне пальцы разминать.300 лет я б баловался таким геммором,если б не работа Блин.Да не могу я юзать GetProcessHeap НЕ МОГУ. Только из ntdll.dll функции!!!! Я спросил про создание хипа -RtlCreateHeap,мне ответили-что так делают по приколу или по незнанию.Прикалываться я не собираюсь.Значит по незнанию... Вот и спросил-блин,КАК МНЕ ,ИСПОЛЬЗУЯ ФУНКЦИИИ ТОЛЬКО ntdll.dll выделить чертову память под строку!
Ессно, т.к. он макросом реализован в винде. Поэтому либо создавай свой (учитывая специфику задачи можешь забить на рекомендации к winapi), либо доступайся к нему из Peb, благо, смещение тех пределов не меняются между версиями винды в пределах битности.
Функция создания кучи. Виртуальной, если быть точнее. Не знаю, что ты имеешь ввиду под общей. Нет, это просто гранулярность роста хипа. Сколько угодно раз, но не более максимального размера кучи, если он указан при создании.
coocky слушай, ты уж не обижайся плиз, но если ты ваще не в курсе шо такое хипы - может бут-екзекьюте отдать другому челу на девелоп?
Я не обижаюсь Только в дело здесь не в хипах Я спросил у вас-КАК МОЖНО ВЫДЕЛИТЬ память бут-екзекьюте?? Я всегда юзал в нормальных приложениях new оператор или GlobalAlloc в конце концов. Тут уже 3 дня воду толчем в ступе. Сначала я спросил про RtlCreateHeap,что похоже для меня на CreateHeap .Но тут понеслось(см пост 2): Я спросил-как тогда,что б это не выглядело смешно, выделить память под строку Ntdll функциями. И что? Посмотрите сами посты. Я прекрасно знаю, что такое хипы. Тогда почему мой первый вопрос вызвал недоумение, а RtlGetProcessHeaps(1,heap); назвали бессмыслецей. Что вы мне предложите? Ни одного ответа!!!!!! В тупик загнали-так смешно, а так бесмыслено.Тогда КАК правильно?
Неверно поставлен вопрос. Надо было спрашивать не о том, , а "как выделить память в native-приложении". Вот ответом на второй вопрос и являются RtlCreateHeap+RtlAllocateHeap или же NtAllocateVirtualMemory.
IceStudent Вот теперь спасибо.Вообщем то, что я делал с самого начала Просто параметры RtlCreateHeap отличаются от HeapCreate ,потому меня немного флаги оставили в тупик. Вот за них и спросил. Спасибо. Толкьо вот почему Я так и не понял... Потому эта фраза и сбила меня с толку