Не удается установить COM + ConstructorString на Win7 - CryptProtectData изменяется? - PullRequest
1 голос
/ 13 ноября 2009

ОБНОВЛЕНО

Я пытаюсь программно установить ConstructorString компонента COM + со значением для последующей инициализации.

Данный код отлично работает на WinXP, Win2k3, Vista и Win2k8.

У меня не получается на Win7 - Home Premium версия.

Я методом проб и ошибок определил, что существует ограничение на размер строки конструктора - если строка 512 символов (wchar) или меньше, она сохраняется. Дольше и вызов SaveChanges объекта CatalogCollection завершается ошибкой с ошибкой 0x80110437 - COMADMIN_E_PROPERTYSAVEFAILED.

Оказывается, все системы имеют этот предел - 512 символов.

Мы используем CryptProtectData для шифрования пароля перед его вводом в строку.

На win7 (x64) вывод строки длиннее, чем на XP (x32) и W2k3 (x64).

Итак - CryptProtectData изменился - почему вывод длиннее?

    if (!CryptProtectData(&dataIn,L" ",&optionalEntropy,NULL,NULL,
    CRYPTPROTECT_LOCAL_MACHINE | CRYPTPROTECT_UI_FORBIDDEN, &dataOut))

1 Ответ

1 голос
/ 15 ноября 2009

Что вы делаете с dataOut, чтобы превратить его в строку? Я не могу вспомнить точные детали сейчас, но я предполагаю, что строка конструктора BSTR. dataOut - это байтовый буфер, поэтому вам нужно быть очень осторожным при преобразовании его в строку, чтобы не путаться со встроенными символами NUL и т. Д.

Не могли бы вы обновить свой вопрос, чтобы включить преобразование из выходного буфера CryptProtectData в строку?

...