내가 COM + 나중에 초기화 값이 구성 요소의 ConstructorString을 설정 프로그램-동맹에 노력하고있어Win7에서 COM + ConstructorString을 설정하지 못했습니다 - CryptProtectData가 변경됩니까?
업데이트되었습니다.
해당 코드는 WinXP, Win2k3, Vista 및 Win2k8에서 제대로 작동합니다.
Win7 - Home Premium 버전에서 작동하지 않습니다.
문자열을 512 자 (wchar) 이하로 저장하면 생성자 문자열에 크기 제한이있는 것으로 판단했습니다. 더 길어지고 CatalogCollection 개체의 SaveChanges 호출이 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))
바이트 버퍼를 숫자 문자열 시퀀스로 변환하여 dataOut을 문자열로 바꿨습니다. 필자는 그 부분을 쓰지 않았지만 바이트가 16 자와 나머지 문자로 나뉘 었습니다. 이것은 두 배의 데이터 길이입니다. 따라서 공간이 부족합니다. 대신 ATL base64encode/base64decode 호출을 사용하도록 코드를 전환했습니다. 문자를보다 효율적으로 사용하고 문자열 내부에 맞 춥니 다. 문자열의 논리를 포함시키지 말아야합니다. 이는 독점적 인 코드이지만 결함이 있음을 인정합니다. – Eli
럭키 추측이 내 부분에 도움이 되니 기쁩니다! –