Andrew Talbot wrote:
typedef BOOL (WINAPI *CryptDecodeObjectFunc)(DWORD, LPCSTR, const BYTE *, DWORD, DWORD, void *, DWORD *); typedef BOOL (WINAPI *CryptDecodeObjectExFunc)(DWORD, LPCSTR, const BYTE *,
- DWORD, DWORD, PCRYPT_DECODE_PARA, void *, DWORD *);
- DWORD, DWORD, const CRYPT_DECODE_PARA *, void *, DWORD *);
This declaration needs to match that of CryptDecodeObjectEx in wincrypt.h.
Robert Shearman wrote:
Andrew Talbot wrote:
typedef BOOL (WINAPI *CryptDecodeObjectFunc)(DWORD, LPCSTR, const BYTE *, DWORD, DWORD, void *, DWORD *); typedef BOOL (WINAPI *CryptDecodeObjectExFunc)(DWORD, LPCSTR, const BYTE *,
- DWORD, DWORD, PCRYPT_DECODE_PARA, void *, DWORD *);
- DWORD, DWORD, const CRYPT_DECODE_PARA *, void *, DWORD *);
This declaration needs to match that of CryptDecodeObjectEx in wincrypt.h.
Hi Rob,
I am just curious to know why. This was my reasoning:
CryptDecodeObjectEx - which I haven't touched - calls a selected local function via this local function pointer. If the local function doesn't alter the data to which a parameter points, is it not safe to constify the local version of the parameter?
If there were an API function like so:
WINAPI INT StrpCmpA(LPSTR pszStrA, LPSTR pszStrB);
it would be OK to implement it with a helper function whose prototype was something like:
static inline int strcmp(const char *s1, const char *s2);
as long as the promises of s1 and s2 were kept.
The only bit of memory-altering that I believe the PCRYPT_DECODE_PARA pointer is associated with is this:
250 if (pDecodePara && pDecodePara->pfnAlloc) 251 *(BYTE **)pvStructInfo = pDecodePara->pfnAlloc(bytesNeeded);
but I don't think that this would preclude constifying the local parameter, since it's only calling a function that allocates memory for a disconnected structure.
-- Andy.