<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://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"/> <title>pcsc-lite: winscard_svc.c File Reference</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="doxygen.css" rel="stylesheet" type="text/css"/> </head> <body> <!-- Generated by Doxygen 1.7.3 --> <div id="top"> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td style="padding-left: 0.5em;"> <div id="projectname">pcsc-lite <span id="projectnumber">1.7.2</span></div> </td> </tr> </tbody> </table> </div> <div id="navrow1" class="tabs"> <ul class="tablist"> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="annotated.html"><span>Data Structures</span></a></li> <li class="current"><a href="files.html"><span>Files</span></a></li> <li><a href="dirs.html"><span>Directories</span></a></li> </ul> </div> <div id="navrow2" class="tabs2"> <ul class="tablist"> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>Globals</span></a></li> </ul> </div> <div id="nav-path" class="navpath"> <ul> <li class="navelem"><a class="el" href="dir_7a4553ee0c3b13d0e595a5d1659110a6.html">src</a> </li> </ul> </div> </div> <div class="header"> <div class="summary"> <a href="#nested-classes">Data Structures</a> | <a href="#define-members">Defines</a> | <a href="#typedef-members">Typedefs</a> | <a href="#func-members">Functions</a> | <a href="#var-members">Variables</a> </div> <div class="headertitle"> <h1>winscard_svc.c File Reference</h1> </div> </div> <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 "winscard.h"</code><br/> <code>#include "debuglog.h"</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/> </div><div class="textblock"><div class="dynheader"> Include dependency graph for winscard_svc.c:</div> <div class="dyncontent"> <div class="center"><img src="winscard__svc_8c__incl.png" border="0" usemap="#winscard__svc_8c" alt=""/></div> <map name="winscard__svc_8c" id="winscard__svc_8c"> <area shape="rect" id="node19" href="pcscd_8h.html" title="This keeps a list of defines for pcsc-lite." alt="" coords="660,237,727,267"/><area shape="rect" id="node25" href="winscard__msg_8h.html" title="This defines some structures and #defines to be used over the transport layer." alt="" coords="1125,83,1243,112"/><area shape="rect" id="node29" href="winscard__svc_8h.html" title="This demarshalls functions over the message queue and keeps track of clients and their handles..." alt="" coords="1397,83,1509,112"/><area shape="rect" id="node31" href="sys__generic_8h.html" title="This handles abstract system level calls." alt="" coords="1533,83,1635,112"/><area shape="rect" id="node37" href="utils_8h_source.html" title="utils.h" alt="" coords="827,83,883,112"/><area shape="rect" id="node43" href="readerfactory_8h.html" title="This keeps track of a list of currently available reader structures." alt="" coords="725,160,835,189"/><area shape="rect" id="node51" href="simclist_8h_source.html" title="simclist.h" alt="" coords="913,237,991,267"/><area shape="rect" id="node58" href="eventhandler_8h.html" title="This handles card insertion/removal events, updates ATR, protocol, and status information." alt="" coords="1267,83,1373,112"/></map> </div> </div> <p><a href="winscard__svc_8c_source.html">Go to the source code of this file.</a></p> <table class="memberdecls"> <tr><td colspan="2"><h2><a name="nested-classes"></a> Data Structures</h2></td></tr> <tr><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><td colspan="2"><h2><a name="define-members"></a> Defines</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>READ_BODY</b>(v)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6772f308132c6f99079b9ecaa2b37941"></a><!-- doxytag: member="winscard_svc.c::WRITE_BODY" ref="a6772f308132c6f99079b9ecaa2b37941" args="(v)" --> #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><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><td colspan="2"><h2><a name="typedef-members"></a> Typedefs</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a831feb6e3012cab232571cf1c641504e"></a><!-- doxytag: member="winscard_svc.c::SCONTEXT" ref="a831feb6e3012cab232571cf1c641504e" args="" --> typedef struct <a class="el" href="struct__psContext.html">_psContext</a> </td><td class="memItemRight" valign="bottom"><b>SCONTEXT</b></td></tr> <tr><td colspan="2"><h2><a name="func-members"></a> Functions</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a64b7215e13a18204dcc3807482d9e221"></a><!-- doxytag: member="winscard_svc.c::MSGCheckHandleAssociation" ref="a64b7215e13a18204dcc3807482d9e221" args="(SCARDHANDLE, SCONTEXT *)" --> 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><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa1d4c2e560b1a592d9ebd32bd26850f"></a><!-- doxytag: member="winscard_svc.c::MSGAddContext" ref="afa1d4c2e560b1a592d9ebd32bd26850f" args="(SCARDCONTEXT, SCONTEXT *)" --> 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><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5cbc63cb9b0a5a9b204f745cc5e84485"></a><!-- doxytag: member="winscard_svc.c::MSGRemoveContext" ref="a5cbc63cb9b0a5a9b204f745cc5e84485" args="(SCARDCONTEXT, SCONTEXT *)" --> 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><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab38e1e62f596d3adc94bfa6c35401bbe"></a><!-- doxytag: member="winscard_svc.c::MSGAddHandle" ref="ab38e1e62f596d3adc94bfa6c35401bbe" args="(SCARDCONTEXT, SCARDHANDLE, SCONTEXT *)" --> 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><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a45298e9230f1d820338c4b7cfbe082ce"></a><!-- doxytag: member="winscard_svc.c::MSGRemoveHandle" ref="a45298e9230f1d820338c4b7cfbe082ce" args="(SCARDHANDLE, SCONTEXT *)" --> 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><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a06d4b52992db08a8d5f201982e750808"></a><!-- doxytag: member="winscard_svc.c::MSGCleanupClient" ref="a06d4b52992db08a8d5f201982e750808" args="(SCONTEXT *)" --> static LONG </td><td class="memItemRight" valign="bottom"><b>MSGCleanupClient</b> (<a class="el" href="struct__psContext.html">SCONTEXT</a> *)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab4ec16bb7f8ada0a135e761912179770"></a><!-- doxytag: member="winscard_svc.c::ContextThread" ref="ab4ec16bb7f8ada0a135e761912179770" args="(LPVOID pdwIndex)" --> static void </td><td class="memItemRight" valign="bottom"><b>ContextThread</b> (LPVOID pdwIndex)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1938c90ddc65822c207113af8ffdac9a"></a><!-- doxytag: member="winscard_svc.c::contextsListhContext_seeker" ref="a1938c90ddc65822c207113af8ffdac9a" args="(const void *el, const void *key)" --> static int </td><td class="memItemRight" valign="bottom"><b>contextsListhContext_seeker</b> (const void *el, const void *key)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a14445244f55f3d2fe913724dfff9281b"></a><!-- doxytag: member="winscard_svc.c::ContextsInitialize" ref="a14445244f55f3d2fe913724dfff9281b" args="(int customMaxThreadCounter, int customMaxThreadCardHandles)" --> LONG </td><td class="memItemRight" valign="bottom"><b>ContextsInitialize</b> (int customMaxThreadCounter, int customMaxThreadCardHandles)</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8ff1c5c3e490d5005d38147a9d0c7329"></a><!-- doxytag: member="winscard_svc.c::ContextsDeinitialize" ref="a8ff1c5c3e490d5005d38147a9d0c7329" args="(void)" --> void </td><td class="memItemRight" valign="bottom"><b>ContextsDeinitialize</b> (void)</td></tr> <tr><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><td class="mdescLeft"> </td><td class="mdescRight">Creates threads to handle messages received from Clients. <a href="#a6197ae4c69296f7c85c7122d5169033b"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af934d98dd7253c538c646f85afdd8627"></a><!-- doxytag: member="winscard_svc.c::MSGSignalClient" ref="af934d98dd7253c538c646f85afdd8627" args="(uint32_t filedes, LONG rv)" --> LONG </td><td class="memItemRight" valign="bottom"><b>MSGSignalClient</b> (uint32_t filedes, LONG rv)</td></tr> <tr><td colspan="2"><h2><a name="var-members"></a> Variables</h2></td></tr> <tr><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><td class="mdescLeft"> </td><td class="mdescRight">Represents an Application Context on the Server side. <a href="#ad41ba79cd2bc62973c95f29d1292b0a6"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a95d51c3bbfdeabf8800d7dcaf98e2949"></a><!-- doxytag: member="winscard_svc.c::contextMaxThreadCounter" ref="a95d51c3bbfdeabf8800d7dcaf98e2949" args="" --> static int </td><td class="memItemRight" valign="bottom"><b>contextMaxThreadCounter</b> = PCSC_MAX_CONTEXT_THREADS</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aefe523591bb3d3639c2380ea328dd22c"></a><!-- doxytag: member="winscard_svc.c::contextMaxCardHandles" ref="aefe523591bb3d3639c2380ea328dd22c" args="" --> static int </td><td class="memItemRight" valign="bottom"><b>contextMaxCardHandles</b> = PCSC_MAX_CONTEXT_CARD_HANDLES</td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a88deac193f649cdf5bd8e1c2cc4d5e65"></a><!-- doxytag: member="winscard_svc.c::contextsList" ref="a88deac193f649cdf5bd8e1c2cc4d5e65" args="" --> 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><td class="mdescLeft"> </td><td class="mdescRight">Context tracking list. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aae4a28a9a80802019c27e36ff81e93da"></a><!-- doxytag: member="winscard_svc.c::contextsList_lock" ref="aae4a28a9a80802019c27e36ff81e93da" args="" --> pthread_mutex_t </td><td class="memItemRight" valign="bottom"><a class="el" href="winscard__svc_8c.html#aae4a28a9a80802019c27e36ff81e93da">contextsList_lock</a></td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">lock for the above list <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad70f4ad5a6e9b001970ee9afc2130875"></a><!-- doxytag: member="winscard_svc.c::readerStates" ref="ad70f4ad5a6e9b001970ee9afc2130875" args="[PCSCLITE_MAX_READERS_CONTEXTS]" --> <a class="el" href="structpubReaderStatesList.html">READER_STATE</a> </td><td class="memItemRight" valign="bottom"><b>readerStates</b> [PCSCLITE_MAX_READERS_CONTEXTS]</td></tr> <tr><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><td class="mdescLeft"> </td><td class="mdescRight">Handles messages received from Clients. <a href="#a7e0939c34e53323d54001986fe0ef3d8"></a><br/></td></tr> </table> <hr/><a name="_details"></a><h2>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>Definition in file <a class="el" href="winscard__svc_8c_source.html">winscard_svc.c</a>.</p> </div><hr/><h2>Define Documentation</h2> <a class="anchor" id="a893248cb55578669c0eaf75bda3ddf05"></a><!-- doxytag: member="winscard_svc.c::READ_BODY" ref="a893248cb55578669c0eaf75bda3ddf05" args="(v)" --> <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"><pre class="fragment"><span class="keywordflow">if</span> (header.size != <span class="keyword">sizeof</span>(v)) { <span class="keywordflow">goto</span> wrong_length; } \ ret = <a class="code" href="winscard__msg_8c.html#adbb09969d5d410393ae441b9a18c7a0c" title="Called by the Client to get the reponse from the server or vice-versa.">MessageReceive</a>(&v, <span class="keyword">sizeof</span>(v), filedes); \ <span class="keywordflow">if</span> (ret != <a class="code" href="pcsclite_8h.html#a4a3c56f69570971d366642a563b34a75" title="error codes from http://msdn.microsoft.com/en-us/library/aa924526.aspx">SCARD_S_SUCCESS</a>) { Log2(PCSC_LOG_DEBUG, <span class="stringliteral">"Client die: %d"</span>, filedes); <span class="keywordflow">goto</span> exit; } </pre></div> <p>Definition at line <a class="el" href="winscard__svc_8c_source.html#l00280">280</a> of file <a class="el" href="winscard__svc_8c_source.html">winscard_svc.c</a>.</p> </div> </div> <a class="anchor" id="a9882019e85b8ae848e250b8474b82201"></a><!-- doxytag: member="winscard_svc.c::WRITE_BODY_WITH_COMMAND" ref="a9882019e85b8ae848e250b8474b82201" args="(command, v)" --> <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"><pre class="fragment">Log4(<a class="code" href="pcsclite_8h.html#a4a3c56f69570971d366642a563b34a75" title="error codes from http://msdn.microsoft.com/en-us/library/aa924526.aspx">SCARD_S_SUCCESS</a> == v.rv ? PCSC_LOG_DEBUG : PCSC_LOG_ERROR, <span class="stringliteral">"%s rv=0x%X for client %d"</span>, command, v.rv, filedes); \ ret = <a class="code" href="winscard__msg_8c.html#aacd09139ce5667d3b651de29c0d62057" title="Sends a menssage from client to server or vice-versa.">MessageSend</a>(&v, <span class="keyword">sizeof</span>(v), filedes); </pre></div> <p>Definition at line <a class="el" href="winscard__svc_8c_source.html#l00287">287</a> of file <a class="el" href="winscard__svc_8c_source.html">winscard_svc.c</a>.</p> </div> </div> <hr/><h2>Function Documentation</h2> <a class="anchor" id="a6197ae4c69296f7c85c7122d5169033b"></a><!-- doxytag: member="winscard_svc.c::CreateContextThread" ref="a6197ae4c69296f7c85c7122d5169033b" args="(uint32_t *pdwClientID)" --> <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><dt><b>Parameters:</b></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="return"><dt><b>Returns:</b></dt><dd>Error code. </dd></dl> <dl><dt><b>Return values:</b></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>Definition at line <a class="el" href="winscard__svc_8c_source.html#l00144">144</a> of file <a class="el" href="winscard__svc_8c_source.html">winscard_svc.c</a>.</p> <p>References <a class="el" href="pcscdaemon_8c_source.html#l00056">AutoExit</a>, <a class="el" href="winscard__svc_8c_source.html#l00063">_psContext::cardsList_lock</a>, <a class="el" href="winscard__svc_8c_source.html#l00057">contextsList_lock</a>, <a class="el" href="winscard__svc_8c_source.html#l00064">_psContext::dwClientID</a>, <a class="el" href="winscard__svc_8c_source.html#l00065">_psContext::pthThread</a>, <a class="el" href="pcsclite_8h_source.html#l00086">SCARD_E_NO_MEMORY</a>, and <a class="el" href="pcsclite_8h_source.html#l00080">SCARD_S_SUCCESS</a>.</p> <p>Referenced by <a class="el" href="pcscdaemon_8c_source.html#l00079">SVCServiceRunLoop()</a>.</p> </div> </div> <hr/><h2>Variable Documentation</h2> <a class="anchor" id="ad41ba79cd2bc62973c95f29d1292b0a6"></a><!-- doxytag: member="winscard_svc.c::AutoExit" ref="ad41ba79cd2bc62973c95f29d1292b0a6" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">char <a class="el" href="winscard__svc_8c.html#ad41ba79cd2bc62973c95f29d1292b0a6">AutoExit</a></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>Definition at line <a class="el" href="pcscdaemon_8c_source.html#l00056">56</a> of file <a class="el" href="pcscdaemon_8c_source.html">pcscdaemon.c</a>.</p> <p>Referenced by <a class="el" href="winscard__svc_8c_source.html#l00144">CreateContextThread()</a>.</p> </div> </div> <a class="anchor" id="a7e0939c34e53323d54001986fe0ef3d8"></a><!-- doxytag: member="winscard_svc.c::CommandsText" ref="a7e0939c34e53323d54001986fe0ef3d8" args="[]" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">const char* <a class="el" href="winscard__svc_8c.html#a7e0939c34e53323d54001986fe0ef3d8">CommandsText</a>[]<code> [static]</code></td> </tr> </table> </div> <div class="memdoc"> <b>Initial value:</b><div class="fragment"><pre class="fragment"> { <span class="stringliteral">"NULL"</span>, <span class="stringliteral">"ESTABLISH_CONTEXT"</span>, <span class="stringliteral">"RELEASE_CONTEXT"</span>, <span class="stringliteral">"LIST_READERS"</span>, <span class="stringliteral">"CONNECT"</span>, <span class="stringliteral">"RECONNECT"</span>, <span class="stringliteral">"DISCONNECT"</span>, <span class="stringliteral">"BEGIN_TRANSACTION"</span>, <span class="stringliteral">"END_TRANSACTION"</span>, <span class="stringliteral">"TRANSMIT"</span>, <span class="stringliteral">"CONTROL"</span>, <span class="stringliteral">"STATUS"</span>, <span class="stringliteral">"GET_STATUS_CHANGE"</span>, <span class="stringliteral">"CANCEL"</span>, <span class="stringliteral">"CANCEL_TRANSACTION"</span>, <span class="stringliteral">"GET_ATTRIB"</span>, <span class="stringliteral">"SET_ATTRIB"</span>, <span class="stringliteral">"CMD_VERSION"</span>, <span class="stringliteral">"CMD_GET_READERS_STATE"</span>, <span class="stringliteral">"CMD_WAIT_READER_STATE_CHANGE"</span>, <span class="stringliteral">"CMD_STOP_WAITING_READER_STATE_CHANGE"</span>, <span class="stringliteral">"NULL"</span> } </pre></div> <p>Handles messages received from Clients. </p> <p>For each Client message a new instance of this thread is created.</p> <dl><dt><b>Parameters:</b></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>Definition at line <a class="el" href="winscard__svc_8c_source.html#l00254">254</a> of file <a class="el" href="winscard__svc_8c_source.html">winscard_svc.c</a>.</p> </div> </div> </div> <hr class="footer"/><address class="footer"><small>Generated on Thu Mar 31 2011 for pcsc-lite by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.3 </small></address> </body> </html>