<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta name="generator" content="Doxygen 1.8.15"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <title>pcsc-lite: winscard_svc.c File Reference</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="dynsections.js"></script> <link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td id="projectalign" style="padding-left: 0.5em;"> <div id="projectname">pcsc-lite  <span id="projectnumber">1.8.26</span> </div> </td> </tr> </tbody> </table> </div> <!-- end header part --> <!-- Generated by Doxygen 1.8.15 --> <script type="text/javascript" src="menudata.js"></script> <script type="text/javascript" src="menu.js"></script> <script type="text/javascript"> /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ $(function() { initMenu('',false,false,'search.php','Search'); }); /* @license-end */</script> <div id="main-nav"></div> <div id="nav-path" class="navpath"> <ul> <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul> </div> </div><!-- top --> <div class="header"> <div class="summary"> <a href="#nested-classes">Data Structures</a> | <a href="#define-members">Macros</a> | <a href="#typedef-members">Typedefs</a> | <a href="#func-members">Functions</a> | <a href="#var-members">Variables</a> </div> <div class="headertitle"> <div class="title">winscard_svc.c File Reference</div> </div> </div><!--header--> <div class="contents"> <p>This demarshalls functions over the message queue and keeps track of clients and their handles. <a href="#details">More...</a></p> <div class="textblock"><code>#include "config.h"</code><br /> <code>#include <time.h></code><br /> <code>#include <stdio.h></code><br /> <code>#include <string.h></code><br /> <code>#include <stddef.h></code><br /> <code>#include <stdlib.h></code><br /> <code>#include <unistd.h></code><br /> <code>#include <pthread.h></code><br /> <code>#include "<a class="el" href="pcscd_8h_source.html">pcscd.h</a>"</code><br /> <code>#include "<a class="el" href="winscard_8h_source.html">winscard.h</a>"</code><br /> <code>#include "<a class="el" href="debuglog_8h_source.html">debuglog.h</a>"</code><br /> <code>#include "<a class="el" href="winscard__msg_8h_source.html">winscard_msg.h</a>"</code><br /> <code>#include "<a class="el" href="winscard__svc_8h_source.html">winscard_svc.h</a>"</code><br /> <code>#include "<a class="el" href="sys__generic_8h_source.html">sys_generic.h</a>"</code><br /> <code>#include "utils.h"</code><br /> <code>#include "<a class="el" href="readerfactory_8h_source.html">readerfactory.h</a>"</code><br /> <code>#include "<a class="el" href="eventhandler_8h_source.html">eventhandler.h</a>"</code><br /> <code>#include "simclist.h"</code><br /> <code>#include "auth.h"</code><br /> </div> <p><a href="winscard__svc_8c_source.html">Go to the source code of this file.</a></p> <table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a> Data Structures</h2></td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="struct__psContext.html">_psContext</a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a> Macros</h2></td></tr> <tr class="memitem:a893248cb55578669c0eaf75bda3ddf05"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>READ_BODY</b>(v)</td></tr> <tr class="separator:a893248cb55578669c0eaf75bda3ddf05"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a6772f308132c6f99079b9ecaa2b37941"><td class="memItemLeft" align="right" valign="top"><a id="a6772f308132c6f99079b9ecaa2b37941"></a> #define </td><td class="memItemRight" valign="bottom"><b>WRITE_BODY</b>(v)   WRITE_BODY_WITH_COMMAND(<a class="el" href="winscard__svc_8c.html#a7e0939c34e53323d54001986fe0ef3d8">CommandsText</a>[header.command], v)</td></tr> <tr class="separator:a6772f308132c6f99079b9ecaa2b37941"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a9882019e85b8ae848e250b8474b82201"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>WRITE_BODY_WITH_COMMAND</b>(command, v)</td></tr> <tr class="separator:a9882019e85b8ae848e250b8474b82201"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a> Typedefs</h2></td></tr> <tr class="memitem:a831feb6e3012cab232571cf1c641504e"><td class="memItemLeft" align="right" valign="top"><a id="a831feb6e3012cab232571cf1c641504e"></a> typedef struct <a class="el" href="struct__psContext.html">_psContext</a> </td><td class="memItemRight" valign="bottom"><b>SCONTEXT</b></td></tr> <tr class="separator:a831feb6e3012cab232571cf1c641504e"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> Functions</h2></td></tr> <tr class="memitem:a64b7215e13a18204dcc3807482d9e221"><td class="memItemLeft" align="right" valign="top"><a id="a64b7215e13a18204dcc3807482d9e221"></a> static LONG </td><td class="memItemRight" valign="bottom"><b>MSGCheckHandleAssociation</b> (<a class="el" href="pcsclite_8h.html#af328aca3e11de737ecd771bcf1f75fb5">SCARDHANDLE</a>, <a class="el" href="struct__psContext.html">SCONTEXT</a> *)</td></tr> <tr class="separator:a64b7215e13a18204dcc3807482d9e221"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:afa1d4c2e560b1a592d9ebd32bd26850f"><td class="memItemLeft" align="right" valign="top"><a id="afa1d4c2e560b1a592d9ebd32bd26850f"></a> static LONG </td><td class="memItemRight" valign="bottom"><b>MSGAddContext</b> (<a class="el" href="pcsclite_8h.html#a22530ffaff18b5d3e32260a5f1ce4abd">SCARDCONTEXT</a>, <a class="el" href="struct__psContext.html">SCONTEXT</a> *)</td></tr> <tr class="separator:afa1d4c2e560b1a592d9ebd32bd26850f"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a5cbc63cb9b0a5a9b204f745cc5e84485"><td class="memItemLeft" align="right" valign="top"><a id="a5cbc63cb9b0a5a9b204f745cc5e84485"></a> static LONG </td><td class="memItemRight" valign="bottom"><b>MSGRemoveContext</b> (<a class="el" href="pcsclite_8h.html#a22530ffaff18b5d3e32260a5f1ce4abd">SCARDCONTEXT</a>, <a class="el" href="struct__psContext.html">SCONTEXT</a> *)</td></tr> <tr class="separator:a5cbc63cb9b0a5a9b204f745cc5e84485"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ab38e1e62f596d3adc94bfa6c35401bbe"><td class="memItemLeft" align="right" valign="top"><a id="ab38e1e62f596d3adc94bfa6c35401bbe"></a> static LONG </td><td class="memItemRight" valign="bottom"><b>MSGAddHandle</b> (<a class="el" href="pcsclite_8h.html#a22530ffaff18b5d3e32260a5f1ce4abd">SCARDCONTEXT</a>, <a class="el" href="pcsclite_8h.html#af328aca3e11de737ecd771bcf1f75fb5">SCARDHANDLE</a>, <a class="el" href="struct__psContext.html">SCONTEXT</a> *)</td></tr> <tr class="separator:ab38e1e62f596d3adc94bfa6c35401bbe"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a45298e9230f1d820338c4b7cfbe082ce"><td class="memItemLeft" align="right" valign="top"><a id="a45298e9230f1d820338c4b7cfbe082ce"></a> static LONG </td><td class="memItemRight" valign="bottom"><b>MSGRemoveHandle</b> (<a class="el" href="pcsclite_8h.html#af328aca3e11de737ecd771bcf1f75fb5">SCARDHANDLE</a>, <a class="el" href="struct__psContext.html">SCONTEXT</a> *)</td></tr> <tr class="separator:a45298e9230f1d820338c4b7cfbe082ce"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a08b0e4d14fb35933540d6ad520f42464"><td class="memItemLeft" align="right" valign="top"><a id="a08b0e4d14fb35933540d6ad520f42464"></a> static void </td><td class="memItemRight" valign="bottom"><b>MSGCleanupClient</b> (<a class="el" href="struct__psContext.html">SCONTEXT</a> *)</td></tr> <tr class="separator:a08b0e4d14fb35933540d6ad520f42464"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a5120c6ae866ab4d922772656698572a3"><td class="memItemLeft" align="right" valign="top"><a id="a5120c6ae866ab4d922772656698572a3"></a> static void * </td><td class="memItemRight" valign="bottom"><b>ContextThread</b> (LPVOID pdwIndex)</td></tr> <tr class="separator:a5120c6ae866ab4d922772656698572a3"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a1938c90ddc65822c207113af8ffdac9a"><td class="memItemLeft" align="right" valign="top"><a id="a1938c90ddc65822c207113af8ffdac9a"></a> static int </td><td class="memItemRight" valign="bottom"><b>contextsListhContext_seeker</b> (const void *el, const void *key)</td></tr> <tr class="separator:a1938c90ddc65822c207113af8ffdac9a"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a14445244f55f3d2fe913724dfff9281b"><td class="memItemLeft" align="right" valign="top"><a id="a14445244f55f3d2fe913724dfff9281b"></a> LONG </td><td class="memItemRight" valign="bottom"><b>ContextsInitialize</b> (int customMaxThreadCounter, int customMaxThreadCardHandles)</td></tr> <tr class="separator:a14445244f55f3d2fe913724dfff9281b"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a8ff1c5c3e490d5005d38147a9d0c7329"><td class="memItemLeft" align="right" valign="top"><a id="a8ff1c5c3e490d5005d38147a9d0c7329"></a> void </td><td class="memItemRight" valign="bottom"><b>ContextsDeinitialize</b> (void)</td></tr> <tr class="separator:a8ff1c5c3e490d5005d38147a9d0c7329"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a6197ae4c69296f7c85c7122d5169033b"><td class="memItemLeft" align="right" valign="top">LONG </td><td class="memItemRight" valign="bottom"><a class="el" href="winscard__svc_8c.html#a6197ae4c69296f7c85c7122d5169033b">CreateContextThread</a> (uint32_t *pdwClientID)</td></tr> <tr class="memdesc:a6197ae4c69296f7c85c7122d5169033b"><td class="mdescLeft"> </td><td class="mdescRight">Creates threads to handle messages received from Clients. <a href="#a6197ae4c69296f7c85c7122d5169033b">More...</a><br /></td></tr> <tr class="separator:a6197ae4c69296f7c85c7122d5169033b"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:af934d98dd7253c538c646f85afdd8627"><td class="memItemLeft" align="right" valign="top"><a id="af934d98dd7253c538c646f85afdd8627"></a> LONG </td><td class="memItemRight" valign="bottom"><b>MSGSignalClient</b> (uint32_t filedes, LONG rv)</td></tr> <tr class="separator:af934d98dd7253c538c646f85afdd8627"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a554041db880b00e43e7ccefd42830275"><td class="memItemLeft" align="right" valign="top"><a id="a554041db880b00e43e7ccefd42830275"></a> LONG </td><td class="memItemRight" valign="bottom"><b>MSGSendReaderStates</b> (uint32_t filedes)</td></tr> <tr class="separator:a554041db880b00e43e7ccefd42830275"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a> Variables</h2></td></tr> <tr class="memitem:ad41ba79cd2bc62973c95f29d1292b0a6"><td class="memItemLeft" align="right" valign="top">char </td><td class="memItemRight" valign="bottom"><a class="el" href="winscard__svc_8c.html#ad41ba79cd2bc62973c95f29d1292b0a6">AutoExit</a></td></tr> <tr class="memdesc:ad41ba79cd2bc62973c95f29d1292b0a6"><td class="mdescLeft"> </td><td class="mdescRight">Represents an Application Context on the Server side. <a href="#ad41ba79cd2bc62973c95f29d1292b0a6">More...</a><br /></td></tr> <tr class="separator:ad41ba79cd2bc62973c95f29d1292b0a6"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a95d51c3bbfdeabf8800d7dcaf98e2949"><td class="memItemLeft" align="right" valign="top"><a id="a95d51c3bbfdeabf8800d7dcaf98e2949"></a> static int </td><td class="memItemRight" valign="bottom"><b>contextMaxThreadCounter</b> = PCSC_MAX_CONTEXT_THREADS</td></tr> <tr class="separator:a95d51c3bbfdeabf8800d7dcaf98e2949"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aefe523591bb3d3639c2380ea328dd22c"><td class="memItemLeft" align="right" valign="top"><a id="aefe523591bb3d3639c2380ea328dd22c"></a> static int </td><td class="memItemRight" valign="bottom"><b>contextMaxCardHandles</b> = PCSC_MAX_CONTEXT_CARD_HANDLES</td></tr> <tr class="separator:aefe523591bb3d3639c2380ea328dd22c"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a88deac193f649cdf5bd8e1c2cc4d5e65"><td class="memItemLeft" align="right" valign="top"><a id="a88deac193f649cdf5bd8e1c2cc4d5e65"></a> static <a class="el" href="structlist__t.html">list_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="winscard__svc_8c.html#a88deac193f649cdf5bd8e1c2cc4d5e65">contextsList</a></td></tr> <tr class="memdesc:a88deac193f649cdf5bd8e1c2cc4d5e65"><td class="mdescLeft"> </td><td class="mdescRight">Context tracking list. <br /></td></tr> <tr class="separator:a88deac193f649cdf5bd8e1c2cc4d5e65"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aae4a28a9a80802019c27e36ff81e93da"><td class="memItemLeft" align="right" valign="top"><a id="aae4a28a9a80802019c27e36ff81e93da"></a> pthread_mutex_t </td><td class="memItemRight" valign="bottom"><a class="el" href="winscard__svc_8c.html#aae4a28a9a80802019c27e36ff81e93da">contextsList_lock</a></td></tr> <tr class="memdesc:aae4a28a9a80802019c27e36ff81e93da"><td class="mdescLeft"> </td><td class="mdescRight">lock for the above list <br /></td></tr> <tr class="separator:aae4a28a9a80802019c27e36ff81e93da"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ad70f4ad5a6e9b001970ee9afc2130875"><td class="memItemLeft" align="right" valign="top"><a id="ad70f4ad5a6e9b001970ee9afc2130875"></a> <a class="el" href="eventhandler_8h.html#a14acdf20e86897434649f849c17f9ea6">READER_STATE</a> </td><td class="memItemRight" valign="bottom"><b>readerStates</b> [<a class="el" href="pcsclite_8h.html#af750e6e22c809de2b523c17e4a092036">PCSCLITE_MAX_READERS_CONTEXTS</a>]</td></tr> <tr class="separator:ad70f4ad5a6e9b001970ee9afc2130875"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a7e0939c34e53323d54001986fe0ef3d8"><td class="memItemLeft" align="right" valign="top">static const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="winscard__svc_8c.html#a7e0939c34e53323d54001986fe0ef3d8">CommandsText</a> []</td></tr> <tr class="memdesc:a7e0939c34e53323d54001986fe0ef3d8"><td class="mdescLeft"> </td><td class="mdescRight">Handles messages received from Clients. <a href="#a7e0939c34e53323d54001986fe0ef3d8">More...</a><br /></td></tr> <tr class="separator:a7e0939c34e53323d54001986fe0ef3d8"><td class="memSeparator" colspan="2"> </td></tr> </table> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <div class="textblock"><p>This demarshalls functions over the message queue and keeps track of clients and their handles. </p> <p>Each Client message is deald by creating a thread (<code>CreateContextThread</code>). The thread establishes reands and demarshalls the message and calls the appropriate function to threat it. </p> <p class="definition">Definition in file <a class="el" href="winscard__svc_8c_source.html">winscard_svc.c</a>.</p> </div><h2 class="groupheader">Macro Definition Documentation</h2> <a id="a893248cb55578669c0eaf75bda3ddf05"></a> <h2 class="memtitle"><span class="permalink"><a href="#a893248cb55578669c0eaf75bda3ddf05">◆ </a></span>READ_BODY</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define READ_BODY</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">v</td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <b>Value:</b><div class="fragment"><div class="line"><span class="keywordflow">do</span> { \</div><div class="line"> if (header.size != <span class="keyword">sizeof</span>(v)) \</div><div class="line"> goto wrong_length; \</div><div class="line"> ret = <a class="code" href="winscard__msg_8c.html#adbb09969d5d410393ae441b9a18c7a0c">MessageReceive</a>(&v, <span class="keyword">sizeof</span>(v), filedes); \</div><div class="line"> if (ret != <a class="code" href="group__ErrorCodes.html#ga4a3c56f69570971d366642a563b34a75">SCARD_S_SUCCESS</a>) { \</div><div class="line"> Log2(PCSC_LOG_DEBUG, <span class="stringliteral">"Client die: %d"</span>, filedes); \</div><div class="line"> goto exit; \</div><div class="line"> } \</div><div class="line"> } <span class="keywordflow">while</span> (0)</div><div class="ttc" id="group__ErrorCodes_html_ga4a3c56f69570971d366642a563b34a75"><div class="ttname"><a href="group__ErrorCodes.html#ga4a3c56f69570971d366642a563b34a75">SCARD_S_SUCCESS</a></div><div class="ttdeci">#define SCARD_S_SUCCESS</div><div class="ttdoc">No error was encountered.</div><div class="ttdef"><b>Definition:</b> <a href="pcsclite_8h_source.html#l00107">pcsclite.h:107</a></div></div> <div class="ttc" id="winscard__msg_8c_html_adbb09969d5d410393ae441b9a18c7a0c"><div class="ttname"><a href="winscard__msg_8c.html#adbb09969d5d410393ae441b9a18c7a0c">MessageReceive</a></div><div class="ttdeci">INTERNAL LONG MessageReceive(void *buffer_void, uint64_t buffer_size, int32_t filedes)</div><div class="ttdoc">Called by the Client to get the reponse from the server or vice-versa.</div><div class="ttdef"><b>Definition:</b> <a href="winscard__msg_8c_source.html#l00457">winscard_msg.c:457</a></div></div> </div><!-- fragment --> <p class="definition">Definition at line <a class="el" href="winscard__svc_8c_source.html#l00309">309</a> of file <a class="el" href="winscard__svc_8c_source.html">winscard_svc.c</a>.</p> </div> </div> <a id="a9882019e85b8ae848e250b8474b82201"></a> <h2 class="memtitle"><span class="permalink"><a href="#a9882019e85b8ae848e250b8474b82201">◆ </a></span>WRITE_BODY_WITH_COMMAND</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define WRITE_BODY_WITH_COMMAND</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">command, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">v </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <b>Value:</b><div class="fragment"><div class="line"><span class="keywordflow">do</span> { \</div><div class="line"> Log4(PCSC_LOG_DEBUG, <span class="stringliteral">"%s rv=0x%X for client %d"</span>, command, v.rv, filedes); \</div><div class="line"> ret = <a class="code" href="winscard__msg_8c.html#aacd09139ce5667d3b651de29c0d62057">MessageSend</a>(&v, <span class="keyword">sizeof</span>(v), filedes); \</div><div class="line"> } <span class="keywordflow">while</span> (0)</div><div class="ttc" id="winscard__msg_8c_html_aacd09139ce5667d3b651de29c0d62057"><div class="ttname"><a href="winscard__msg_8c.html#aacd09139ce5667d3b651de29c0d62057">MessageSend</a></div><div class="ttdeci">INTERNAL LONG MessageSend(void *buffer_void, uint64_t buffer_size, int32_t filedes)</div><div class="ttdoc">Sends a menssage from client to server or vice-versa.</div><div class="ttdef"><b>Definition:</b> <a href="winscard__msg_8c_source.html#l00357">winscard_msg.c:357</a></div></div> </div><!-- fragment --> <p class="definition">Definition at line <a class="el" href="winscard__svc_8c_source.html#l00322">322</a> of file <a class="el" href="winscard__svc_8c_source.html">winscard_svc.c</a>.</p> </div> </div> <h2 class="groupheader">Function Documentation</h2> <a id="a6197ae4c69296f7c85c7122d5169033b"></a> <h2 class="memtitle"><span class="permalink"><a href="#a6197ae4c69296f7c85c7122d5169033b">◆ </a></span>CreateContextThread()</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">LONG CreateContextThread </td> <td>(</td> <td class="paramtype">uint32_t * </td> <td class="paramname"><em>pdwClientID</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Creates threads to handle messages received from Clients. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramdir">[in]</td><td class="paramname">pdwClientID</td><td>Connection ID used to reference the Client.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>Error code. </dd></dl> <dl class="retval"><dt>Return values</dt><dd> <table class="retval"> <tr><td class="paramname">SCARD_S_SUCCESS</td><td>Success. </td></tr> <tr><td class="paramname">SCARD_F_INTERNAL_ERROR</td><td>Exceded the maximum number of simultaneous Application Contexts. </td></tr> <tr><td class="paramname">SCARD_E_NO_MEMORY</td><td>Error creating the Context Thread. </td></tr> </table> </dd> </dl> <p class="definition">Definition at line <a class="el" href="winscard__svc_8c_source.html#l00171">171</a> of file <a class="el" href="winscard__svc_8c_source.html">winscard_svc.c</a>.</p> </div> </div> <h2 class="groupheader">Variable Documentation</h2> <a id="ad41ba79cd2bc62973c95f29d1292b0a6"></a> <h2 class="memtitle"><span class="permalink"><a href="#ad41ba79cd2bc62973c95f29d1292b0a6">◆ </a></span>AutoExit</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">char AutoExit</td> </tr> </table> </div><div class="memdoc"> <p>Represents an Application Context on the Server side. </p> <p>An Application Context contains Channels (<code>hCard</code>). </p> <p class="definition">Definition at line <a class="el" href="pcscdaemon_8c_source.html#l00080">80</a> of file <a class="el" href="pcscdaemon_8c_source.html">pcscdaemon.c</a>.</p> </div> </div> <a id="a7e0939c34e53323d54001986fe0ef3d8"></a> <h2 class="memtitle"><span class="permalink"><a href="#a7e0939c34e53323d54001986fe0ef3d8">◆ </a></span>CommandsText</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">const char* CommandsText[]</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">static</span></span> </td> </tr> </table> </div><div class="memdoc"> <b>Initial value:</b><div class="fragment"><div class="line">= {</div><div class="line"> <span class="stringliteral">"NULL"</span>,</div><div class="line"> <span class="stringliteral">"ESTABLISH_CONTEXT"</span>, </div><div class="line"> <span class="stringliteral">"RELEASE_CONTEXT"</span>,</div><div class="line"> <span class="stringliteral">"LIST_READERS"</span>,</div><div class="line"> <span class="stringliteral">"CONNECT"</span>,</div><div class="line"> <span class="stringliteral">"RECONNECT"</span>, </div><div class="line"> <span class="stringliteral">"DISCONNECT"</span>,</div><div class="line"> <span class="stringliteral">"BEGIN_TRANSACTION"</span>,</div><div class="line"> <span class="stringliteral">"END_TRANSACTION"</span>,</div><div class="line"> <span class="stringliteral">"TRANSMIT"</span>,</div><div class="line"> <span class="stringliteral">"CONTROL"</span>, </div><div class="line"> <span class="stringliteral">"STATUS"</span>,</div><div class="line"> <span class="stringliteral">"GET_STATUS_CHANGE"</span>,</div><div class="line"> <span class="stringliteral">"CANCEL"</span>,</div><div class="line"> <span class="stringliteral">"CANCEL_TRANSACTION"</span>,</div><div class="line"> <span class="stringliteral">"GET_ATTRIB"</span>, </div><div class="line"> <span class="stringliteral">"SET_ATTRIB"</span>,</div><div class="line"> <span class="stringliteral">"CMD_VERSION"</span>,</div><div class="line"> <span class="stringliteral">"CMD_GET_READERS_STATE"</span>,</div><div class="line"> <span class="stringliteral">"CMD_WAIT_READER_STATE_CHANGE"</span>,</div><div class="line"> <span class="stringliteral">"CMD_STOP_WAITING_READER_STATE_CHANGE"</span>, </div><div class="line"> <span class="stringliteral">"NULL"</span></div><div class="line">}</div></div><!-- fragment --> <p>Handles messages received from Clients. </p> <p>For each Client message a new instance of this thread is created.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramdir">[in]</td><td class="paramname">dwIndex</td><td>Index of an avaiable Application Context slot in <code>SCONTEXT</code> *. </td></tr> </table> </dd> </dl> <p class="definition">Definition at line <a class="el" href="winscard__svc_8c_source.html#l00283">283</a> of file <a class="el" href="winscard__svc_8c_source.html">winscard_svc.c</a>.</p> </div> </div> </div><!-- contents --> <!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated on Wed Jan 8 2020 17:42:35 for pcsc-lite by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> </a> 1.8.15 </small></address> </body> </html>