Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/40: Рейтинг темы: голосов - 40, средняя оценка - 4.88
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800

Как работать с потоками IStream в Visual Basic 6

16.11.2024, 18:08. Показов 13632. Ответов 206
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Я недавно узнал о таком чуде как потоки IStream, это такие данные в оперативной памяти вашего процесса EXE типа байтовых массивов только круче. Как я это понял лично. Вот мне очень интересно стало поработать именно со стримами. Если у кого-то есть какие-то наработки в этом плане буду рад, если поделитесь.

Из того, что я пока узнал:

Есть API для создания, чтения и записи стримов - это функции SHCreateMemStream, IStream_Write, IStream_Read и IStream_Size. Это конечно очень интересно всё, но я не нашёл функции для позиционирования IStream_Seek (её что не существует?).

Есть возможность управлять стримами через объявления в TLB, однако мне эта тема не интересна, так как я не люблю подключать всякие там TLB.

Есть возможность управлять потоками IStream через специальную функцию DispCallByVtbl

Хотелось бы подробно разобрать эту тему и научиться:

1. Создавать поток IStream
2. Записывать
3. Считывать
4. Позиционировать
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.11.2024, 18:08
Ответы с готовыми решениями:

Как работать с камерой в Visual Basic
Как сделать прогу чтобы в ней отображалось то шо я снимаю и возможно было менять настройки камеры (яркость, гамма, контрасность,...

Как работать в Visual Basic'е с реестром?
Народ, может кто подскажет, как работать в Visual Basic'е с реестром?

Как работать с таблицами Ecxel в Visual Basic?
Как работать с таблицами Ecxel в Visual Basic?

206
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
17.11.2024, 04:30  [ТС]
Студворк — интернет-сервис помощи студентам
testuser2, слушай ты скачай мою программу-пример да посмотри, там же всё понятно

Добавлено через 1 минуту
Seek это указатель текущего положения чтения или записи.

Добавлено через 1 минуту
Цитата Сообщение от testuser2 Посмотреть сообщение
выполнить метод какого-то объекта
какой ещё метод, какого ещё объекта, ничего не понял что ты спрашиваешь вообще

Цитата Сообщение от testuser2 Посмотреть сообщение
этого метода в V-Table?
тоже абсолютно ничего не понял

Добавлено через 54 секунды
Offset там где ты спрашивал это Seek

Добавлено через 1 минуту
Но как узнать его текущее положение этого Offset я сам не знаю. Знаю лишь что он становится сразу на конец файла, после загрузки, и поэтому операция Read уже не работает (я тоже не сразу в этом разобрался) пока снова не отпозиционируешь Sekk.
0
1406 / 865 / 93
Регистрация: 08.02.2017
Сообщений: 3,695
Записей в блоге: 2
17.11.2024, 04:46
Я, кстати, перепутал, нужен не offset, а index это цифра 5, а смещение именно метода там вычисляется как lIndex * PTR_SIZE. Это номер метода по счету в таблице v-table. Я, кстати, че-то маленько делал, т.е. я брал один громоздкий код Трика, который сканирует в-табле и выдает все методы объекта. И вроде бы у меня получилось узнавать номера методов, но не получилось их вызывать. Мене просто интересно, если вызывать метод объекта с помощью DipCallFunk это быстрее или нет.
1
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
17.11.2024, 05:04  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
это цифра 5
Ну это функция Seek, другая цифра - другая функция типа Read, Write...
Цитата Сообщение от testuser2 Посмотреть сообщение
вызывать метод объекта с помощью DipCallFunk это быстрее или нет
Нет, это медленнее, я думаю. А какие ещё методы и откуда ты хотел бы вызывать?

Добавлено через 1 минуту
Цитата Сообщение от testuser2 Посмотреть сообщение
в таблице v-table
А где эту таблицу посмотреть можно? Я не вникал в это, если честно.

Добавлено через 47 секунд
Цитата Сообщение от testuser2 Посмотреть сообщение
который сканирует в-табле и выдает все методы объекта.
интересно было бы посмотреть конечно

Добавлено через 8 минут
testuser2, я нашёл полезную информацию про тему которую ты спрашиваешь: https://www.vbforums.com/showt... -is-faster
1
1406 / 865 / 93
Регистрация: 08.02.2017
Сообщений: 3,695
Записей в блоге: 2
17.11.2024, 07:37
Цитата Сообщение от HackerVlad Посмотреть сообщение
интересно было бы посмотреть конечно
Свои изыскания я не нашел. Здесь обсуждалось это, но все коды из темы у меня вызывают исключение и вылет IDE

Добавлено через 31 минуту
Вот есть чудесня прога The trick-а для просмотра информации о библиотеки, там не хватает только нумерации мемберов..
1
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
17.11.2024, 08:48
HackerVlad, я же говорю сам себе проблему придумал - сам решил. В справке по функции все детально описано:
Prior to Windows Vista, this function was not included in the public Shlwapi.h file, nor was it exported by name from Shlwapi.dll. To use it on earlier systems, you must call it directly from the Shlwapi.dll file as ordinal 12.
Другие функции не нужно по номерам вызывать т.к. номера могут меняться.

Добавлено через 14 минут
testuser2, DispCallFunc - это очень медленный метод вызова, т.к. для него нужно все параметры переводить в Variant. Получается 2 конвертации туда сюда + возвращаемое значение. Поэтому его только в крайних случаях желательно использовать типа вызова по указателю.
1
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
17.11.2024, 12:12  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Другие функции не нужно по номерам вызывать т.к. номера могут меняться.
Я вкурсе но это может произойти только в Windows 12 если они вдруг поменяют. Во всех Windows сейчас работает нормально и меня это устраивает. Есть совместимость значит Windows XP - Windows 11 точно. Функции как раз таки и нужно по номерам вызывать для XP.

Добавлено через 1 минуту
В справки эти ленивые майкры не описали номера для других функций, хотя могли бы

Добавлено через 1 минуту
Цитата Сообщение от The trick Посмотреть сообщение
не нужно
нужно, чтобы работало в XP и не спорь

Добавлено через 30 минут
Цитата Сообщение от testuser2 Посмотреть сообщение
Вот есть чудесня прога The trick-а для просмотра информации о библиотеки
Утилита от The Trick мне кстати очень понравилась. Жаль я не знал о её существовании раньше. Хотя там не совсем удобно мне бы пришлось прокручивать весь список и вручную, напрягать зрение, и искать в длинном списке эту функцию чтобы найти этот номер. Не удобно. Всё-таки хорошо что я написал свою утилитку.
0
1406 / 865 / 93
Регистрация: 08.02.2017
Сообщений: 3,695
Записей в блоге: 2
17.11.2024, 13:37
Цитата Сообщение от HackerVlad Посмотреть сообщение
Я вкурсе но это может произойти только в Windows 12 если они вдруг поменяют.
Что точно есть - несоответствие ординалов x86 и x64 версий системных библиотек, в x64 могут быть другие номера.
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
17.11.2024, 13:52
HackerVlad, да пиши как хочешь на самом деле если тебе нравятся костыли.

testuser2, они могут различаться и в 32 и таких примеров море.
0
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
17.11.2024, 14:12  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
в x64 могут быть другие номера
А что такое х64? Это битность винды или битность твоего процесса EXE

Добавлено через 1 минуту
Я могу конечно сделать код, который будет только для XP вызывать по номерам (иначе там просто ну никак!!!) а в более новых виндах по именам. и такое могу. но думаю нужно ли это. если номера во всех виндах совпадают.

Добавлено через 1 минуту
если бы у меня был хоть один пример того что номера этих моих функций ну хоть где-то будут не совпадать. а то везде же совпадают, я думаю.

Добавлено через 44 секунды
у меня Windows 64 битный я проверял и на Windows 32 битном тоже проверял везде эти номера совпали

Добавлено через 59 секунд
Вы все такие перестраховщики ей Богу я в шоке просто, просто пустые слова, без доказательств, что эти номера где-то могут не совпасть. А если они везде совпадают? Вы об этом не думали?

Добавлено через 50 секунд
Конкретно для моих функций я имею ввиду конечно.
0
1406 / 865 / 93
Регистрация: 08.02.2017
Сообщений: 3,695
Записей в блоге: 2
17.11.2024, 14:18
Цитата Сообщение от The trick Посмотреть сообщение
они могут различаться и в 32 и таких примеров море.
А это понятно, я сразу понял, что тема не надежная, когда обнаружил то-что в разных битностях не совпадают, значит просто не стоит на них полагаться.

Добавлено через 3 минуты
Цитата Сообщение от HackerVlad Посмотреть сообщение
у меня Windows 64 битный я проверял и на Windows 32 битном тоже проверял везде эти номера совпали
Это может совпадать в каком-то случае, для каких-то отдельных функций, в обобщенно говоря эта тема не надежная.
Я еще вот чего не понимаю, пишут, что типа через номера вызов идет чуть быстрее. Просто также наверное не должно быть, там что при вызове каждый раз участвует текстовое имя функции, компилятор же так не должен работать?
0
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
17.11.2024, 14:18  [ТС]
Ну может в других функциях номера и не совпадают, но меня интересуют только конкретно мои 4 функции

1. IStream_Read - 184
2. IStream_Write - 212
3. IStream_Size - 214
4. IUnknown_AtomicRelease - 169

И я уверен что номера в них совпадают везде во всех Windows и во всех битностях винды. А битность моего процесса ну никак не может быть 64.
0
1406 / 865 / 93
Регистрация: 08.02.2017
Сообщений: 3,695
Записей в блоге: 2
17.11.2024, 14:20
Цитата Сообщение от HackerVlad Посмотреть сообщение
А битность моего процесса ну никак не может быть 64.
А ты на Твине не будешь компилить 64битные проги?
0
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
17.11.2024, 14:21  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
через номера вызов идет чуть быстрее
Да, быстрее по номерам идут вызовы, я тоже об этом ни раз слышал.

Добавлено через 29 секунд
Цитата Сообщение от testuser2 Посмотреть сообщение
А ты на Твине не будешь компилить 64битные проги?
Нет, там лицензию покупать надо. Только 32 буду компилировать.

Добавлено через 1 минуту
32-битный мой процесс работает ни чем не хуже чем 64-битный, поверь по скорости почти ничем не отличается, всё так же быстро у меня будет работать. тогда вопрос: а зачем мне вообще 64. просто нет смысла и всё.
0
1406 / 865 / 93
Регистрация: 08.02.2017
Сообщений: 3,695
Записей в блоге: 2
17.11.2024, 14:25
Цитата Сообщение от HackerVlad Посмотреть сообщение
Да, быстрее по номерам идут вызовы, я тоже об этом ни раз слышал.
А вот интересно, если у бейсиковой функции указатель подменить библиотечной функцией, то будет какая скорость
0
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
17.11.2024, 14:47  [ТС]
testuser2, понимаешь The Trick всегда чётко следует документации, вот там написали только для функции SHCreateMemStream что нужно по номеру 12 вызывать для совмести со всеми виндами, вот он и следует чётко этой инструкции от майкрософта. А так как в описании других функций не написано что нужно по номерам вызывать для совместимости, то он считает уже что мол категорически не стоит этого делать. Однако, я уверен, если бы бы в документации майкры, не поленились бы, и написали бы для других функций IStream_Read, IStream_Write что нужно вызывать по номерам для совместимости со старыми версиями винды, то The Trick говорил бы совсем иначе. Уже не осуждал бы меня и говорил бы что да нужно по номерам эти функции вызывать. А я считаю что в майкрософте просто поленились написать об этом и всё. А хотя стоило бы в документации указать ни только для SHCreateMemStream что нужно вызывать по номеру для XP но и для других функций IStream_Write, IStream_Read, IStream_Size

Добавлено через 2 минуты
testuser2, а я вот не люблю всегда чётко следовать документации и инструкциям.

Добавлено через 17 минут
Цитата Сообщение от The trick Посмотреть сообщение
если тебе нравятся костыли
API функция - это не костыль! А то с таким же самым успехом я могу и твою функцию SHCreateMemStream тоже назвать костылём, которую ты тоже вызываешь по номеру! Это ни чем не отличается от функции IStream_Write, IStream_Read за исключением того, что в документации не написали про них что можно вызывать по номерам их.

Вот вы все используете функцию SHCreateMemStream а почему в ваших TLB нет такого метода создания стрима? Почему вы используете API функцию? Почему в майкрософте не сделали такого метогда в интерфейсе IStream для создания потока? Почему только функция из API для этого есть? Если уже и делать было бы, по логике, то либо всё на API либо всё на ваших методах интерфейса без АПИ.
0
1406 / 865 / 93
Регистрация: 08.02.2017
Сообщений: 3,695
Записей в блоге: 2
17.11.2024, 14:53
Вот взять допустим RTLMoveMemory (kernel32) в 86bit ее номер 1197, a x64 1207
ZeroMemory(ntdll) x86/x65 1434/1424
0
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
17.11.2024, 15:01  [ТС]
testuser2, да плевать мне на другие функции вообще, пусть там номера и не совпадают, а ты возьми конкретно мои 4 функции проверь

1. IStream_Read - 184
2. IStream_Write - 212
3. IStream_Size - 214
4. IUnknown_AtomicRelease - 169

Уверен, всё будет прекрасно совпадать. Просто если ЕСТЬ название то я всегда сам вызываю по названиям. А если названия функции ну тупо ну просто нету!? То куда деваться тогда!? Приходится и вызывать по номеру! Хотябы ради ХР!

Добавлено через 1 минуту
Цитата Сообщение от testuser2 Посмотреть сообщение
допустим RTLMoveMemory (kernel32) в 86bit ее номер 1197, a x64 1207
ZeroMemory(ntdll) x86/x65 1434/1424
А ты как это проверял кстати? И ещё раз спрашиваю: это битность самой винды или это битность процесса?

Добавлено через 2 минуты
Вообще это конечно неправильно было со стороны майкрософт делать безымянные функции в библиотеках по номерам. Я считаю что это неправильно вообще, если бы я делал систему я бы требовал имя обязательно. А то как это так это вообще что функция без имени. Бред.

Добавлено через 1 минуту
Прикинь если бы людей так называли ни Костя там, ни Артур, а например 568 или 469 иди сюда. Смешно. Пхахахах Сразу вспомнил сериал кстати где была девочка по имени 11.
0
1406 / 865 / 93
Регистрация: 08.02.2017
Сообщений: 3,695
Записей в блоге: 2
17.11.2024, 15:10
Цитата Сообщение от HackerVlad Посмотреть сообщение
А ты как это проверял кстати?
Береш библиотеку из папки System32 (x64) и Syswow64(x32) и смотришь. Эти функции совпадают да (IStream_Read ..), но я тебе показывал..

Добавлено через 1 минуту
Цитата Сообщение от HackerVlad Посмотреть сообщение
Вообще это конечно неправильно было со стороны майкрософт делать безымянные функции
У них есть имена, dll export viewer же их как-то считывает

Добавлено через 4 минуты
Кстати если в Листере тоталовском смотреть, то видно эти функции (IStream_Read, IStream_Write), но также видно и безымянные ординалы, которые там тоже есть
1
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
17.11.2024, 15:34  [ТС]
Цитата Сообщение от testuser2 Посмотреть сообщение
У них есть имена
В хрюшке нету, начиная от Висты только дали имена этим функциям.
0
Эксперт по электронике
7144 / 3323 / 342
Регистрация: 28.10.2011
Сообщений: 13,101
Записей в блоге: 7
17.11.2024, 16:10
Цитата Сообщение от HackerVlad Посмотреть сообщение
32-битный мой процесс работает ни чем не хуже чем 64-битный
А если нужно больше 2 ГБ ОЗУ?

Цитата Сообщение от HackerVlad Посмотреть сообщение
поверь по скорости почти ничем не отличается
Проверял, отличаются.
Ядро 64 бит, процесс 32 бит. Нужна прослойка которая требует ресурсов компа.

Цитата Сообщение от HackerVlad Посмотреть сообщение
а зачем мне вообще 64. просто нет смысла и всё.
64 бит - натив.
32 бит - нужна прослойка и ограничение по памяти.

Цитата Сообщение от HackerVlad Посмотреть сообщение
Вот вы все используете функцию SHCreateMemStream а почему в ваших TLB нет такого метода создания стрима? Почему вы используете API функцию? Почему в майкрософте не сделали такого метогда в интерфейсе IStream для создания потока?
SHCreateMemStream() создает экземпляр интерфейса. Если его не создать, интерфейса не будет. Как предлагаете вызывать метод из несуществующего интерфейса?

Цитата Сообщение от HackerVlad Посмотреть сообщение
Почему только функция из API для этого есть?
Она реализует интерфейс включая его методы.
Если интерфейс создаете вы, нужно написать реализацию всех методов и др. что требуется. Попробуйте и может получится.
Цитата Сообщение от HackerVlad Посмотреть сообщение
1. IStream_Read - 184
2. IStream_Write - 212
3. IStream_Size - 214
4. IUnknown_AtomicRelease - 169
Уверен, всё будет прекрасно совпадать.
В разных версиях винды может не совпасть. В dll могут добавить функцию что сдвинет нумерацию части функций.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.11.2024, 16:10

Можно ли научится работать ASP.NET на основе Visual Basic
Всем доброго времени суток. Немножко владею навыками создавть и писать программы на VS 2010 на основе Visual Basic-a, можно ли научится...

Где бесплатно скачать учебник по Visual Basic 6 и Visual Basic .Net ?
Где бесплатно скачать учебник по Visual Basic 6 и Visual Basic .Net

Вычисление значений функции двух переменных в Visual Basic - Visual Basic
Помогите пожалуйста! В среде VB написать программу вычисления значений функции двух переменных. Ориентировочный вид окна программы и...

Как быстро работать с комбинациями стилей текста(жирный, курсив, жирный + курсив и т. д.) в Visual Basic?
Здравствуйте. Я учусь в университете, нам задали написать текстовый редактор. Я использую RichTextBox и мне нужно, чтобы я по нажатию...

Как работать с потоками?
Как создать поток? Как его стартануть? В какой он библиотеке? И вообще, как он называется? Когда гуглю, находится много информации про...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов и табличных частей документа при копировании
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru