crypt32: Add base message type and use it to implement CryptMsgDuplicate and CryptMsgClose.
This commit is contained in:
parent
1c837f16ac
commit
b790a09efb
|
@ -24,6 +24,24 @@
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(crypt);
|
WINE_DEFAULT_DEBUG_CHANNEL(crypt);
|
||||||
|
|
||||||
|
/* Called when a message's ref count reaches zero. Free any message-specific
|
||||||
|
* data here.
|
||||||
|
*/
|
||||||
|
typedef void (*CryptMsgCloseFunc)(HCRYPTMSG msg);
|
||||||
|
|
||||||
|
typedef struct _CryptMsgBase
|
||||||
|
{
|
||||||
|
LONG ref;
|
||||||
|
DWORD open_flags;
|
||||||
|
CryptMsgCloseFunc close;
|
||||||
|
} CryptMsgBase;
|
||||||
|
|
||||||
|
static inline void CryptMsgBase_Init(CryptMsgBase *msg, DWORD dwFlags)
|
||||||
|
{
|
||||||
|
msg->ref = 1;
|
||||||
|
msg->open_flags = dwFlags;
|
||||||
|
}
|
||||||
|
|
||||||
static inline const char *MSG_TYPE_STR(DWORD type)
|
static inline const char *MSG_TYPE_STR(DWORD type)
|
||||||
{
|
{
|
||||||
switch (type)
|
switch (type)
|
||||||
|
@ -89,13 +107,33 @@ HCRYPTMSG WINAPI CryptMsgOpenToDecode(DWORD dwMsgEncodingType, DWORD dwFlags,
|
||||||
|
|
||||||
HCRYPTMSG WINAPI CryptMsgDuplicate(HCRYPTMSG hCryptMsg)
|
HCRYPTMSG WINAPI CryptMsgDuplicate(HCRYPTMSG hCryptMsg)
|
||||||
{
|
{
|
||||||
FIXME("(%p): stub\n", hCryptMsg);
|
TRACE("(%p)\n", hCryptMsg);
|
||||||
|
|
||||||
|
if (hCryptMsg)
|
||||||
|
{
|
||||||
|
CryptMsgBase *msg = (CryptMsgBase *)hCryptMsg;
|
||||||
|
|
||||||
|
InterlockedIncrement(&msg->ref);
|
||||||
|
}
|
||||||
return hCryptMsg;
|
return hCryptMsg;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL WINAPI CryptMsgClose(HCRYPTMSG hCryptMsg)
|
BOOL WINAPI CryptMsgClose(HCRYPTMSG hCryptMsg)
|
||||||
{
|
{
|
||||||
FIXME("(%p): stub\n", hCryptMsg);
|
TRACE("(%p)\n", hCryptMsg);
|
||||||
|
|
||||||
|
if (hCryptMsg)
|
||||||
|
{
|
||||||
|
CryptMsgBase *msg = (CryptMsgBase *)hCryptMsg;
|
||||||
|
|
||||||
|
if (InterlockedDecrement(&msg->ref) == 0)
|
||||||
|
{
|
||||||
|
TRACE("freeing %p\n", msg);
|
||||||
|
if (msg->close)
|
||||||
|
msg->close(msg);
|
||||||
|
CryptMemFree(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue