FreeRDP
smartcard_call.c File Reference
#include <freerdp/config.h>
#include <winpr/assert.h>
#include <winpr/crt.h>
#include <winpr/print.h>
#include <winpr/stream.h>
#include <winpr/library.h>
#include <winpr/smartcard.h>
#include <freerdp/freerdp.h>
#include <freerdp/channels/rdpdr.h>
#include <freerdp/channels/scard.h>
#include <freerdp/utils/rdpdr_utils.h>
#include <freerdp/utils/smartcard_pack.h>
#include <freerdp/utils/smartcard_call.h>
#include <freerdp/log.h>

Macros

#define TAG   FREERDP_TAG("utils.smartcard.call")
 
#define wrap(ctx, fkt, ...)    ctx->useEmulatedCard ? SCARD_F_INTERNAL_ERROR : ctx->pWinSCardApi->pfn##fkt(__VA_ARGS__)
 
#define wrap_ptr(ctx, fkt, ...)    ctx->useEmulatedCard ? NULL : ctx->pWinSCardApi->pfn##fkt(__VA_ARGS__)
 

Functions

static void context_free (void *arg)
 
static LONG smartcard_EstablishContext_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_ReleaseContext_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_IsValidContext_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_ListReaderGroupsA_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_ListReaderGroupsW_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static BOOL filter_match (wLinkedList *list, LPCSTR reader, size_t readerLen)
 
static DWORD filter_device_by_name_a (wLinkedList *list, LPSTR *mszReaders, DWORD cchReaders)
 
static DWORD filter_device_by_name_w (wLinkedList *list, LPWSTR *mszReaders, DWORD cchReaders)
 
static LONG smartcard_ListReadersA_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_ListReadersW_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_IntroduceReaderGroupA_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_IntroduceReaderGroupW_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_IntroduceReaderA_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_IntroduceReaderW_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_ForgetReaderA_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_ForgetReaderW_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_AddReaderToGroupA_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_AddReaderToGroupW_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_RemoveReaderFromGroupA_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_RemoveReaderFromGroupW_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_LocateCardsA_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_LocateCardsW_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_ReadCacheA_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_ReadCacheW_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_WriteCacheA_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_WriteCacheW_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_GetTransmitCount_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_ReleaseStartedEvent_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_GetReaderIcon_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_GetDeviceTypeId_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_GetStatusChangeA_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_GetStatusChangeW_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_Cancel_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_ConnectA_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_ConnectW_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_Reconnect_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_Disconnect_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_BeginTransaction_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_EndTransaction_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_State_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_StatusA_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_StatusW_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_Transmit_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_Control_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_GetAttrib_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_SetAttrib_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_AccessStartedEvent_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
static LONG smartcard_LocateCardsByATRA_Call (scard_call_context *smartcard, wStream *out, SMARTCARD_OPERATION *operation)
 
LONG smartcard_irp_device_control_call (scard_call_context *smartcard, wStream *out, UINT32 *pIoStatus, SMARTCARD_OPERATION *operation)
 
scard_call_context * smartcard_call_context_new (const rdpSettings *settings)
 
void smartcard_call_context_free (scard_call_context *ctx)
 
BOOL smartcard_call_context_add (scard_call_context *ctx, const char *name)
 
BOOL smartcard_call_cancel_context (scard_call_context *ctx, SCARDCONTEXT hContext)
 
BOOL smartcard_call_release_context (scard_call_context *ctx, SCARDCONTEXT hContext)
 
BOOL smartcard_call_cancel_all_context (scard_call_context *ctx)
 
BOOL smarcard_call_set_callbacks (scard_call_context *ctx, void *userdata, void *(*fn_new)(void *, SCARDCONTEXT), void(*fn_free)(void *))
 
void * smartcard_call_get_context (scard_call_context *ctx, SCARDCONTEXT hContext)
 
BOOL smartcard_call_is_configured (scard_call_context *ctx)
 
BOOL smartcard_call_context_signal_stop (scard_call_context *ctx, BOOL reset)
 

Macro Definition Documentation

◆ TAG

#define TAG   FREERDP_TAG("utils.smartcard.call")

FreeRDP: A Remote Desktop Protocol Implementation Smartcard Device Service Virtual Channel

Copyright (C) Alexi Volkov alexi.nosp@m.@myr.nosp@m.ealbo.nosp@m.x.co.nosp@m.m 2006 Copyright 2011 O.S. Systems Software Ltda. Copyright 2011 Anthony Tong atong.nosp@m.@tru.nosp@m.stedc.nosp@m.s.co.nosp@m.m Copyright 2015 Thincast Technologies GmbH Copyright 2015 DI (FH) Martin Haimberger marti.nosp@m.n.ha.nosp@m.imber.nosp@m.ger@.nosp@m.thinc.nosp@m.ast..nosp@m.com Copyright 2017 Armin Novak armin.nosp@m..nov.nosp@m.ak@th.nosp@m.inca.nosp@m.st.co.nosp@m.m Copyright 2017 Thincast Technologies GmbH

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

◆ wrap

#define wrap (   ctx,
  fkt,
  ... 
)     ctx->useEmulatedCard ? SCARD_F_INTERNAL_ERROR : ctx->pWinSCardApi->pfn##fkt(__VA_ARGS__)

◆ wrap_ptr

#define wrap_ptr (   ctx,
  fkt,
  ... 
)     ctx->useEmulatedCard ? NULL : ctx->pWinSCardApi->pfn##fkt(__VA_ARGS__)

Function Documentation

◆ context_free()

void context_free ( void *  arg)
static
Here is the caller graph for this function:

◆ filter_device_by_name_a()

static DWORD filter_device_by_name_a ( wLinkedList *  list,
LPSTR *  mszReaders,
DWORD  cchReaders 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ filter_device_by_name_w()

static DWORD filter_device_by_name_w ( wLinkedList *  list,
LPWSTR *  mszReaders,
DWORD  cchReaders 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ filter_match()

static BOOL filter_match ( wLinkedList *  list,
LPCSTR  reader,
size_t  readerLen 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smarcard_call_set_callbacks()

BOOL smarcard_call_set_callbacks ( scard_call_context *  ctx,
void *  userdata,
void *(*)(void *, SCARDCONTEXT fn_new,
void(*)(void *)  fn_free 
)
Here is the caller graph for this function:

◆ smartcard_AccessStartedEvent_Call()

static LONG smartcard_AccessStartedEvent_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_AddReaderToGroupA_Call()

static LONG smartcard_AddReaderToGroupA_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_AddReaderToGroupW_Call()

static LONG smartcard_AddReaderToGroupW_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_BeginTransaction_Call()

static LONG smartcard_BeginTransaction_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_call_cancel_all_context()

BOOL smartcard_call_cancel_all_context ( scard_call_context *  ctx)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_call_cancel_context()

BOOL smartcard_call_cancel_context ( scard_call_context *  ctx,
SCARDCONTEXT  hContext 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_call_context_add()

BOOL smartcard_call_context_add ( scard_call_context *  ctx,
const char *  name 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_call_context_free()

void smartcard_call_context_free ( scard_call_context *  ctx)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_call_context_new()

scard_call_context* smartcard_call_context_new ( const rdpSettings *  settings)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_call_context_signal_stop()

BOOL smartcard_call_context_signal_stop ( scard_call_context *  ctx,
BOOL  reset 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_call_get_context()

void* smartcard_call_get_context ( scard_call_context *  ctx,
SCARDCONTEXT  hContext 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_call_is_configured()

BOOL smartcard_call_is_configured ( scard_call_context *  ctx)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_call_release_context()

BOOL smartcard_call_release_context ( scard_call_context *  ctx,
SCARDCONTEXT  hContext 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_Cancel_Call()

static LONG smartcard_Cancel_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_ConnectA_Call()

static LONG smartcard_ConnectA_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_ConnectW_Call()

static LONG smartcard_ConnectW_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_Control_Call()

static LONG smartcard_Control_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_Disconnect_Call()

static LONG smartcard_Disconnect_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_EndTransaction_Call()

static LONG smartcard_EndTransaction_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_EstablishContext_Call()

static LONG smartcard_EstablishContext_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_ForgetReaderA_Call()

static LONG smartcard_ForgetReaderA_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_ForgetReaderW_Call()

static LONG smartcard_ForgetReaderW_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_GetAttrib_Call()

static LONG smartcard_GetAttrib_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_GetDeviceTypeId_Call()

static LONG smartcard_GetDeviceTypeId_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_GetReaderIcon_Call()

static LONG smartcard_GetReaderIcon_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_GetStatusChangeA_Call()

static LONG smartcard_GetStatusChangeA_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_GetStatusChangeW_Call()

static LONG smartcard_GetStatusChangeW_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_GetTransmitCount_Call()

static LONG smartcard_GetTransmitCount_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_IntroduceReaderA_Call()

static LONG smartcard_IntroduceReaderA_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_IntroduceReaderGroupA_Call()

static LONG smartcard_IntroduceReaderGroupA_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_IntroduceReaderGroupW_Call()

static LONG smartcard_IntroduceReaderGroupW_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_IntroduceReaderW_Call()

static LONG smartcard_IntroduceReaderW_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_irp_device_control_call()

LONG smartcard_irp_device_control_call ( scard_call_context *  smartcard,
wStream out,
UINT32 *  pIoStatus,
SMARTCARD_OPERATION operation 
)

[MS-RDPESC] 3.2.5.1: Sending Outgoing Messages: the output buffer length SHOULD be set to 2048

Since it's a SHOULD and not a MUST, we don't care about it, but we still reserve at least 2048 bytes.

[MS-RPCE] 2.2.6.3 Primitive Type Serialization The type MUST be aligned on an 8-byte boundary. If the size of the primitive type is not a multiple of 8 bytes, the data MUST be padded.

Here is the caller graph for this function:

◆ smartcard_IsValidContext_Call()

static LONG smartcard_IsValidContext_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_ListReaderGroupsA_Call()

static LONG smartcard_ListReaderGroupsA_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_ListReaderGroupsW_Call()

static LONG smartcard_ListReaderGroupsW_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_ListReadersA_Call()

static LONG smartcard_ListReadersA_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_ListReadersW_Call()

static LONG smartcard_ListReadersW_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_LocateCardsA_Call()

static LONG smartcard_LocateCardsA_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_LocateCardsByATRA_Call()

static LONG smartcard_LocateCardsByATRA_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_LocateCardsW_Call()

static LONG smartcard_LocateCardsW_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_ReadCacheA_Call()

static LONG smartcard_ReadCacheA_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_ReadCacheW_Call()

static LONG smartcard_ReadCacheW_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_Reconnect_Call()

static LONG smartcard_Reconnect_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_ReleaseContext_Call()

static LONG smartcard_ReleaseContext_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_ReleaseStartedEvent_Call()

static LONG smartcard_ReleaseStartedEvent_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the caller graph for this function:

◆ smartcard_RemoveReaderFromGroupA_Call()

static LONG smartcard_RemoveReaderFromGroupA_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_RemoveReaderFromGroupW_Call()

static LONG smartcard_RemoveReaderFromGroupW_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_SetAttrib_Call()

static LONG smartcard_SetAttrib_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_State_Call()

static LONG smartcard_State_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_StatusA_Call()

static LONG smartcard_StatusA_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_StatusW_Call()

static LONG smartcard_StatusW_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static

[MS-RDPESC] According to 2.2.2.18 Status_Call cbAtrLen is unused an must be ignored upon receipt.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_Transmit_Call()

static LONG smartcard_Transmit_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_WriteCacheA_Call()

static LONG smartcard_WriteCacheA_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ smartcard_WriteCacheW_Call()

static LONG smartcard_WriteCacheW_Call ( scard_call_context *  smartcard,
wStream out,
SMARTCARD_OPERATION operation 
)
static
Here is the call graph for this function:
Here is the caller graph for this function: