Logo Search packages:      
Sourcecode: pcsc-lite version File versions  Download package

LONG SCardEstablishContext ( DWORD  dwScope,
LPCVOID  pvReserved1,
LPCVOID  pvReserved2,
LPSCARDCONTEXT  phContext 
)

Creates an Application Context to the PC/SC Resource Manager.

This must be the first WinSCard function called in a PC/SC application. Each thread of an application shall use its own SCARDCONTEXT.

Parameters:
[in]dwScopeScope of the establishment. This can either be a local or remote connection.
[in]pvReserved1Reserved for future use.
[in]pvReserved2Reserved for future use.
[out]phContextReturned Application Context.
Returns:
Error code.
Return values:
SCARD_S_SUCCESSSuccessful (SCARD_S_SUCCESS)
SCARD_E_INVALID_PARAMETERphContext is null (SCARD_E_INVALID_PARAMETER)
SCARD_E_INVALID_VALUEInvalid scope type passed (SCARD_E_INVALID_VALUE )
SCARD_E_NO_MEMORYThere is no free slot to store hContext (SCARD_E_NO_MEMORY)
SCARD_E_NO_SERVICEThe server is not running (SCARD_E_NO_SERVICE)
SCARD_F_COMM_ERRORAn internal communications error has been detected (SCARD_F_COMM_ERROR)
SCARD_F_INTERNAL_ERRORAn internal consistency check failed (SCARD_F_INTERNAL_ERROR)
 SCARDCONTEXT hContext;
 LONG rv;
 ...
 rv = SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &hContext);

Definition at line 428 of file winscard_clnt.c.

References PCSCLITE_SVC_IDENTITY, SCARD_E_INVALID_HANDLE, SCARD_E_INVALID_VALUE, SCARD_S_SUCCESS, SCARD_SCOPE_GLOBAL, SCARD_SCOPE_SYSTEM, SCARD_SCOPE_TERMINAL, SCARD_SCOPE_USER, SCardCheckDaemonAvailability(), SCardEstablishContextTH(), SCardLockThread(), and SCardUnlockThread().

{
      LONG rv;
      static int first_time = TRUE;

      API_TRACE_IN("%ld, %p, %p", dwScope, pvReserved1, pvReserved2)
      PROFILE_START

      /* Some setup for the first execution */
      if (first_time)
      {
            first_time = FALSE;

            /* Invalidate all the handles in the son after a fork */
            pthread_atfork(NULL, NULL, SCardInvalidateHandles);
      }

      /* Check if the server is running */
      rv = SCardCheckDaemonAvailability();
      if (SCARD_E_INVALID_HANDLE == rv)
            /* we reconnected to a daemon or we got called from a forked child */
            rv = SCardCheckDaemonAvailability();

      if (rv != SCARD_S_SUCCESS)
            goto end;

      (void)SCardLockThread();
      rv = SCardEstablishContextTH(dwScope, pvReserved1,
            pvReserved2, phContext);
      (void)SCardUnlockThread();

end:
      PROFILE_END(rv)
      API_TRACE_OUT("%ld", *phContext)

      return rv;
}

Here is the call graph for this function:


Generated by  Doxygen 1.6.0   Back to index