channels/smartcard: added detailed debug tracing

This commit is contained in:
Marc-André Moreau 2014-04-11 02:17:36 -04:00
parent dd5fab82b5
commit 8cac6519e1
5 changed files with 342 additions and 7 deletions

View File

@ -255,6 +255,8 @@ int DeviceServiceEntry(PDEVICE_SERVICE_ENTRY_POINTS pEntryPoints)
smartcard->log = WLog_Get("com.freerdp.channel.smartcard.client"); smartcard->log = WLog_Get("com.freerdp.channel.smartcard.client");
WLog_SetLogLevel(smartcard->log, WLOG_DEBUG);
smartcard->IrpQueue = MessageQueue_New(NULL); smartcard->IrpQueue = MessageQueue_New(NULL);
smartcard->OutstandingIrps = ListDictionary_New(TRUE); smartcard->OutstandingIrps = ListDictionary_New(TRUE);

View File

@ -180,13 +180,17 @@ static UINT32 smartcard_EstablishContext(SMARTCARD_DEVICE* smartcard, IRP* irp)
status = smartcard_unpack_establish_context_call(smartcard, irp->input, &call); status = smartcard_unpack_establish_context_call(smartcard, irp->input, &call);
smartcard_trace_establish_context_call(smartcard, &call);
if (status) if (status)
return status; return status;
status = ret.ReturnCode = SCardEstablishContext(call.dwScope, NULL, NULL, &hContext); status = ret.ReturnCode = SCardEstablishContext(call.dwScope, NULL, NULL, &hContext);
ret.Context.cbContext = sizeof(ULONG_PTR);
ret.Context.pbContext = (UINT64) hContext; ret.Context.pbContext = (UINT64) hContext;
ret.Context.cbContext = sizeof(ULONG_PTR);
smartcard_trace_establish_context_return(smartcard, &ret);
status = smartcard_pack_establish_context_return(smartcard, irp->output, &ret); status = smartcard_pack_establish_context_return(smartcard, irp->output, &ret);
@ -205,6 +209,13 @@ static UINT32 smartcard_ReleaseContext(SMARTCARD_DEVICE* smartcard, IRP* irp)
status = smartcard_unpack_context_call(smartcard, irp->input, &call); status = smartcard_unpack_context_call(smartcard, irp->input, &call);
WLog_Print(smartcard->log, WLOG_DEBUG, "ReleaseContext_Call {");
WLog_Print(smartcard->log, WLOG_DEBUG, "hContext: 0x%08X (%d)",
call.Context.pbContext, call.Context.cbContext);
WLog_Print(smartcard->log, WLOG_DEBUG, "}");
if (status) if (status)
return status; return status;
@ -224,6 +235,13 @@ static UINT32 smartcard_IsValidContext(SMARTCARD_DEVICE* smartcard, IRP* irp)
status = smartcard_unpack_context_call(smartcard, irp->input, &call); status = smartcard_unpack_context_call(smartcard, irp->input, &call);
WLog_Print(smartcard->log, WLOG_DEBUG, "IsValidContext_Call {");
WLog_Print(smartcard->log, WLOG_DEBUG, "hContext: 0x%08X (%d)",
call.Context.pbContext, call.Context.cbContext);
WLog_Print(smartcard->log, WLOG_DEBUG, "}");
if (status) if (status)
return status; return status;
@ -245,6 +263,8 @@ static UINT32 smartcard_ListReadersA(SMARTCARD_DEVICE* smartcard, IRP* irp)
status = smartcard_unpack_list_readers_call(smartcard, irp->input, &call); status = smartcard_unpack_list_readers_call(smartcard, irp->input, &call);
smartcard_trace_list_readers_call(smartcard, &call);
if (status) if (status)
return status; return status;
@ -260,6 +280,8 @@ static UINT32 smartcard_ListReadersA(SMARTCARD_DEVICE* smartcard, IRP* irp)
if (status) if (status)
return status; return status;
smartcard_trace_list_readers_return(smartcard, &ret);
status = smartcard_pack_list_readers_return(smartcard, irp->output, &ret); status = smartcard_pack_list_readers_return(smartcard, irp->output, &ret);
if (status) if (status)
@ -285,6 +307,8 @@ static UINT32 smartcard_ListReadersW(SMARTCARD_DEVICE* smartcard, IRP* irp)
status = smartcard_unpack_list_readers_call(smartcard, irp->input, &call); status = smartcard_unpack_list_readers_call(smartcard, irp->input, &call);
smartcard_trace_list_readers_call(smartcard, &call);
if (status) if (status)
return status; return status;
@ -300,6 +324,8 @@ static UINT32 smartcard_ListReadersW(SMARTCARD_DEVICE* smartcard, IRP* irp)
if (status) if (status)
return status; return status;
smartcard_trace_list_readers_return(smartcard, &ret);
status = smartcard_pack_list_readers_return(smartcard, irp->output, &ret); status = smartcard_pack_list_readers_return(smartcard, irp->output, &ret);
if (status) if (status)
@ -325,6 +351,8 @@ static UINT32 smartcard_GetStatusChangeA(SMARTCARD_DEVICE* smartcard, IRP* irp)
status = smartcard_unpack_get_status_change_a_call(smartcard, irp->input, &call); status = smartcard_unpack_get_status_change_a_call(smartcard, irp->input, &call);
smartcard_trace_get_status_change_a_call(smartcard, &call);
if (status) if (status)
return status; return status;
@ -346,6 +374,8 @@ static UINT32 smartcard_GetStatusChangeA(SMARTCARD_DEVICE* smartcard, IRP* irp)
CopyMemory(&ret.rgReaderStates[index].rgbAtr, &call.rgReaderStates[index].rgbAtr, 32); CopyMemory(&ret.rgReaderStates[index].rgbAtr, &call.rgReaderStates[index].rgbAtr, 32);
} }
smartcard_trace_get_status_change_return(smartcard, &ret);
status = smartcard_pack_get_status_change_return(smartcard, irp->output, &ret); status = smartcard_pack_get_status_change_return(smartcard, irp->output, &ret);
if (status) if (status)
@ -379,6 +409,8 @@ static UINT32 smartcard_GetStatusChangeW(SMARTCARD_DEVICE* smartcard, IRP* irp)
status = smartcard_unpack_get_status_change_w_call(smartcard, irp->input, &call); status = smartcard_unpack_get_status_change_w_call(smartcard, irp->input, &call);
smartcard_trace_get_status_change_w_call(smartcard, &call);
if (status) if (status)
return status; return status;
@ -400,6 +432,8 @@ static UINT32 smartcard_GetStatusChangeW(SMARTCARD_DEVICE* smartcard, IRP* irp)
CopyMemory(&ret.rgReaderStates[index].rgbAtr, &call.rgReaderStates[index].rgbAtr, 32); CopyMemory(&ret.rgReaderStates[index].rgbAtr, &call.rgReaderStates[index].rgbAtr, 32);
} }
smartcard_trace_get_status_change_return(smartcard, &ret);
status = smartcard_pack_get_status_change_return(smartcard, irp->output, &ret); status = smartcard_pack_get_status_change_return(smartcard, irp->output, &ret);
if (status) if (status)
@ -431,6 +465,13 @@ static UINT32 smartcard_Cancel(SMARTCARD_DEVICE* smartcard, IRP* irp)
status = smartcard_unpack_context_call(smartcard, irp->input, &call); status = smartcard_unpack_context_call(smartcard, irp->input, &call);
WLog_Print(smartcard->log, WLOG_DEBUG, "Cancel_Call {");
WLog_Print(smartcard->log, WLOG_DEBUG, "hContext: 0x%08X (%d)",
call.Context.pbContext, call.Context.cbContext);
WLog_Print(smartcard->log, WLOG_DEBUG, "}");
if (status) if (status)
return status; return status;
@ -453,6 +494,8 @@ UINT32 smartcard_ConnectA(SMARTCARD_DEVICE* smartcard, IRP* irp)
status = smartcard_unpack_connect_a_call(smartcard, irp->input, &call); status = smartcard_unpack_connect_a_call(smartcard, irp->input, &call);
smartcard_trace_connect_a_call(smartcard, &call);
if (status) if (status)
return status; return status;
@ -470,11 +513,13 @@ UINT32 smartcard_ConnectA(SMARTCARD_DEVICE* smartcard, IRP* irp)
if (status) if (status)
return status; return status;
ret.hCard.Context.cbContext = sizeof(ULONG_PTR);
ret.hCard.Context.pbContext = (UINT64) hContext; ret.hCard.Context.pbContext = (UINT64) hContext;
ret.hCard.Context.cbContext = sizeof(ULONG_PTR);
ret.hCard.cbHandle = sizeof(ULONG_PTR);
ret.hCard.pbHandle = (UINT64) hCard; ret.hCard.pbHandle = (UINT64) hCard;
ret.hCard.cbHandle = sizeof(ULONG_PTR);
smartcard_trace_connect_return(smartcard, &ret);
status = smartcard_pack_connect_return(smartcard, irp->output, &ret); status = smartcard_pack_connect_return(smartcard, irp->output, &ret);
@ -499,6 +544,8 @@ UINT32 smartcard_ConnectW(SMARTCARD_DEVICE* smartcard, IRP* irp)
status = smartcard_unpack_connect_w_call(smartcard, irp->input, &call); status = smartcard_unpack_connect_w_call(smartcard, irp->input, &call);
smartcard_trace_connect_w_call(smartcard, &call);
if (status) if (status)
return status; return status;
@ -516,11 +563,13 @@ UINT32 smartcard_ConnectW(SMARTCARD_DEVICE* smartcard, IRP* irp)
if (status) if (status)
return status; return status;
ret.hCard.Context.cbContext = sizeof(ULONG_PTR);
ret.hCard.Context.pbContext = (UINT64) hContext; ret.hCard.Context.pbContext = (UINT64) hContext;
ret.hCard.Context.cbContext = sizeof(ULONG_PTR);
ret.hCard.cbHandle = sizeof(ULONG_PTR);
ret.hCard.pbHandle = (UINT64) hCard; ret.hCard.pbHandle = (UINT64) hCard;
ret.hCard.cbHandle = sizeof(ULONG_PTR);
smartcard_trace_connect_return(smartcard, &ret);
status = smartcard_pack_connect_return(smartcard, irp->output, &ret); status = smartcard_pack_connect_return(smartcard, irp->output, &ret);
@ -573,6 +622,15 @@ static UINT32 smartcard_Disconnect(SMARTCARD_DEVICE* smartcard, IRP* irp)
status = smartcard_unpack_hcard_and_disposition_call(smartcard, irp->input, &call); status = smartcard_unpack_hcard_and_disposition_call(smartcard, irp->input, &call);
WLog_Print(smartcard->log, WLOG_DEBUG, "Cancel_Call {");
WLog_Print(smartcard->log, WLOG_DEBUG, "hContext: 0x%08X (%d) hCard: 0x%08X (%d)",
call.hCard.Context.pbContext, call.hCard.Context.cbContext, call.hCard.pbHandle, call.hCard.pbHandle);
WLog_Print(smartcard->log, WLOG_DEBUG, "dwDisposition: 0x%08X", call.dwDisposition);
WLog_Print(smartcard->log, WLOG_DEBUG, "}");
if (status) if (status)
return status; return status;
@ -597,6 +655,15 @@ static UINT32 smartcard_BeginTransaction(SMARTCARD_DEVICE* smartcard, IRP* irp)
status = smartcard_unpack_hcard_and_disposition_call(smartcard, irp->input, &call); status = smartcard_unpack_hcard_and_disposition_call(smartcard, irp->input, &call);
WLog_Print(smartcard->log, WLOG_DEBUG, "BeginTransaction_Call {");
WLog_Print(smartcard->log, WLOG_DEBUG, "hContext: 0x%08X (%d) hCard: 0x%08X (%d)",
call.hCard.Context.pbContext, call.hCard.Context.cbContext, call.hCard.pbHandle, call.hCard.pbHandle);
WLog_Print(smartcard->log, WLOG_DEBUG, "dwDisposition: 0x%08X", call.dwDisposition);
WLog_Print(smartcard->log, WLOG_DEBUG, "}");
if (status) if (status)
return status; return status;
@ -621,6 +688,15 @@ static UINT32 smartcard_EndTransaction(SMARTCARD_DEVICE* smartcard, IRP* irp)
status = smartcard_unpack_hcard_and_disposition_call(smartcard, irp->input, &call); status = smartcard_unpack_hcard_and_disposition_call(smartcard, irp->input, &call);
WLog_Print(smartcard->log, WLOG_DEBUG, "EndTransaction_Call {");
WLog_Print(smartcard->log, WLOG_DEBUG, "hContext: 0x%08X (%d) hCard: 0x%08X (%d)",
call.hCard.Context.pbContext, call.hCard.Context.cbContext, call.hCard.pbHandle, call.hCard.pbHandle);
WLog_Print(smartcard->log, WLOG_DEBUG, "dwDisposition: 0x%08X", call.dwDisposition);
WLog_Print(smartcard->log, WLOG_DEBUG, "}");
if (status) if (status)
return status; return status;

View File

@ -406,6 +406,18 @@ UINT32 smartcard_unpack_establish_context_call(SMARTCARD_DEVICE* smartcard, wStr
return SCARD_S_SUCCESS; return SCARD_S_SUCCESS;
} }
void smartcard_trace_establish_context_call(SMARTCARD_DEVICE* smartcard, EstablishContext_Call* call)
{
if (!WLog_IsLevelActive(smartcard->log, WLOG_DEBUG))
return;
WLog_Print(smartcard->log, WLOG_DEBUG, "EstablishContext_Call {");
WLog_Print(smartcard->log, WLOG_DEBUG, "dwScope: 0x%08X", call->dwScope);
WLog_Print(smartcard->log, WLOG_DEBUG, "}");
}
UINT32 smartcard_pack_establish_context_return(SMARTCARD_DEVICE* smartcard, wStream* s, EstablishContext_Return* ret) UINT32 smartcard_pack_establish_context_return(SMARTCARD_DEVICE* smartcard, wStream* s, EstablishContext_Return* ret)
{ {
UINT32 status; UINT32 status;
@ -423,6 +435,21 @@ UINT32 smartcard_pack_establish_context_return(SMARTCARD_DEVICE* smartcard, wStr
return SCARD_S_SUCCESS; return SCARD_S_SUCCESS;
} }
void smartcard_trace_establish_context_return(SMARTCARD_DEVICE* smartcard, EstablishContext_Return* ret)
{
if (!WLog_IsLevelActive(smartcard->log, WLOG_DEBUG))
return;
WLog_Print(smartcard->log, WLOG_DEBUG, "EstablishContext_Call {");
WLog_Print(smartcard->log, WLOG_DEBUG, "ReturnCode: 0x%08X", ret->ReturnCode);
WLog_Print(smartcard->log, WLOG_DEBUG, "hContext: 0x%08X (%d)",
ret->Context.pbContext, ret->Context.cbContext);
WLog_Print(smartcard->log, WLOG_DEBUG, "}");
}
UINT32 smartcard_unpack_context_call(SMARTCARD_DEVICE* smartcard, wStream* s, Context_Call* call) UINT32 smartcard_unpack_context_call(SMARTCARD_DEVICE* smartcard, wStream* s, Context_Call* call)
{ {
UINT32 status; UINT32 status;
@ -513,6 +540,34 @@ UINT32 smartcard_unpack_list_readers_call(SMARTCARD_DEVICE* smartcard, wStream*
return SCARD_S_SUCCESS; return SCARD_S_SUCCESS;
} }
void smartcard_trace_list_readers_call(SMARTCARD_DEVICE* smartcard, ListReaders_Call* call)
{
BOOL unicode;
char* mszGroupsA = NULL;
if (!WLog_IsLevelActive(smartcard->log, WLOG_DEBUG))
return;
unicode = ((call->cBytes > 2) && !call->mszGroups[1]) ? TRUE : FALSE;
if (unicode)
ConvertFromUnicode(CP_UTF8, 0, (WCHAR*) call->mszGroups, call->cBytes / 2, &mszGroupsA, 0, NULL, NULL);
WLog_Print(smartcard->log, WLOG_DEBUG, "ListReaders_Call {");
WLog_Print(smartcard->log, WLOG_DEBUG, "hContext: 0x%08X (%d)",
call->Context.pbContext, call->Context.cbContext);
WLog_Print(smartcard->log, WLOG_DEBUG,
"cBytes: %d mszGroups: %s fmszReadersIsNULL: %d cchReaders: 0x%08X",
call->cBytes, mszGroupsA, call->fmszReadersIsNULL, call->cchReaders);
WLog_Print(smartcard->log, WLOG_DEBUG, "}");
if (unicode)
free(mszGroupsA);
}
UINT32 smartcard_pack_list_readers_return(SMARTCARD_DEVICE* smartcard, wStream* s, ListReaders_Return* ret) UINT32 smartcard_pack_list_readers_return(SMARTCARD_DEVICE* smartcard, wStream* s, ListReaders_Return* ret)
{ {
UINT32 mszNdrPtr; UINT32 mszNdrPtr;
@ -537,6 +592,47 @@ UINT32 smartcard_pack_list_readers_return(SMARTCARD_DEVICE* smartcard, wStream*
return SCARD_S_SUCCESS; return SCARD_S_SUCCESS;
} }
void smartcard_trace_list_readers_return(SMARTCARD_DEVICE* smartcard, ListReaders_Return* ret)
{
int index;
int length;
BOOL unicode;
char* mszA = NULL;
if (!WLog_IsLevelActive(smartcard->log, WLOG_DEBUG))
return;
unicode = ((ret->cBytes > 2) && !ret->msz[1]) ? TRUE : FALSE;
if (unicode)
{
length = ret->cBytes / 2;
ConvertFromUnicode(CP_UTF8, 0, (WCHAR*) ret->msz, length, &mszA, 0, NULL, NULL);
}
else
{
length = ret->cBytes;
mszA = (char*) malloc(length);
CopyMemory(mszA, ret->msz, ret->cBytes);
}
for (index = 0; index < length - 2; index++)
{
if (mszA[index] == '\0')
mszA[index] = ',';
}
WLog_Print(smartcard->log, WLOG_DEBUG, "ListReaders_Return {");
WLog_Print(smartcard->log, WLOG_DEBUG,
"ReturnCode: 0x%08X cBytes: %d msz: %s",
ret->ReturnCode, ret->cBytes, mszA);
WLog_Print(smartcard->log, WLOG_DEBUG, "}");
free(mszA);
}
UINT32 smartcard_unpack_connect_common(SMARTCARD_DEVICE* smartcard, wStream* s, Connect_Common* common) UINT32 smartcard_unpack_connect_common(SMARTCARD_DEVICE* smartcard, wStream* s, Connect_Common* common)
{ {
UINT32 status; UINT32 status;
@ -586,7 +682,7 @@ UINT32 smartcard_unpack_connect_a_call(SMARTCARD_DEVICE* smartcard, wStream* s,
Stream_Seek_UINT32(s); /* NdrOffset (4 bytes) */ Stream_Seek_UINT32(s); /* NdrOffset (4 bytes) */
Stream_Read_UINT32(s, count); /* NdrActualCount (4 bytes) */ Stream_Read_UINT32(s, count); /* NdrActualCount (4 bytes) */
call->szReader = malloc(count + 1); call->szReader = (unsigned char*) malloc(count + 1);
Stream_Read(s, call->szReader, count); Stream_Read(s, call->szReader, count);
smartcard_unpack_read_size_align(smartcard, s, count, 4); smartcard_unpack_read_size_align(smartcard, s, count, 4);
call->szReader[count] = '\0'; call->szReader[count] = '\0';
@ -596,6 +692,22 @@ UINT32 smartcard_unpack_connect_a_call(SMARTCARD_DEVICE* smartcard, wStream* s,
return SCARD_S_SUCCESS; return SCARD_S_SUCCESS;
} }
void smartcard_trace_connect_a_call(SMARTCARD_DEVICE* smartcard, ConnectA_Call* call)
{
if (!WLog_IsLevelActive(smartcard->log, WLOG_DEBUG))
return;
WLog_Print(smartcard->log, WLOG_DEBUG, "ConnectA_Call {");
WLog_Print(smartcard->log, WLOG_DEBUG, "hContext: 0x%08X (%d)",
call->Common.Context.pbContext, call->Common.Context.cbContext);
WLog_Print(smartcard->log, WLOG_DEBUG, "szReader: %s dwShareMode: 0x%08X dwPreferredProtocols: 0x%08X",
call->szReader, call->Common.dwShareMode, call->Common.dwPreferredProtocols);
WLog_Print(smartcard->log, WLOG_DEBUG, "}");
}
UINT32 smartcard_unpack_connect_w_call(SMARTCARD_DEVICE* smartcard, wStream* s, ConnectW_Call* call) UINT32 smartcard_unpack_connect_w_call(SMARTCARD_DEVICE* smartcard, wStream* s, ConnectW_Call* call)
{ {
UINT32 status; UINT32 status;
@ -623,7 +735,7 @@ UINT32 smartcard_unpack_connect_w_call(SMARTCARD_DEVICE* smartcard, wStream* s,
Stream_Seek_UINT32(s); /* NdrOffset (4 bytes) */ Stream_Seek_UINT32(s); /* NdrOffset (4 bytes) */
Stream_Read_UINT32(s, count); /* NdrActualCount (4 bytes) */ Stream_Read_UINT32(s, count); /* NdrActualCount (4 bytes) */
call->szReader = malloc((count + 1) * 2); call->szReader = (WCHAR*) malloc((count + 1) * 2);
Stream_Read(s, call->szReader, (count * 2)); Stream_Read(s, call->szReader, (count * 2));
smartcard_unpack_read_size_align(smartcard, s, (count * 2), 4); smartcard_unpack_read_size_align(smartcard, s, (count * 2), 4);
call->szReader[count] = '\0'; call->szReader[count] = '\0';
@ -633,6 +745,28 @@ UINT32 smartcard_unpack_connect_w_call(SMARTCARD_DEVICE* smartcard, wStream* s,
return SCARD_S_SUCCESS; return SCARD_S_SUCCESS;
} }
void smartcard_trace_connect_w_call(SMARTCARD_DEVICE* smartcard, ConnectW_Call* call)
{
char* szReaderA = NULL;
if (!WLog_IsLevelActive(smartcard->log, WLOG_DEBUG))
return;
ConvertFromUnicode(CP_UTF8, 0, call->szReader, -1, &szReaderA, 0, NULL, NULL);
WLog_Print(smartcard->log, WLOG_DEBUG, "ConnectA_Call {");
WLog_Print(smartcard->log, WLOG_DEBUG, "hContext: 0x%08X (%d)",
call->Common.Context.pbContext, call->Common.Context.cbContext);
WLog_Print(smartcard->log, WLOG_DEBUG, "szReader: %s dwShareMode: 0x%08X dwPreferredProtocols: %d",
szReaderA, call->Common.dwShareMode, call->Common.dwPreferredProtocols);
WLog_Print(smartcard->log, WLOG_DEBUG, "}");
free(szReaderA);
}
UINT32 smartcard_pack_connect_return(SMARTCARD_DEVICE* smartcard, wStream* s, Connect_Return* ret) UINT32 smartcard_pack_connect_return(SMARTCARD_DEVICE* smartcard, wStream* s, Connect_Return* ret)
{ {
UINT32 status; UINT32 status;
@ -652,6 +786,22 @@ UINT32 smartcard_pack_connect_return(SMARTCARD_DEVICE* smartcard, wStream* s, Co
return SCARD_S_SUCCESS; return SCARD_S_SUCCESS;
} }
void smartcard_trace_connect_return(SMARTCARD_DEVICE* smartcard, Connect_Return* ret)
{
if (!WLog_IsLevelActive(smartcard->log, WLOG_DEBUG))
return;
WLog_Print(smartcard->log, WLOG_DEBUG, "Connect_Return {");
WLog_Print(smartcard->log, WLOG_DEBUG, "hContext: 0x%08X (%d) hCard: 0x%08X (%d)",
ret->hCard.Context.pbContext, ret->hCard.Context.cbContext, ret->hCard.pbHandle, ret->hCard.cbHandle);
WLog_Print(smartcard->log, WLOG_DEBUG, "dwActiveProtocol: 0x%08X",
ret->dwActiveProtocol);
WLog_Print(smartcard->log, WLOG_DEBUG, "}");
}
UINT32 smartcard_unpack_reconnect_call(SMARTCARD_DEVICE* smartcard, wStream* s, Reconnect_Call* call) UINT32 smartcard_unpack_reconnect_call(SMARTCARD_DEVICE* smartcard, wStream* s, Reconnect_Call* call)
{ {
UINT32 status; UINT32 status;
@ -830,6 +980,35 @@ UINT32 smartcard_unpack_get_status_change_a_call(SMARTCARD_DEVICE* smartcard, wS
return SCARD_S_SUCCESS; return SCARD_S_SUCCESS;
} }
void smartcard_trace_get_status_change_a_call(SMARTCARD_DEVICE* smartcard, GetStatusChangeA_Call* call)
{
UINT32 index;
LPSCARD_READERSTATEA readerState;
if (!WLog_IsLevelActive(smartcard->log, WLOG_DEBUG))
return;
WLog_Print(smartcard->log, WLOG_DEBUG, "GetStatusChangeA_Call {");
WLog_Print(smartcard->log, WLOG_DEBUG, "hContext: 0x%08X (%d)",
call->Context.pbContext, call->Context.cbContext);
WLog_Print(smartcard->log, WLOG_DEBUG, "dwTimeOut: 0x%08X cReaders: %d",
call->dwTimeOut, call->cReaders);
for (index = 0; index < call->cReaders; index++)
{
readerState = &call->rgReaderStates[index];
WLog_Print(smartcard->log, WLOG_DEBUG,
"\t[%d]: szReader: %s dwCurrentState: 0x%08X dwEventState: 0x%08X cbAtr: %d",
index, readerState->szReader, readerState->dwCurrentState,
readerState->dwEventState, readerState->cbAtr);
}
WLog_Print(smartcard->log, WLOG_DEBUG, "}");
}
UINT32 smartcard_unpack_get_status_change_w_call(SMARTCARD_DEVICE* smartcard, wStream* s, GetStatusChangeW_Call* call) UINT32 smartcard_unpack_get_status_change_w_call(SMARTCARD_DEVICE* smartcard, wStream* s, GetStatusChangeW_Call* call)
{ {
UINT32 index; UINT32 index;
@ -939,6 +1118,41 @@ UINT32 smartcard_unpack_get_status_change_w_call(SMARTCARD_DEVICE* smartcard, wS
return SCARD_S_SUCCESS; return SCARD_S_SUCCESS;
} }
void smartcard_trace_get_status_change_w_call(SMARTCARD_DEVICE* smartcard, GetStatusChangeW_Call* call)
{
UINT32 index;
LPSCARD_READERSTATEW readerState;
if (!WLog_IsLevelActive(smartcard->log, WLOG_DEBUG))
return;
WLog_Print(smartcard->log, WLOG_DEBUG, "GetStatusChangeW_Call {");
WLog_Print(smartcard->log, WLOG_DEBUG, "hContext: 0x%08X (%d)",
call->Context.pbContext, call->Context.cbContext);
WLog_Print(smartcard->log, WLOG_DEBUG, "dwTimeOut: 0x%08X cReaders: %d",
call->dwTimeOut, call->cReaders);
for (index = 0; index < call->cReaders; index++)
{
char* szReaderA = NULL;
readerState = &call->rgReaderStates[index];
ConvertFromUnicode(CP_UTF8, 0, readerState->szReader, -1, &szReaderA, 0, NULL, NULL);
WLog_Print(smartcard->log, WLOG_DEBUG,
"\t[%d]: szReader: %s dwCurrentState: 0x%08X dwEventState: 0x%08X cbAtr: %d",
index, szReaderA, readerState->dwCurrentState,
readerState->dwEventState, readerState->cbAtr);
free(szReaderA);
}
WLog_Print(smartcard->log, WLOG_DEBUG, "}");
}
UINT32 smartcard_pack_get_status_change_return(SMARTCARD_DEVICE* smartcard, wStream* s, GetStatusChange_Return* ret) UINT32 smartcard_pack_get_status_change_return(SMARTCARD_DEVICE* smartcard, wStream* s, GetStatusChange_Return* ret)
{ {
UINT32 index; UINT32 index;
@ -961,6 +1175,31 @@ UINT32 smartcard_pack_get_status_change_return(SMARTCARD_DEVICE* smartcard, wStr
return SCARD_S_SUCCESS; return SCARD_S_SUCCESS;
} }
void smartcard_trace_get_status_change_return(SMARTCARD_DEVICE* smartcard, GetStatusChange_Return* ret)
{
UINT32 index;
ReaderState_Return* rgReaderState;
if (!WLog_IsLevelActive(smartcard->log, WLOG_DEBUG))
return;
WLog_Print(smartcard->log, WLOG_DEBUG, "GetStatusChange_Return {");
WLog_Print(smartcard->log, WLOG_DEBUG, "ReturnCode: 0x%08X cReaders: %d",
ret->ReturnCode, ret->cReaders);
for (index = 0; index < ret->cReaders; index++)
{
rgReaderState = &(ret->rgReaderStates[index]);
WLog_Print(smartcard->log, WLOG_DEBUG,
"\t[%d]: dwCurrentState: 0x%08X dwEventState: 0x%08X cbAtr: %d",
index, rgReaderState->dwCurrentState, rgReaderState->dwEventState, rgReaderState->cbAtr);
}
WLog_Print(smartcard->log, WLOG_DEBUG, "}");
}
UINT32 smartcard_unpack_state_call(SMARTCARD_DEVICE* smartcard, wStream* s, State_Call* call) UINT32 smartcard_unpack_state_call(SMARTCARD_DEVICE* smartcard, wStream* s, State_Call* call)
{ {
UINT32 status; UINT32 status;

View File

@ -445,17 +445,27 @@ UINT32 smartcard_unpack_redir_scard_handle_ref(SMARTCARD_DEVICE* smartcard, wStr
UINT32 smartcard_pack_redir_scard_handle_ref(SMARTCARD_DEVICE* smartcard, wStream* s, REDIR_SCARDHANDLE* handle); UINT32 smartcard_pack_redir_scard_handle_ref(SMARTCARD_DEVICE* smartcard, wStream* s, REDIR_SCARDHANDLE* handle);
UINT32 smartcard_unpack_establish_context_call(SMARTCARD_DEVICE* smartcard, wStream* s, EstablishContext_Call* call); UINT32 smartcard_unpack_establish_context_call(SMARTCARD_DEVICE* smartcard, wStream* s, EstablishContext_Call* call);
void smartcard_trace_establish_context_call(SMARTCARD_DEVICE* smartcard, EstablishContext_Call* call);
UINT32 smartcard_pack_establish_context_return(SMARTCARD_DEVICE* smartcard, wStream* s, EstablishContext_Return* ret); UINT32 smartcard_pack_establish_context_return(SMARTCARD_DEVICE* smartcard, wStream* s, EstablishContext_Return* ret);
void smartcard_trace_establish_context_return(SMARTCARD_DEVICE* smartcard, EstablishContext_Return* ret);
UINT32 smartcard_unpack_context_call(SMARTCARD_DEVICE* smartcard, wStream* s, Context_Call* call); UINT32 smartcard_unpack_context_call(SMARTCARD_DEVICE* smartcard, wStream* s, Context_Call* call);
UINT32 smartcard_unpack_list_readers_call(SMARTCARD_DEVICE* smartcard, wStream* s, ListReaders_Call* call); UINT32 smartcard_unpack_list_readers_call(SMARTCARD_DEVICE* smartcard, wStream* s, ListReaders_Call* call);
void smartcard_trace_list_readers_call(SMARTCARD_DEVICE* smartcard, ListReaders_Call* call);
UINT32 smartcard_pack_list_readers_return(SMARTCARD_DEVICE* smartcard, wStream* s, ListReaders_Return* ret); UINT32 smartcard_pack_list_readers_return(SMARTCARD_DEVICE* smartcard, wStream* s, ListReaders_Return* ret);
void smartcard_trace_list_readers_return(SMARTCARD_DEVICE* smartcard, ListReaders_Return* ret);
UINT32 smartcard_unpack_connect_a_call(SMARTCARD_DEVICE* smartcard, wStream* s, ConnectA_Call* call); UINT32 smartcard_unpack_connect_a_call(SMARTCARD_DEVICE* smartcard, wStream* s, ConnectA_Call* call);
void smartcard_trace_connect_a_call(SMARTCARD_DEVICE* smartcard, ConnectA_Call* call);
UINT32 smartcard_unpack_connect_w_call(SMARTCARD_DEVICE* smartcard, wStream* s, ConnectW_Call* call); UINT32 smartcard_unpack_connect_w_call(SMARTCARD_DEVICE* smartcard, wStream* s, ConnectW_Call* call);
void smartcard_trace_connect_w_call(SMARTCARD_DEVICE* smartcard, ConnectW_Call* call);
UINT32 smartcard_pack_connect_return(SMARTCARD_DEVICE* smartcard, wStream* s, Connect_Return* ret); UINT32 smartcard_pack_connect_return(SMARTCARD_DEVICE* smartcard, wStream* s, Connect_Return* ret);
void smartcard_trace_connect_return(SMARTCARD_DEVICE* smartcard, Connect_Return* ret);
UINT32 smartcard_unpack_reconnect_call(SMARTCARD_DEVICE* smartcard, wStream* s, Reconnect_Call* call); UINT32 smartcard_unpack_reconnect_call(SMARTCARD_DEVICE* smartcard, wStream* s, Reconnect_Call* call);
UINT32 smartcard_pack_reconnect_return(SMARTCARD_DEVICE* smartcard, wStream* s, Reconnect_Return* ret); UINT32 smartcard_pack_reconnect_return(SMARTCARD_DEVICE* smartcard, wStream* s, Reconnect_Return* ret);
@ -463,8 +473,13 @@ UINT32 smartcard_pack_reconnect_return(SMARTCARD_DEVICE* smartcard, wStream* s,
UINT32 smartcard_unpack_hcard_and_disposition_call(SMARTCARD_DEVICE* smartcard, wStream* s, HCardAndDisposition_Call* call); UINT32 smartcard_unpack_hcard_and_disposition_call(SMARTCARD_DEVICE* smartcard, wStream* s, HCardAndDisposition_Call* call);
UINT32 smartcard_unpack_get_status_change_a_call(SMARTCARD_DEVICE* smartcard, wStream* s, GetStatusChangeA_Call* call); UINT32 smartcard_unpack_get_status_change_a_call(SMARTCARD_DEVICE* smartcard, wStream* s, GetStatusChangeA_Call* call);
void smartcard_trace_get_status_change_a_call(SMARTCARD_DEVICE* smartcard, GetStatusChangeA_Call* call);
UINT32 smartcard_unpack_get_status_change_w_call(SMARTCARD_DEVICE* smartcard, wStream* s, GetStatusChangeW_Call* call); UINT32 smartcard_unpack_get_status_change_w_call(SMARTCARD_DEVICE* smartcard, wStream* s, GetStatusChangeW_Call* call);
void smartcard_trace_get_status_change_w_call(SMARTCARD_DEVICE* smartcard, GetStatusChangeW_Call* call);
UINT32 smartcard_pack_get_status_change_return(SMARTCARD_DEVICE* smartcard, wStream* s, GetStatusChange_Return* ret); UINT32 smartcard_pack_get_status_change_return(SMARTCARD_DEVICE* smartcard, wStream* s, GetStatusChange_Return* ret);
void smartcard_trace_get_status_change_return(SMARTCARD_DEVICE* smartcard, GetStatusChange_Return* ret);
UINT32 smartcard_unpack_state_call(SMARTCARD_DEVICE* smartcard, wStream* s, State_Call* call); UINT32 smartcard_unpack_state_call(SMARTCARD_DEVICE* smartcard, wStream* s, State_Call* call);
UINT32 smartcard_pack_state_return(SMARTCARD_DEVICE* smartcard, wStream* s, State_Return* ret); UINT32 smartcard_pack_state_return(SMARTCARD_DEVICE* smartcard, wStream* s, State_Return* ret);

View File

@ -246,6 +246,9 @@ WINPR_API void WLog_PrintMessage(wLog* log, wLogMessage* message, ...);
WLog_PrintMessage(_log, &(_log_message), ## __VA_ARGS__ ); \ WLog_PrintMessage(_log, &(_log_message), ## __VA_ARGS__ ); \
} }
#define WLog_IsLevelActive(_log, _log_level) \
(_log_level >= WLog_GetLogLevel(_log))
WINPR_API DWORD WLog_GetLogLevel(wLog* log); WINPR_API DWORD WLog_GetLogLevel(wLog* log);
WINPR_API void WLog_SetLogLevel(wLog* log, DWORD logLevel); WINPR_API void WLog_SetLogLevel(wLog* log, DWORD logLevel);