修訂未能在Win7上設置COM + ConstructorString - CryptProtectData更改?
我想綱領性盟友設置一個COM +組件,以便後面的初始化值ConstructorString。
有問題的代碼在WinXP,Win2k3,Vista和Win2k8上正常工作。
我在Win7 - 家庭高級版上失敗。
我已經通過試驗和錯誤確定似乎有構造函數字符串的大小限制 - 如果字符串是512個字符(wchar)或更少,它會保存。更長,並且CatalogCollection對象上的SaveChanges調用失敗,並出現0x80110437 - COMADMIN_E_PROPERTYSAVEFAILED錯誤。
原來,所有系統都有這個限制 - 512個字符。
在將密碼放入字符串之前,我們使用CryptProtectData來加密密碼。
在win7(x64)上,字符串的輸出比XP(x32)和W2k3(x64)長。
So - CryptProtectData已經改變 - 爲什麼輸出時間更長?
if (!CryptProtectData(&dataIn,L" ",&optionalEntropy,NULL,NULL,
CRYPTPROTECT_LOCAL_MACHINE | CRYPTPROTECT_UI_FORBIDDEN, &dataOut))
通過將字節緩衝區轉換爲數字字符串序列,將dataOut轉換爲字符串。 我沒有寫這部分,但它看起來像字節被分割成16個字符和一個餘數字符的冪。 這是數據輸出翻倍的兩倍 - 因此空間不足。 我將代碼切換爲使用ATL base64encode/base64decode調用代替 - 更有效地使用字符,它適合字符串內部。 我寧願不包括字符串的邏輯 - 它是專有代碼,但我承認它是有缺陷的。 – Eli 2009-11-17 18:33:13
幸運的猜測我的部分,很高興它幫助! – 2009-11-17 20:16:26