VBS string -> array of byte

Программирование на Active Server Pages и VBScript.
sandrey74
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.09.2012 (Вт) 10:39

VBS string -> array of byte

Сообщение sandrey74 » 04.09.2012 (Вт) 16:11

Требуется помощь гуру ! В VBS сначала получаем данные из бинарного файла через ADODB.Stream. Подтип прибывающей оттуда переменной - массив BYTE. Если его тут же через тот же ADODB.Stream запихать в другой файл - все замечательно работает. Но задача в том, чтобы этот файл немного пошифровать. Для этого используется CAPICOM.EnvelopedData - в его Content прибывший из ADODB.Stream "Array of Byte" запихивается на ура (как и String - ест обоих). Однако его метод Encrypt возвращает уже VARIANT с подтипом String. Так вот этот String мне позарез надо запихать в файл, а данные там бинарные - знаю только способ с ADODB.Stream. Проблема в том, что ADODB.Stream (с type=1) не ест своей функцией Write ничего, кроме VARIANT с подтипом "Array of Byte" - на String плюется и грит че есть это не будет из принципа. Тип переменной оценивался функцией VBS typename.
Традиционный вопрос "Че делать" разбивается на ряд подвопросов.
1. Есть внутри VBS способ (может с помощью стандартных COMиков) из String сделать Array of Byte ? Сразу оговорюсь, что идею с циклом, и CByte(Asc(Mid(... я уже пробовал - получается Array of Variant - тоже несъедобный для ADODB.Stream.Write.
2. Есть способ заставить ADODB.Stream с type=1 сожрать String ?
3. Есть способ заставить CAPICOM.Encrypt(1) вернуть Array of Byte вместо String ?

Об одном варианте - написать свой COM на C++ в котором у полученного VARIANT сменить vt с 8 на 8209 и вернуть назад - сильно догадываюсь, но реализовывать сильно не хочется. Причина в том, что сей скрипт будет раздаваться партнерам по бизнесу, а там свои службы безопасности и неясно-что-делающая DLL хрен-пойми-что-содержащая (в отличие от скрипта в открытом виде) никому не нужна. Иначе я бы просто на C++ все целиком накатал.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: VBS string -> array of byte

Сообщение ger_kar » 04.09.2012 (Вт) 17:17

sandrey74 писал(а):Так вот этот String мне позарез надо запихать в файл
А что кроме ADODB.Stream другие способы записи в файл не устраивают? FSO Например. Почему именно ADODB.Stream? Если нужные данные нужно записать в файл, то вариантов уйма и безо всяких извращений.
Чем например FSO плох?
Бороться и искать, найти и перепрятать

sandrey74
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.09.2012 (Вт) 10:39

Re: VBS string -> array of byte

Сообщение sandrey74 » 04.09.2012 (Вт) 17:34

Ну как вариант - FSO не годится по причине того, что как входящий так и исходящий файлы - бинарные. FSO'шная OpenTextStream его конечно откроет, и чтение даже ошибку не вызовет - данные только криво считаются в String - даже по длине. А при записи в большинстве случаев еще и ошибка возникнет.

sandrey74
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.09.2012 (Вт) 10:39

Re: VBS string -> array of byte

Сообщение sandrey74 » 04.09.2012 (Вт) 17:46

Насколько я своим темным мозгом понимаю - вариантов чтения/записи бинарных файлов в VBS не может быть уйма. Все-таки этот язык используется в IExplorer и будь этих вариантов уйма - мы бы сейчас не общались, а лечили бы компы от вирусни. Гейтс-шарашка лопухнулась, выпустив доступный в браузере ADODB.Stream - так они уже лбом об стену постучались, сказали всем как запретить этот объект в эксплорере. Если знаете другие работающие способы чтения/записи бинарных файлов в VBS (особенно, если они String любят) - кланяюсь и бьюсь челом о пол - расскажите.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: VBS string -> array of byte

Сообщение ger_kar » 04.09.2012 (Вт) 18:00

Для начала давайте определимся какой конкретно скрипт VBS используется, под WSH или под IE?
Бороться и искать, найти и перепрятать

sandrey74
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.09.2012 (Вт) 10:39

Re: VBS string -> array of byte

Сообщение sandrey74 » 04.09.2012 (Вт) 18:02

WSH

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: VBS string -> array of byte

Сообщение ger_kar » 04.09.2012 (Вт) 18:25

Сторонние средства подойдут? в виде доп ActiveX?. Если да то можно заюзать AutoItX3.dll, там есть нужные методы.
sandrey74 писал(а):Причина в том, что сей скрипт будет раздаваться партнерам по бизнесу, а там свои службы безопасности и неясно-что-делающая DLL хрен-пойми-что-содержащая (в отличие от скрипта в открытом виде)
Ну эта библиотека известная, тем более, что в скрипте можно явно проследить какие методы вызываются.
Бороться и искать, найти и перепрятать

sandrey74
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.09.2012 (Вт) 10:39

Re: VBS string -> array of byte

Сообщение sandrey74 » 04.09.2012 (Вт) 18:39

Нет, к сожалению, сторонние никак. Либо штатный дистриб WinXP или выше (в крайнем случае - DLLки, которые можно скачать из домена microsoft.com), либо придется в C++ рисовать и доказывать безобидность по исходникам, если прокатит - но это все равно слишком долго и нудно. Лучше бы обойтись чистым текстом VBS.

sandrey74
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.09.2012 (Вт) 10:39

Re: VBS string -> array of byte

Сообщение sandrey74 » 06.09.2012 (Чт) 7:41

Ладно - пусть будет AutoItX3.dll. Уже сутки читаю документацию по ней - никак не могу понять, что Вы имели в виду под словами "там есть нужные методы". "Нужные" для преобразования Variant-String в Variant-Array of Byte ? Не нашел. "Нужные" для чтения/записи бинарных файлов из Variant:String ? Вроде, тоже нет такого - работа с только с текстовыми файлами есть. Как мне может помочь эта библиотека в решении имеющейся задачи ?

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: VBS string -> array of byte

Сообщение ger_kar » 06.09.2012 (Чт) 8:52

Вот цитаты из справки по Autoit:
FileOpen

Открыть текстовый файл для чтения и записи.
FileOpen ( "filename", mode )
mode:
Режим открытия файла.

0 - открыть для чтения
1 - открыть для записи только в конец файла
2 - открыть для записи и удалить имеющееся содержание
4 - открыть для чтение в режиме как есть (raw)
8 - создать структуру папок, если она отсутствует. См. Замечания.
16 - принудительное бинарное (по байтам) чтение и запись с помощью FileRead и FileWrite
32 - режим Unicode UTF16 Little Endian для записи текста с помощью FileWrite и FileWriteLine (стандарный режим ANSI символы)
64 - режим Unicode UTF16 Big Endian для записи текста с помощью FileWrite и FileWriteLine (стандарный режим ANSI символы)
128 - режим Unicode UTF8 для записи текста с помощью FileWrite и FileWriteLine (стандарный режим ANSI символы)
В любом из режимов записи будет создан файл, даже если он отсутствует. Это не относится к воссозданию структуры необходимых папок, что реализуется только при использовании режима 8.
...

FileWrite

Добавить строку текста в конец открытого ранее текстового файла.

FileWrite ( filehandle или "filename", "line" )

Параметры

filehandle - Указатель файла, полученный при выполнении FileOpen. Либо просто строка с названием файла.
line - Строка текста. Строка записывается так, как она есть, то есть @CR или @LF не добавляются.
...
Если данные являются бинарным значением (а не текстом), то они записываются в файл побайтно
...

Вот собственно и все
Бороться и искать, найти и перепрятать

sandrey74
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.09.2012 (Вт) 10:39

Re: VBS string -> array of byte

Сообщение sandrey74 » 06.09.2012 (Чт) 9:52

Скачал дистрибутив AutoItX3, распаковал его, нашел и выковырял оттуда AutoItX3.dll, запустил regsvr32 AutoItX3.dll, получил сообщение, что все здорово установилось. Set vs = CreateObject("AutoItX3"), Set vs = CreateObject("AutoIt") - выдают ошибку. AutoIt_ru.chm слов про CreateObject, COM вообще не содержит, какой именно объект из скрипта VBS получать - найти не смог. Как пользоваться этим чудом ? Если речь о полноценной установке и написании скриптов на языке этого интерпретатора - жаль угробленного напрасно времени...

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: VBS string -> array of byte

Сообщение ger_kar » 06.09.2012 (Чт) 9:58

Ну вот собственно опять цитата из справки:
The name of the AutoItX control is AutoItX3.Control

Here is an example of calling a the Run method of the control from VBScript:

Set oAutoIt = WScript.CreateObject("AutoItX3.Control")
oAutoIt.Run("notepad.exe")

Бороться и искать, найти и перепрятать

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: VBS string -> array of byte

Сообщение ger_kar » 06.09.2012 (Чт) 10:07

Я сейчас посмотрел, по контролу отдельная справка, и если верить этой справке, то методов для чтения/записи файла контрол не содержит. Странно, я думал, что он поддерживает тот же набор что и сам интерпретатор языка. Оказалось нет. Хотя у меня версия старая, может в новой такое есть?
Бороться и искать, найти и перепрятать

sandrey74
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.09.2012 (Вт) 10:39

Re: VBS string -> array of byte

Сообщение sandrey74 » 06.09.2012 (Чт) 10:14

Пытаюсь безуспешно понять - из какой именно справки Вы мне цитаты шлете - в http://www.autoitscript.com/cgi-bin/get ... .0.102.zip ничего подобного нет. По ссылке якобы с примерами перейти не могу. VBS-скрипт:
Set vs = CreateObject("AutoItX3.Control")
st = vs.FileRead("test.exe", 69630)
ругается на вторую строку - грит нету такого метода у этого объекта. Вывод - не очень ясно как это чудо использовать в моей задаче - писать скрипт на языке AutoIt'a - очень кислая затея.

sandrey74
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.09.2012 (Вт) 10:39

Re: VBS string -> array of byte

Сообщение sandrey74 » 06.09.2012 (Чт) 10:27

Собственно ADODB.Stream замечательно читает и пишет бинарные файлы. Но в VBS с ним есть чудо-проблема - записать можно только считанный им же файл - без малейших изменений. Пытался полученный Array of Byte просто ReDim'ом увеличить на 1 символ - он тут же изменил тип на Array of Variant. Пытался не меняя размер заменить значение первого элемента этого Array of Byte - типа st(1) = CByte(7) - мне тут же сообщили, что st неподходящего типа и так писать нельзя. Т.е. VBS Array Of Byte при любом пуке переделывает в Array Of Variant, а когда не может догадаться об этом - отказывается с ним работать. При этом ADODB.Stream требует исключительно Array Of Byte. Просто любопытно - как люди пользуются сочетанием VBS + ADODB.Stream - если только для копирования, так это и FSO делает непринужденно даже с бинарными файлами.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: VBS string -> array of byte

Сообщение ger_kar » 06.09.2012 (Чт) 10:41

sandrey74 писал(а):ругается на вторую строку - грит нету такого метода у этого объекта

Ну это собственно как раз об этом
ger_kar писал(а):Я сейчас посмотрел, по контролу отдельная справка, и если верить этой справке, то методов для чтения/записи файла контрол не содержит.


sandrey74 писал(а):Пытаюсь безуспешно понять - из какой именно справки Вы мне цитаты шлете - в http://www.autoitscript.com/cgi-bin/get ... .0.102.zip ничего подобного нет.
Ну не знаю как в новой версии, а у меня вот такие справки:
Вложения
AutoItX.rar
(171.47 Кб) Скачиваний: 640
AutoIt3_2_5_4_ru.rar
(1.25 МиБ) Скачиваний: 466
Бороться и искать, найти и перепрятать

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: VBS string -> array of byte

Сообщение ger_kar » 06.09.2012 (Чт) 10:43

sandrey74 писал(а): Просто любопытно - как люди пользуются сочетанием VBS + ADODB.Stream
Ну наверное как-то пользуются, надо изучить этот вопрос...
Бороться и искать, найти и перепрятать

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: VBS string -> array of byte

Сообщение ger_kar » 06.09.2012 (Чт) 11:06

Глянь здесь. То что нужно? Напиши, что получится.
Бороться и искать, найти и перепрятать

sandrey74
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.09.2012 (Вт) 10:39

Re: VBS string -> array of byte

Сообщение sandrey74 » 06.09.2012 (Чт) 13:06

Получилось не слишком здорово - я бы даже сказал - плохо. Во-первых, ".Type = 2 ' binary mode" сразу как-то напрягло, поскольку согласно MSDN это как раз TextMode. Но я подумал, что может быть удачный выбор кодировки спасет положение. Действительно, если использовать TextMode, то проблемы с Array of Byte не возникает - ADODB.Stream и берет и возвращает в этом случае именно String. Попробовал. Считалось - размер правильный. Записал в другой файл - размер правильный. Сравниваю побайтно. Большинство байт действительно совпадают - визуально экраны заполнены одинаковыми стрекозябриками. Но fc /b не обманешь - некоторая часть байт другая. Например, все байты 0x22 заменились на 0x93 - визуальное представление обоих это двойная кавычка и ADODB.Stream, видимо, решил "А какая пофиг разница - это же текст, как мне сказали". Но если при исполнении кода вместо записи в ячейку пойдет прыжок на процедуру :)))

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: VBS string -> array of byte

Сообщение ger_kar » 06.09.2012 (Чт) 13:18

А если поиграть с кодировкой?
Бороться и искать, найти и перепрятать

sandrey74
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.09.2012 (Вт) 10:39

Re: VBS string -> array of byte

Сообщение sandrey74 » 06.09.2012 (Чт) 13:31

И какую предлагаешь ?
Конкретно эту задачу я придумал как решить, хоть и решилась она с крупным косяком. Перед шифрованием данные нужно подписать, но вместо CAPICOM.SignedData следует использовать CAPICOM.SignedCode - он данные берет из файла (в том числе бинарного - ему указываешь только имя файла), а возвращает в переменную в "текстовом" (BASE64) формате, который впоследствие легко передать в CAPICOM.Enveloped, который тоже вернет BASE64, который без проблем сохранится через FSO в файл. В обратную сторону тоже прокатит, поскольку SignedCode сохранит бинарные данные сразу в указанный ему файл. Однако именно в моей задаче это приводит к существенной проблеме - BASE64 CAPICOM и остальные CryptoPro-шные утилиты (cryptcp, Outlook Express) используют по разному и при использовании BASE64 файл зашифрованный CAPICOM нельзя расшифровать через cryptcp и наоборот - использование BASE64 в свете этого чрезвычайно нежелательно. А без него сохранить бинарные данные опять же не удастся.
Кроме того, остается интересный теоретический вопрос - действительно ли невозможно в VBS считать бинарный файл, обработать его (допустим заменить первый бай на 0x00), и снова записать в файл ? Т.е. если это возможно через танцы с бубнами - хочу выучить этот танец, если же это бетонная, непрошибаемая стенка - хочется понять это раз и навсегда.

NashRus
Постоялец
Постоялец
 
Сообщения: 386
Зарегистрирован: 18.03.2006 (Сб) 1:16

Re: VBS string -> array of byte

Сообщение NashRus » 06.09.2012 (Чт) 14:03

А можно с помощью ADODB.Stream получить VARIANT с подтипом "Array of Byte" и сделать ему ReDim.
А далее циклом скопировать или даже присвоением попробовать аккуратно сделать?

sandrey74
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.09.2012 (Вт) 10:39

Re: VBS string -> array of byte

Сообщение sandrey74 » 06.09.2012 (Чт) 14:05

Конечно, можно - что удивительно - это даже описано в этой теме: sandrey74 » 06.09.2012 (Чт) 13:27

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: VBS string -> array of byte

Сообщение ger_kar » 06.09.2012 (Чт) 14:06

НУ если бы не ограничение на доп компоненты, можно было-бы на VB сделать по быстрому нужный компонент и заюзать его. А так даже не знаю.
Бороться и искать, найти и перепрятать

sandrey74
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.09.2012 (Вт) 10:39

Re: VBS string -> array of byte

Сообщение sandrey74 » 06.09.2012 (Чт) 14:17

А потом огребаться гемором из-за этого компонента - то на новый комп переставят, то некорректно че-нить в проге налабаю - она в неподходящий момент упадет (а там бабосо-зависимый документооборот - и бабосы нехилые), то еще какие понос с золотухой... Может все-таки есть идеи как Stream победить или иные компоненты Винды или стягиваемые с Микрософта поюзать на тему обмена "бинарный файл - String" ?

sandrey74
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.09.2012 (Вт) 10:39

Re: VBS string -> array of byte

Сообщение sandrey74 » 06.09.2012 (Чт) 14:24

Моя идея с SignedCode тоже накрылась тазиком - это не совсем то, о чем я подумал - стринг при этом не возвращается, а подпись пишется в тот же бинарный файл. И предназначено это для другого - подтверждение подлинности exe-файла - для этого нужен немного навороченный сертификат, у меня кроме одного все остальные неуполномочены на это подписание exe-шника. В общем, проблема все толще.

NashRus
Постоялец
Постоялец
 
Сообщения: 386
Зарегистрирован: 18.03.2006 (Сб) 1:16

Re: VBS string -> array of byte

Сообщение NashRus » 06.09.2012 (Чт) 14:27

sandrey74 писал(а):Конечно, можно - что удивительно - это даже описано в этой теме: sandrey74 » 06.09.2012 (Чт) 13:27


Не вижу такой темы и браузер был с утра открыт, не видел последние посты.
Можешь корректно описать, чем метод не подходит, или ссылайся дальше на свои посты.

Ты бы код привел, схематично накидал что и где, а то тексту много, а толку мало.
Чтобы попробовать можно было, а то, сам видишь, не все готовы воссоздавать твою ситуацию с нуля.

sandrey74
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.09.2012 (Вт) 10:39

Re: VBS string -> array of byte

Сообщение sandrey74 » 06.09.2012 (Чт) 14:29

sandrey74 » 06.09.2012 (Чт) 13:27
Собственно ADODB.Stream замечательно читает и пишет бинарные файлы. Но в VBS с ним есть чудо-проблема - записать можно только считанный им же файл - без малейших изменений. Пытался полученный Array of Byte просто ReDim'ом увеличить на 1 символ - он тут же изменил тип на Array of Variant. Пытался не меняя размер заменить значение первого элемента этого Array of Byte - типа st(1) = CByte(7) - мне тут же сообщили, что st неподходящего типа и так писать нельзя. Т.е. VBS Array Of Byte при любом пуке переделывает в Array Of Variant, а когда не может догадаться об этом - отказывается с ним работать. При этом ADODB.Stream требует исключительно Array Of Byte. Просто любопытно - как люди пользуются сочетанием VBS + ADODB.Stream - если только для копирования, так это и FSO делает непринужденно даже с бинарными файлами.

sandrey74
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.09.2012 (Вт) 10:39

Re: VBS string -> array of byte

Сообщение sandrey74 » 06.09.2012 (Чт) 14:35

Еще такой вариант был.
Set ad1 = CreateObject("ADODB.Stream")
ad1.type=2
ad1.mode=3
ad1.Open

Set ad2 = CreateObject("ADODB.Stream")
ad2.type=1
ad2.mode=3
ad2.Open

st = "Попка - дурак"

ad1.WriteText st
ad1.Position = 0
ad1.CopyTo ad2
ad1.Close

ad2.SaveToFile("test.res")
ad2.Close

В результате получил такой файл
0000000000: FEFF 041F 043E 043F │ 043A 0430 0020 002D ?Попка -
0000000010: 0020 0434 0443 0440 │ 0430 043A дурак
Что это за 0x04 и 0xFE, 0xFF вначале - науке неизвестно...

sandrey74
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.09.2012 (Вт) 10:39

Re: VBS string -> array of byte

Сообщение sandrey74 » 14.09.2012 (Пт) 16:14

Решения найдено, может кому интересно - сообщаю.
FSO, на самом деле, читает бинарные файлы легко - единственное ограничение - нельзя пользоваться функцией ReadAll - все символы после первых встреченных двух нулей будут нулями. А вот Read(File.Size) выдает правильный стринг. "Нормальный" стринг с любыми символами от 0 до 255 функция Write от FSO легко помещает в файл.
Моя проблема была именно в использовании CAPICOM. Ее криптофункции возвращают нечто странное. Typename и Vartype по результату дают String и 8 - как учили в школе. Но это не стринг. Т.е. Variant.vt там, похоже, действительно 8, но что-то там в структуре Variant'a еще задается - FSOшная Write матерится на этот "стринг". При попытке составить другой стринг в цикле из chr(asc(mid(s1,i,1))) - Write его успешно записывает в файл. Только почти весь новый стринг у меня получился из символа с кодом 63, хотя результат криптофункций никогда не бывает столь монотонный.
Выяснилось, что CAPICOM возвращает что-то вроде BSTR, где каждый символ представлен 2мя байтами (UNICODE), из которых первый редко меняется - похоже именно его и извлекал mid. Решение предоставляется самим CAPICOM'ом - в нем нашелся объект Utilities, а в нем чудо функция искомая в заголовке этой темы - BinaryStringToByteArray. Она успешно формирует именно ByteArray из возвращаемых CAPICOMом помоев, а его уже ест ADODB.Stream. Однако обойтись только FSO не удалось - ByteArray она не ест, а попытки самостоятельно сделать стринг в цикле из chr(cint(ba(i))) привели к нежеланию VBS понимать ByteArray вообще как массив. Но Stream его ест и это здорово.

След.

Вернуться в ASP и VBScript

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11

    TopList  
cron