Sync with trunk r63383 .
[reactos.git] / dll / win32 / winscard / winscard.c
index e2eb755..39cdd0b 100644 (file)
@@ -1,6 +1,5 @@
 /*
- * ReactOS SmartCard API
- * Copyright (C) 2004 ReactOS Team
+ * Copyright 2007 Mounir IDRASSI  (mounir.idrassi@idrix.fr, for IDRIX)
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
-/*
- * PROJECT:         ReactOS SmartCard API
- * FILE:            lib/winscard/winscard.c
- * PURPOSE:         ReactOS SmartCard API
- * PROGRAMMER:      Thomas Weidenmueller <w3seek@reactos.com>
- *
- * UPDATE HISTORY:
- *      11/07/2004  Created
- */
-#include "precomp.h"
-
-const SCARD_IO_REQUEST g_rgSCardT0Pci;
-const SCARD_IO_REQUEST g_rgSCardT1Pci;
-const SCARD_IO_REQUEST g_rgSCardRawPci;
-
-/*
- * @unimplemented
- */
-HANDLE
-WINAPI
-SCardAccessStartedEvent(VOID)
-{
-  UNIMPLEMENTED;
-  SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-  return NULL;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardAddReaderToGroupA(SCARDCONTEXT hContext,
-                       LPCSTR szReaderName,
-                       LPCSTR szGroupName)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardAddReaderToGroupW(SCARDCONTEXT hContext,
-                       LPCWSTR szReaderName,
-                       LPCWSTR szGroupName)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardBeginTransaction(SCARDHANDLE hCard)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardCancel(SCARDCONTEXT hContext)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardConnectA(SCARDCONTEXT hContext,
-              LPCSTR szReader,
-              DWORD dwShareMode,
-              DWORD dwPreferredProtocols,
-              LPSCARDHANDLE phCard,
-              LPDWORD pdwActiveProtocol)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardConnectW(SCARDCONTEXT hContext,
-              LPCWSTR szReader,
-              DWORD dwShareMode,
-              DWORD dwPreferredProtocols,
-              LPSCARDHANDLE phCard,
-              LPDWORD pdwActiveProtocol)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardControl(SCARDHANDLE hCard,
-             DWORD dwControlCode,
-             LPCVOID lpInBuffer,
-             DWORD nInBufferSize,
-             LPVOID lpOutBuffer,
-             DWORD nOutBufferSize,
-             LPDWORD lpBytesReturned)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardDisconnect(SCARDHANDLE hCard,
-                DWORD dwDisposition)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardEndTransaction(SCARDHANDLE hCard,
-                    DWORD dwDisposition)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardEstablishContext(DWORD dwScope,
-                      LPCVOID pvReserved1,
-                      LPCVOID pvReserved2,
-                      LPSCARDCONTEXT phContext)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardForgetCardTypeA(SCARDCONTEXT hContext,
-                     LPCSTR szCardName)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardForgetCardTypeW(SCARDCONTEXT hContext,
-                     LPCWSTR szCardName)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardForgetReaderA(SCARDCONTEXT hContext,
-                   LPCSTR szReaderName)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardForgetReaderW(SCARDCONTEXT hContext,
-                   LPCWSTR szReaderName)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardForgetReaderGroupA(SCARDCONTEXT hContext,
-                        LPCSTR szGroupName)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardForgetReaderGroupW(SCARDCONTEXT hContext,
-                        LPCWSTR szGroupName)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardFreeMemory(SCARDCONTEXT hContext,
-                LPCVOID pvMem)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardGetAttrib(SCARDHANDLE hCard,
-               DWORD dwAttrId,
-               LPBYTE pbAttr,
-               LPDWORD pcbAttrLen)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardGetCardTypeProviderNameA(SCARDCONTEXT hContext,
-                              LPCSTR szCardName,
-                              DWORD dwProviderId,
-                              LPSTR szProvider,
-                              LPDWORD pcchProvider)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardGetCardTypeProviderNameW(SCARDCONTEXT hContext,
-                              LPCWSTR szCardName,
-                              DWORD dwProviderId,
-                              LPWSTR szProvider,
-                              LPDWORD pcchProvider)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardGetProviderIdA(SCARDCONTEXT hContext,
-                    LPCSTR szCard,
-                    LPGUID pguidProviderId)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardGetProviderIdW(SCARDCONTEXT hContext,
-                    LPCWSTR szCard,
-                    LPGUID pguidProviderId)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardGetStatusChangeA(SCARDCONTEXT hContext,
-                      DWORD dwTimeout,
-                      LPSCARD_READERSTATEA rgReaderState,
-                      DWORD cReaders)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
 
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardGetStatusChangeW(SCARDCONTEXT hContext,
-                      DWORD dwTimeout,
-                      LPSCARD_READERSTATEW rgReaderState,
-                      DWORD cReaders)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardIntroduceCardTypeA(SCARDCONTEXT hContext,
-                        LPCSTR szCardName,
-                        LPCGUID pguidPrimaryProvider,
-                        LPCGUID rgguidInterfaces,
-                        DWORD dwInterfaceCount,
-                        LPCBYTE pbAtr,
-                        LPCBYTE pbAtrMask,
-                        DWORD cbAtrLen)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardIntroduceCardTypeW(SCARDCONTEXT hContext,
-                        LPCWSTR szCardName,
-                        LPCGUID pguidPrimaryProvider,
-                        LPCGUID rgguidInterfaces,
-                        DWORD dwInterfaceCount,
-                        LPCBYTE pbAtr,
-                        LPCBYTE pbAtrMask,
-                        DWORD cbAtrLen)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardIntroduceReaderA(SCARDCONTEXT hContext,
-                      LPCSTR szReaderName,
-                      LPCSTR szDeviceName)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardIntroduceReaderW(SCARDCONTEXT hContext,
-                      LPCWSTR szReaderName,
-                      LPCWSTR szDeviceName)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardIntroduceReaderGroupA(SCARDCONTEXT hContext,
-                           LPCSTR szGroupName)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardIntroduceReaderGroupW(SCARDCONTEXT hContext,
-                           LPCWSTR szGroupName)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardIsValidContext(SCARDCONTEXT hContext)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardListCardsA(SCARDCONTEXT hContext,
-                LPCBYTE pbAtr,
-                LPCGUID rgguidInterface,
-                DWORD cguidInterfaceCount,
-                LPCSTR mszCards,
-                LPDWORD pcchCards)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardListCardsW(SCARDCONTEXT hContext,
-                LPCBYTE pbAtr,
-                LPCGUID rgguidInterface,
-                DWORD cguidInterfaceCount,
-                LPCWSTR mszCards,
-                LPDWORD pcchCards)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardListInterfacesA(SCARDCONTEXT hContext,
-                     LPCSTR szCard,
-                     LPGUID pguidInterfaces,
-                     LPDWORD pcguidInteraces)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardListInterfacesW(SCARDCONTEXT hContext,
-                     LPCWSTR szCard,
-                     LPGUID pguidInterfaces,
-                     LPDWORD pcguidInteraces)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardListReaderGroupsA(SCARDCONTEXT hContext,
-                       LPSTR mszGroups,
-                       LPDWORD pcchGroups)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
+#include <precomp.h>
 
+#include <winternl.h>
 
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardListReaderGroupsW(SCARDCONTEXT hContext,
-                       LPWSTR mszGroups,
-                       LPDWORD pcchGroups)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
+static HANDLE g_startedEvent = NULL;
 
+const SCARD_IO_REQUEST g_rgSCardT0Pci = { SCARD_PROTOCOL_T0, 8 };
+const SCARD_IO_REQUEST g_rgSCardT1Pci = { SCARD_PROTOCOL_T1, 8 };
+const SCARD_IO_REQUEST g_rgSCardRawPci = { SCARD_PROTOCOL_RAW, 8 };
 
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardListReadersA(SCARDCONTEXT Context,
-                  LPCSTR mszGroups,
-                  LPSTR mszReaders,
-                  LPDWORD pcchReaders)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
 
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardListReadersW(SCARDCONTEXT Context,
-                  LPCWSTR mszGroups,
-                  LPWSTR mszReaders,
-                  LPDWORD pcchReaders)
+BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
 {
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
+    TRACE("%p,%x,%p\n", hinstDLL, fdwReason, lpvReserved);
 
+    switch (fdwReason)
+    {
+        case DLL_PROCESS_ATTACH:
+            DisableThreadLibraryCalls(hinstDLL);
+            /* FIXME: for now, we act as if the pcsc daemon is always started */
+            g_startedEvent = CreateEventA(NULL,TRUE,TRUE,NULL);
+            break;
+        case DLL_PROCESS_DETACH:
+            if (lpvReserved) break;
+            CloseHandle(g_startedEvent);
+            break;
+    }
 
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardLocateCardsA(SCARDCONTEXT hContext,
-                  LPCSTR mszCards,
-                  LPSCARD_READERSTATEA rgReaderStates,
-                  DWORD cReaders)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
+    return TRUE;
 }
 
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardLocateCardsW(SCARDCONTEXT hContext,
-                  LPCWSTR mszCards,
-                  LPSCARD_READERSTATEW rgReaderStates,
-                  DWORD cReaders)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardLocateCardsByATRA(SCARDCONTEXT hContext,
-                       LPSCARD_ATRMASK rgAtrMasks,
-                       DWORD cAtrs,
-                       LPSCARD_READERSTATEA rgReaderStates,
-                       DWORD cReaders)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardLocateCardsByATRW(SCARDCONTEXT hContext,
-                       LPSCARD_ATRMASK rgAtrMasks,
-                       DWORD cAtrs,
-                       LPSCARD_READERSTATEW rgReaderStates,
-                       DWORD cReaders)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
-
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardReconnect(SCARDHANDLE hCard,
-               DWORD dwShareMode,
-               DWORD dwPreferredProtocols,
-               DWORD dwInitialization,
-               LPDWORD pdwActiveProtocol)
+HANDLE WINAPI SCardAccessStartedEvent(void)
 {
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
+    return g_startedEvent;
 }
 
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardReleaseContext(SCARDCONTEXT hContext)
+LONG WINAPI SCardAddReaderToGroupA(SCARDCONTEXT context, LPCSTR reader, LPCSTR group)
 {
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
-}
+    LONG retval;
+    UNICODE_STRING readerW, groupW;
 
+    if(reader) RtlCreateUnicodeStringFromAsciiz(&readerW,reader);
+    else readerW.Buffer = NULL;
+    if(group) RtlCreateUnicodeStringFromAsciiz(&groupW,group);
+    else groupW.Buffer = NULL;
 
-/*
- * @unimplemented
- */
-VOID
-WINAPI
-SCardReleaseStartedEvent(HANDLE hStartedEventHandle)
-{
-  UNIMPLEMENTED;
-}
+    retval = SCardAddReaderToGroupW(context, readerW.Buffer, groupW.Buffer);
 
+    RtlFreeUnicodeString(&readerW);
+    RtlFreeUnicodeString(&groupW);
 
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardRemoveReaderFromGroupA(SCARDCONTEXT hContext,
-                            LPCSTR szReaderName,
-                            LPCSTR szGroupname)
-{
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
+    return retval;
 }
 
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardRemoveReaderFromGroupW(SCARDCONTEXT hContext,
-                            LPCWSTR szReaderName,
-                            LPCWSTR szGroupname)
+LONG WINAPI SCardAddReaderToGroupW(SCARDCONTEXT context, LPCWSTR reader, LPCWSTR group)
 {
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
+    FIXME("%x %s %s\n", (unsigned int) context, debugstr_w(reader), debugstr_w(group));
+    return SCARD_S_SUCCESS;
 }
 
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardSetAttrib(SCARDHANDLE hCard,
-               DWORD dwAttrId,
-               LPCBYTE pbAttr,
-               DWORD cbAttrLen)
+LONG WINAPI SCardEstablishContext(DWORD dwScope, LPCVOID pvReserved1,
+    LPCVOID pvReserved2, LPSCARDCONTEXT phContext)
 {
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
+    FIXME("(%x,%p,%p,%p) stub\n", dwScope, pvReserved1, pvReserved2, phContext);
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return SCARD_F_INTERNAL_ERROR;
 }
 
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardSetCardTypeProviderNameA(SCARDCONTEXT hContext,
-                              LPCSTR szCardName,
-                              DWORD dwProviderId,
-                              LPCSTR szProvider)
+LONG WINAPI SCardIsValidContext(SCARDCONTEXT context)
 {
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
+    FIXME("(%lx) stub\n", context);
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return SCARD_F_INTERNAL_ERROR;
 }
 
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardSetCardTypeProviderNameW(SCARDCONTEXT hContext,
-                              LPCWSTR szCardName,
-                              DWORD dwProviderId,
-                              LPCWSTR szProvider)
+LONG WINAPI SCardListCardsA(SCARDCONTEXT hContext, LPCBYTE pbAtr, LPCGUID rgguidInterfaces, DWORD cguidInterfaceCount, LPSTR mszCards, LPDWORD pcchCards)
 {
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
+    FIXME(": stub\n");
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return SCARD_F_INTERNAL_ERROR;
 }
 
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardState(SCARDHANDLE hCard,
-           LPDWORD pdwState,
-           LPDWORD pdwProtocol,
-           LPBYTE pbAtr,
-           LPDWORD pcbAtrlen)
+LONG WINAPI SCardReleaseContext(SCARDCONTEXT context)
 {
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
+    FIXME("(%lx) stub\n", context);
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return SCARD_F_INTERNAL_ERROR;
 }
 
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardStatusA(SCARDHANDLE hCard,
-             LPSTR szReaderName,
-             LPDWORD pcchReaderLen,
-             LPDWORD pdwState,
-             LPDWORD pdwProtocol,
-             LPBYTE pbAtr,
-             LPDWORD pcbAtrLen)
+LONG WINAPI SCardStatusA(SCARDHANDLE context, LPSTR szReaderName, LPDWORD pcchReaderLen, LPDWORD pdwState, LPDWORD pdwProtocol, LPBYTE pbAtr, LPDWORD pcbAtrLen)
 {
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
+    FIXME("(%lx) stub\n", context);
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return SCARD_F_INTERNAL_ERROR;
 }
 
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardStatusW(SCARDHANDLE hCard,
-             LPWSTR szReaderName,
-             LPDWORD pcchReaderLen,
-             LPDWORD pdwState,
-             LPDWORD pdwProtocol,
-             LPBYTE pbAtr,
-             LPDWORD pcbAtrLen)
+LONG WINAPI SCardStatusW(SCARDHANDLE context, LPWSTR szReaderName, LPDWORD pcchReaderLen, LPDWORD pdwState,LPDWORD pdwProtocol,LPBYTE pbAtr,LPDWORD pcbArtLen)
 {
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
+    FIXME("(%lx) stub\n", context);
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return SCARD_F_INTERNAL_ERROR;
 }
 
-
-/*
- * @unimplemented
- */
-LONG
-WINAPI
-SCardTransmit(SCARDHANDLE hCard,
-              LPCSCARD_IO_REQUEST pioSendPci,
-              LPCBYTE pbSendBuffer,
-              DWORD cbSendLength,
-              LPSCARD_IO_REQUEST pioRecvPci,
-              LPBYTE pbRecvBuffer,
-              LPDWORD pcbRecvLength)
+void WINAPI SCardReleaseStartedEvent(void)
 {
-  UNIMPLEMENTED;
-  return SCARD_F_UNKNOWN_ERROR;
+    FIXME("stub\n");
 }
-