cryptregisteroidinfo microsoft longhorn se

Problem with CryptRegisterOIDInfo in Microsoft "Longhorn" Se

When I call CryptRegisterOIDInfo with pInfo parameter pointing on "old-style" CRYPT_OID_INFO structure (cbSize = 28) without pwszCNGAlgid and pwszCNGExtraAlgid members, I get error about invalid parameter. If use CRYPT_OID_INFO with new members (csSize = 36) it's OK.
Usually, there are back-compatibility in CryptoAPI for such changes...
The repro-example is:
typedef struct _CRYPT_OID_INFO_LH { DWORD cbSize; LPCSTR pszOID; LPCWSTR pwszName; DWORD dwGroupId; union { DWORD dwValue; ALG_ID Algid; DWORD dwLength; }; CRYPT_DATA_BLOB ExtraInfo; LPCWSTR pwszCNGAlgid; LPCWSTR pwszCNGExtraAlgid; } CRYPT_OID_INFO_LH, *PCRYPT_OID_INFO_LH;
CRYPT_OID_INFO OIDInfo = { sizeof(CRYPT_OID_INFO), "1.2.3", L"Test", CRYPT_ENHKEY_USAGE_OID_GROUP_ID }; CRYPT_OID_INFO_LH OIDInfoLH = { sizeof(CRYPT_OID_INFO_LH), "1.2.3", L"Test", CRYPT_ENHKEY_USAGE_OID_GROUP_ID }; OIDInfoLH.pwszCNGAlgid = L""; OIDInfoLH.pwszCNGExtraAlgid = L"";
DWORD dwError; BOOL res; res = CryptRegisterOIDInfo(&OIDInfo, 0); // res: FALSE dwError = GetLastError(); //dwError :0x80070057 res = CryptRegisterOIDInfo((PCCRYPT_OID_INFO)&OIDInfoLH, 0); //res: TRUE

Windows Vista

Topic:


Nick: