Вопрос по юзермод АПИ внутренней работе с памятью. Странный.

Тема в разделе "WASM.WIN32", создана пользователем _basmp_, 22 окт 2008.

  1. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Встречал ли кто юзермод Вин32 АПИ функу в которой бы выделся/удалялся/ресайзился некий буфер памяти, причем ссылка на него бы была в другом буфере переданом в функу через параметр (без учета объектов ядра и гуя)? (см пример ниже)
    Если да, то какие это функи?

    Пример:
    ?
     
  2. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    ZwAllocateVirtualMemory ?
     
  3. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    _basmp_
    Каждая программа(вернее компилятор) по свойму реализует GetMam, так что формат указателя у всех разный.
    Поэтому Win API не может создавать указатели. Иначе менеджер памяти программы перестанет работать так как надо.
     
  4. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Velheart
    Где?

    Я имел ввиду изменение памяти с вложеной (порядка >1) ссылкой в буфере ссыль на который передается через параметры.

    Pavia
    Что-то я сегодня торможу. Меня интересуют только юзермод винапи (дх, огл (хотя огл - надстройка над дх, те можно отбросить) тоже. но с ними потом), внутрипроговские менеджеры - не важны.
     
  5. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    _basmp_
    Чет я не так понял..
     
  6. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    _basmp_
    Я тебе написал причину, по которой так не делают. Хотя тут есть один нюанс. Все-таки это возможно. Но не в юзер моде. Нужна другая память. Две кучи в одном адрестном пространстве быть не могут. Зато у нас есть видео память вот в ней выделять освобождать память можно. Но этим должно заведовать ядро ОС. На данный момент до висты это было дано на откуп драйверам. В висте есть DX 10. Собственно там надо искать.
     
  7. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Так и не понял что автору нужно.
     
  8. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Pavia
    Почему не может быть две кучи? Придется заводить дескриптор кучи и передавать его при работе с памятью, но это не такая уж проблема.

    _basmp_
    Речь, случайно, идет не об указателе на указатель?
     
  9. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    _basmp_
    Бредово конечно, но наверно есть, что-то типо специфическое, для инициализации какой-нибудь структуры. Только почему именно WinApi? И самому такой бред можно сделать.
     
  10. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Pavia
    Я сам понимаю, что умные люди так не сделают, тк вероятность утечки или ошибки при такой неявности начинает -> 100%. Но а вдруг. Может встречал кто.
    Mika0x65
    типа того. да. особенно интересны неявные случаи.
    Booster
    Не. мне ничего делать не надо. Только найти такие функи в юзермод апях или не найти, но с гарантией.
     
  11. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    _basmp_
    Чего то я недопонимаю чего ты хочешь...
    Например CreateCompatibleDC и т.п. создаёт в памяти контекст который по сути своей и есть буфер памяти, затем рисовальные api используют этот буфер узнавая о нём, через параметр handle контекста.
    Это нужно?
     
  12. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    Y_Mur
    это объект gdi. Нет. Пока нет.
    Вопрос: существуют ли апи функи меняющие (выделяющие/ресайзящие/удаляющие) вложенные мем буфера (те не по ссылке первого уровня, те ссыль на ссыль итд).
    Сам таких не знаю или не помню или не знаю как найти/проверить или.. Вот и спрашиваю для страховки.
     
  13. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Управление кучами ?
     
  14. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Типа создаётся буфер памяти для списка объектов, затем выделяются блоки памяти для самих объектов и ссылки на них заносятся в этот список?
    Наверняка такое используется в api. Логично было бы это например в toolbar затем заполняемом кнопками, хотя такой там подход или нет не знаю.
     
  15. zhindos

    zhindos New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    142
    Код (Text):
    1. SERVER_INFO_100* psi100;
    2. DWORD entrRead, totEntr;
    3. NetServerEnum(NULL, 100, (LPBYTE*)&psi100, MAX_PREFERRED_LENGTH, &entrRead, &totEntr,
    4.     SV_TYPE_ALL, NULL, NULL);
    оно?
     
  16. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    zhindos
    оно
     
  17. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Тогда должны еще подойти всякие комовские штуки типа CoGetClassObject и т.д.
     
  18. zhindos

    zhindos New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    142
    Все ф-ии из NETAPI32.dll работают с буфером по такой схеме, они вызывают NetApiBufferAllocate из этой же либы;
    "заблочивание" этой функи в explorer-е(или в total-е, кто что юзает) ввергает типичного юзверя в шок при его попытке подконнектиться к какому-либо компу по сети :)