Headers diff for winscard.dll between 6.1.7601.17514-Windows_7.0 and 6.3.9600.17415-Windows_8.1 versions



 winscard.h (6.1.7601.17514-Windows_7.0)   winscard.h (6.3.9600.17415-Windows_8.1) 
skipping to change at line 36 skipping to change at line 36
#if defined (_MSC_VER) && (_MSC_VER >= 1020) #if defined (_MSC_VER) && (_MSC_VER >= 1020)
#pragma once #pragma once
#endif #endif
#include <wtypes.h> #include <wtypes.h>
#include <winioctl.h> #include <winioctl.h>
#include "winsmcrd.h" #include "winsmcrd.h"
#ifndef SCARD_S_SUCCESS #ifndef SCARD_S_SUCCESS
#include "SCardErr.h" #include "SCardErr.h"
#endif #endif
#include <winapifamily.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#pragma region Desktop Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
#ifndef _LPCBYTE_DEFINED #ifndef _LPCBYTE_DEFINED
#define _LPCBYTE_DEFINED #define _LPCBYTE_DEFINED
typedef const BYTE *LPCBYTE; typedef const BYTE *LPCBYTE;
#endif #endif
#ifndef _LPCVOID_DEFINED #ifndef _LPCVOID_DEFINED
#define _LPCVOID_DEFINED #define _LPCVOID_DEFINED
typedef const VOID *LPCVOID; typedef const VOID *LPCVOID;
#endif #endif
#ifndef WINSCARDAPI #ifndef WINSCARDAPI
skipping to change at line 104 skipping to change at line 108
// calling application must have appropriate // calling application must have appropriate
// access permissions for any database actions.) // access permissions for any database actions.)
#define SCARD_SCOPE_SYSTEM 2 // The context is the system context, and any #define SCARD_SCOPE_SYSTEM 2 // The context is the system context, and any
// database operations are performed within the // database operations are performed within the
// domain of the system. (The calling // domain of the system. (The calling
// application must have appropriate access // application must have appropriate access
// permissions for any database actions.) // permissions for any database actions.)
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardEstablishContext( SCardEstablishContext(
__in DWORD dwScope, _In_ DWORD dwScope,
__reserved LPCVOID pvReserved1, _Reserved_ LPCVOID pvReserved1,
__reserved LPCVOID pvReserved2, _Reserved_ LPCVOID pvReserved2,
__out LPSCARDCONTEXT phContext); _Out_ LPSCARDCONTEXT phContext);
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardReleaseContext( SCardReleaseContext(
__in SCARDCONTEXT hContext); _In_ SCARDCONTEXT hContext);
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardIsValidContext( SCardIsValidContext(
__in SCARDCONTEXT hContext); _In_ SCARDCONTEXT hContext);
// //
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// //
// Smart Card Database Management Services // Smart Card Database Management Services
// //
// The following services provide for managing the Smart Card Database. // The following services provide for managing the Smart Card Database.
// //
#define SCARD_ALL_READERS TEXT("SCard$AllReaders\000") #define SCARD_ALL_READERS TEXT("SCard$AllReaders\000")
skipping to change at line 140 skipping to change at line 144
#define SCARD_PROVIDER_PRIMARY 1 // Primary Provider Id #define SCARD_PROVIDER_PRIMARY 1 // Primary Provider Id
#define SCARD_PROVIDER_CSP 2 // Crypto Service Provider Id #define SCARD_PROVIDER_CSP 2 // Crypto Service Provider Id
#define SCARD_PROVIDER_KSP 3 // Key Storage Provider Id #define SCARD_PROVIDER_KSP 3 // Key Storage Provider Id
// //
// Database Reader routines // Database Reader routines
// //
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardListReaderGroupsA( SCardListReaderGroupsA(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__nullnullterminated __out_ecount_opt(*pcchGroups) LPSTR mszGroups, _Out_writes_opt_(*pcchGroups) _Post_ _NullNull_terminated_ LPSTR mszGroups,
__inout LPDWORD pcchGroups); _Inout_ LPDWORD pcchGroups);
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardListReaderGroupsW( SCardListReaderGroupsW(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__nullnullterminated __out_ecount_opt(*pcchGroups) LPWSTR mszGroups, _Out_writes_opt_(*pcchGroups) _Post_ _NullNull_terminated_ LPWSTR mszGroups
__inout LPDWORD pcchGroups); ,
_Inout_ LPDWORD pcchGroups);
#ifdef UNICODE #ifdef UNICODE
#define SCardListReaderGroups SCardListReaderGroupsW #define SCardListReaderGroups SCardListReaderGroupsW
#else #else
#define SCardListReaderGroups SCardListReaderGroupsA #define SCardListReaderGroups SCardListReaderGroupsA
#endif // !UNICODE #endif // !UNICODE
_Success_(return == SCARD_S_SUCCESS)
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardListReadersA( SCardListReadersA(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in_opt LPCSTR mszGroups, _In_opt_ LPCSTR mszGroups,
__nullnullterminated __out_ecount_opt(*pcchReaders) LPSTR mszReaders, _When_(_Old_(*pcchReaders) == SCARD_AUTOALLOCATE, _At_((LPSTR *)mszReaders,
__inout LPDWORD pcchReaders); _Outptr_result_buffer_maybenull_(*pcchReaders) _At_(*_Curr_, _Post_z_ _Post_ _Nu
llNull_terminated_)))
_When_(_Old_(*pcchReaders) != SCARD_AUTOALLOCATE, _Out_writes_opt_(*pcchRead
ers) _Post_ _NullNull_terminated_)
LPSTR mszReaders,
_Inout_ LPDWORD pcchReaders);
_Success_(return == SCARD_S_SUCCESS)
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardListReadersW( SCardListReadersW(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in_opt LPCWSTR mszGroups, _In_opt_ LPCWSTR mszGroups,
__nullnullterminated __out_ecount_opt(*pcchReaders) LPWSTR mszReaders, _When_(_Old_(*pcchReaders) == SCARD_AUTOALLOCATE, _At_((LPWSTR *)mszReaders,
__inout LPDWORD pcchReaders); _Outptr_result_buffer_maybenull_(*pcchReaders) _At_(*_Curr_, _Post_z_ _Post_ _N
ullNull_terminated_)))
_When_(_Old_(*pcchReaders) != SCARD_AUTOALLOCATE, _Out_writes_opt_(*pcchRead
ers) _Post_ _NullNull_terminated_)
LPWSTR mszReaders,
_Inout_ LPDWORD pcchReaders);
#ifdef UNICODE #ifdef UNICODE
#define SCardListReaders SCardListReadersW #define SCardListReaders SCardListReadersW
#else #else
#define SCardListReaders SCardListReadersA #define SCardListReaders SCardListReadersA
#endif // !UNICODE #endif // !UNICODE
_Success_(return == SCARD_S_SUCCESS)
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardListCardsA( SCardListCardsA(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in_opt LPCBYTE pbAtr, _In_opt_ LPCBYTE pbAtr,
__in_ecount_opt(cguidInterfaceCount) LPCGUID rgquidInterfaces, _In_reads_opt_(cguidInterfaceCount) LPCGUID rgquidInterfaces,
__in DWORD cguidInterfaceCount, _In_ DWORD cguidInterfaceCount,
__nullnullterminated __out_ecount_opt(*pcchCards) LPSTR mszCards, _When_(_Old_(*pcchCards) == SCARD_AUTOALLOCATE, _At_((LPSTR *)mszCards, _Out
__inout LPDWORD pcchCards); ptr_result_buffer_maybenull_(*pcchCards) _At_(*_Curr_, _Post_z_)))
_When_(_Old_(*pcchCards) != SCARD_AUTOALLOCATE, _Out_writes_opt_z_(*pcchCard
s))
CHAR *mszCards,
_Inout_ LPDWORD pcchCards);
_Success_(return == SCARD_S_SUCCESS)
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardListCardsW( SCardListCardsW(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in_opt LPCBYTE pbAtr, _In_opt_ LPCBYTE pbAtr,
__in_ecount_opt(cguidInterfaceCount) LPCGUID rgquidInterfaces, _In_reads_opt_(cguidInterfaceCount) LPCGUID rgquidInterfaces,
__in DWORD cguidInterfaceCount, _In_ DWORD cguidInterfaceCount,
__nullnullterminated __out_ecount_opt(*pcchCards) LPWSTR mszCards, _When_(_Old_(*pcchCards) == SCARD_AUTOALLOCATE, _At_((LPWSTR *)mszCards, _Ou
__inout LPDWORD pcchCards); tptr_result_buffer_maybenull_(*pcchCards) _At_(*_Curr_, _Post_z_)))
_When_(_Old_(*pcchCards) != SCARD_AUTOALLOCATE, _Out_writes_opt_z_(*pcchCard
s))
WCHAR *mszCards,
_Inout_ LPDWORD pcchCards);
#ifdef UNICODE #ifdef UNICODE
#define SCardListCards SCardListCardsW #define SCardListCards SCardListCardsW
#else #else
#define SCardListCards SCardListCardsA #define SCardListCards SCardListCardsA
#endif // !UNICODE #endif // !UNICODE
// //
// NOTE: The routine SCardListCards name differs from the PC/SC definition. // NOTE: The routine SCardListCards name differs from the PC/SC definition.
// It should be: // It should be:
// //
// extern WINSCARDAPI LONG WINAPI // extern WINSCARDAPI LONG WINAPI
// SCardListCardTypes( // SCardListCardTypes(
// __in SCARDCONTEXT hContext, // _In_ SCARDCONTEXT hContext,
// __in_opt LPCBYTE pbAtr, // _In_opt_ LPCBYTE pbAtr,
// __in_opt LPCGUID rgquidInterfaces, // _In_opt_ LPCGUID rgquidInterfaces,
// __in DWORD cguidInterfaceCount, // _In_ DWORD cguidInterfaceCount,
// __out_opt LPTSTR mszCards, // _Out_opt_ LPTSTR mszCards,
// __inout LPDWORD pcchCards); // _Inout_ LPDWORD pcchCards);
// //
// Here's a work-around MACRO: // Here's a work-around MACRO:
#define SCardListCardTypes SCardListCards #define SCardListCardTypes SCardListCards
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardListInterfacesA( SCardListInterfacesA(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCSTR szCard, _In_ LPCSTR szCard,
__out LPGUID pguidInterfaces, _Out_ LPGUID pguidInterfaces,
__inout LPDWORD pcguidInterfaces); _Inout_ LPDWORD pcguidInterfaces);
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardListInterfacesW( SCardListInterfacesW(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCWSTR szCard, _In_ LPCWSTR szCard,
__out LPGUID pguidInterfaces, _Out_ LPGUID pguidInterfaces,
__inout LPDWORD pcguidInterfaces); _Inout_ LPDWORD pcguidInterfaces);
#ifdef UNICODE #ifdef UNICODE
#define SCardListInterfaces SCardListInterfacesW #define SCardListInterfaces SCardListInterfacesW
#else #else
#define SCardListInterfaces SCardListInterfacesA #define SCardListInterfaces SCardListInterfacesA
#endif // !UNICODE #endif // !UNICODE
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardGetProviderIdA( SCardGetProviderIdA(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCSTR szCard, _In_ LPCSTR szCard,
__out LPGUID pguidProviderId); _Out_ LPGUID pguidProviderId);
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardGetProviderIdW( SCardGetProviderIdW(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCWSTR szCard, _In_ LPCWSTR szCard,
__out LPGUID pguidProviderId); _Out_ LPGUID pguidProviderId);
#ifdef UNICODE #ifdef UNICODE
#define SCardGetProviderId SCardGetProviderIdW #define SCardGetProviderId SCardGetProviderIdW
#else #else
#define SCardGetProviderId SCardGetProviderIdA #define SCardGetProviderId SCardGetProviderIdA
#endif // !UNICODE #endif // !UNICODE
// //
// NOTE: The routine SCardGetProviderId in this implementation uses GUIDs. // NOTE: The routine SCardGetProviderId in this implementation uses GUIDs.
// The PC/SC definition uses BYTEs. // The PC/SC definition uses BYTEs.
// //
_Success_(return == SCARD_S_SUCCESS)
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardGetCardTypeProviderNameA( SCardGetCardTypeProviderNameA(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCSTR szCardName, _In_ LPCSTR szCardName,
__in DWORD dwProviderId, _In_ DWORD dwProviderId,
__out_ecount_opt(*pcchProvider) LPSTR szProvider, _When_(_Old_(*pcchProvider) == SCARD_AUTOALLOCATE, _At_((LPSTR *)szProvider,
__inout LPDWORD pcchProvider); _Outptr_result_buffer_all_(*pcchProvider)))
_When_(_Old_(*pcchProvider) != SCARD_AUTOALLOCATE, _Out_writes_to_(*pcchProv
ider, *pcchProvider) _Post_z_)
CHAR *szProvider,
_Inout_ LPDWORD pcchProvider);
_Success_(return == SCARD_S_SUCCESS)
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardGetCardTypeProviderNameW( SCardGetCardTypeProviderNameW(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCWSTR szCardName, _In_ LPCWSTR szCardName,
__in DWORD dwProviderId, _In_ DWORD dwProviderId,
__out_ecount_opt(*pcchProvider) LPWSTR szProvider, _When_(_Old_(*pcchProvider) == SCARD_AUTOALLOCATE, _At_((LPWSTR *)szProvider
__inout LPDWORD pcchProvider); , _Outptr_result_buffer_all_(*pcchProvider)))
_When_(_Old_(*pcchProvider) != SCARD_AUTOALLOCATE, _Out_writes_to_(*pcchProv
ider, *pcchProvider) _Post_z_)
WCHAR *szProvider,
_Inout_ LPDWORD pcchProvider);
#ifdef UNICODE #ifdef UNICODE
#define SCardGetCardTypeProviderName SCardGetCardTypeProviderNameW #define SCardGetCardTypeProviderName SCardGetCardTypeProviderNameW
#else #else
#define SCardGetCardTypeProviderName SCardGetCardTypeProviderNameA #define SCardGetCardTypeProviderName SCardGetCardTypeProviderNameA
#endif // !UNICODE #endif // !UNICODE
// //
// NOTE: This routine is an extension to the PC/SC definitions. // NOTE: This routine is an extension to the PC/SC definitions.
// //
// //
// Database Writer routines // Database Writer routines
// //
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardIntroduceReaderGroupA( SCardIntroduceReaderGroupA(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCSTR szGroupName); _In_ LPCSTR szGroupName);
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardIntroduceReaderGroupW( SCardIntroduceReaderGroupW(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCWSTR szGroupName); _In_ LPCWSTR szGroupName);
#ifdef UNICODE #ifdef UNICODE
#define SCardIntroduceReaderGroup SCardIntroduceReaderGroupW #define SCardIntroduceReaderGroup SCardIntroduceReaderGroupW
#else #else
#define SCardIntroduceReaderGroup SCardIntroduceReaderGroupA #define SCardIntroduceReaderGroup SCardIntroduceReaderGroupA
#endif // !UNICODE #endif // !UNICODE
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardForgetReaderGroupA( SCardForgetReaderGroupA(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCSTR szGroupName); _In_ LPCSTR szGroupName);
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardForgetReaderGroupW( SCardForgetReaderGroupW(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCWSTR szGroupName); _In_ LPCWSTR szGroupName);
#ifdef UNICODE #ifdef UNICODE
#define SCardForgetReaderGroup SCardForgetReaderGroupW #define SCardForgetReaderGroup SCardForgetReaderGroupW
#else #else
#define SCardForgetReaderGroup SCardForgetReaderGroupA #define SCardForgetReaderGroup SCardForgetReaderGroupA
#endif // !UNICODE #endif // !UNICODE
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardIntroduceReaderA( SCardIntroduceReaderA(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCSTR szReaderName, _In_ LPCSTR szReaderName,
__in LPCSTR szDeviceName); _In_ LPCSTR szDeviceName);
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardIntroduceReaderW( SCardIntroduceReaderW(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCWSTR szReaderName, _In_ LPCWSTR szReaderName,
__in LPCWSTR szDeviceName); _In_ LPCWSTR szDeviceName);
#ifdef UNICODE #ifdef UNICODE
#define SCardIntroduceReader SCardIntroduceReaderW #define SCardIntroduceReader SCardIntroduceReaderW
#else #else
#define SCardIntroduceReader SCardIntroduceReaderA #define SCardIntroduceReader SCardIntroduceReaderA
#endif // !UNICODE #endif // !UNICODE
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardForgetReaderA( SCardForgetReaderA(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCSTR szReaderName); _In_ LPCSTR szReaderName);
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardForgetReaderW( SCardForgetReaderW(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCWSTR szReaderName); _In_ LPCWSTR szReaderName);
#ifdef UNICODE #ifdef UNICODE
#define SCardForgetReader SCardForgetReaderW #define SCardForgetReader SCardForgetReaderW
#else #else
#define SCardForgetReader SCardForgetReaderA #define SCardForgetReader SCardForgetReaderA
#endif // !UNICODE #endif // !UNICODE
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardAddReaderToGroupA( SCardAddReaderToGroupA(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCSTR szReaderName, _In_ LPCSTR szReaderName,
__in LPCSTR szGroupName); _In_ LPCSTR szGroupName);
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardAddReaderToGroupW( SCardAddReaderToGroupW(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCWSTR szReaderName, _In_ LPCWSTR szReaderName,
__in LPCWSTR szGroupName); _In_ LPCWSTR szGroupName);
#ifdef UNICODE #ifdef UNICODE
#define SCardAddReaderToGroup SCardAddReaderToGroupW #define SCardAddReaderToGroup SCardAddReaderToGroupW
#else #else
#define SCardAddReaderToGroup SCardAddReaderToGroupA #define SCardAddReaderToGroup SCardAddReaderToGroupA
#endif // !UNICODE #endif // !UNICODE
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardRemoveReaderFromGroupA( SCardRemoveReaderFromGroupA(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCSTR szReaderName, _In_ LPCSTR szReaderName,
__in LPCSTR szGroupName); _In_ LPCSTR szGroupName);
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardRemoveReaderFromGroupW( SCardRemoveReaderFromGroupW(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCWSTR szReaderName, _In_ LPCWSTR szReaderName,
__in LPCWSTR szGroupName); _In_ LPCWSTR szGroupName);
#ifdef UNICODE #ifdef UNICODE
#define SCardRemoveReaderFromGroup SCardRemoveReaderFromGroupW #define SCardRemoveReaderFromGroup SCardRemoveReaderFromGroupW
#else #else
#define SCardRemoveReaderFromGroup SCardRemoveReaderFromGroupA #define SCardRemoveReaderFromGroup SCardRemoveReaderFromGroupA
#endif // !UNICODE #endif // !UNICODE
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardIntroduceCardTypeA( SCardIntroduceCardTypeA(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCSTR szCardName, _In_ LPCSTR szCardName,
__in_opt LPCGUID pguidPrimaryProvider, _In_opt_ LPCGUID pguidPrimaryProvider,
__in_opt LPCGUID rgguidInterfaces, _In_opt_ LPCGUID rgguidInterfaces,
__in DWORD dwInterfaceCount, _In_ DWORD dwInterfaceCount,
__in LPCBYTE pbAtr, _In_ LPCBYTE pbAtr,
__in LPCBYTE pbAtrMask, _In_ LPCBYTE pbAtrMask,
__in DWORD cbAtrLen); _In_ DWORD cbAtrLen);
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardIntroduceCardTypeW( SCardIntroduceCardTypeW(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCWSTR szCardName, _In_ LPCWSTR szCardName,
__in_opt LPCGUID pguidPrimaryProvider, _In_opt_ LPCGUID pguidPrimaryProvider,
__in_opt LPCGUID rgguidInterfaces, _In_opt_ LPCGUID rgguidInterfaces,
__in DWORD dwInterfaceCount, _In_ DWORD dwInterfaceCount,
__in LPCBYTE pbAtr, _In_ LPCBYTE pbAtr,
__in LPCBYTE pbAtrMask, _In_ LPCBYTE pbAtrMask,
__in DWORD cbAtrLen); _In_ DWORD cbAtrLen);
#ifdef UNICODE #ifdef UNICODE
#define SCardIntroduceCardType SCardIntroduceCardTypeW #define SCardIntroduceCardType SCardIntroduceCardTypeW
#else #else
#define SCardIntroduceCardType SCardIntroduceCardTypeA #define SCardIntroduceCardType SCardIntroduceCardTypeA
#endif // !UNICODE #endif // !UNICODE
// //
// NOTE: The routine SCardIntroduceCardType's parameters' order differs from // NOTE: The routine SCardIntroduceCardType's parameters' order differs from
// the PC/SC definition. It should be: // the PC/SC definition. It should be:
// //
// extern WINSCARDAPI LONG WINAPI // extern WINSCARDAPI LONG WINAPI
// SCardIntroduceCardType( // SCardIntroduceCardType(
// __in SCARDCONTEXT hContext, // _In_ SCARDCONTEXT hContext,
// __in LPCTSTR szCardName, // _In_ LPCTSTR szCardName,
// __in LPCBYTE pbAtr, // _In_ LPCBYTE pbAtr,
// __in LPCBYTE pbAtrMask, // _In_ LPCBYTE pbAtrMask,
// __in DWORD cbAtrLen, // _In_ DWORD cbAtrLen,
// __in_opt LPCGUID pguidPrimaryProvider, // _In_opt_ LPCGUID pguidPrimaryProvider,
// __in_opt LPCGUID rgguidInterfaces, // _In_opt_ LPCGUID rgguidInterfaces,
// __in DWORD dwInterfaceCount); // _In_ DWORD dwInterfaceCount);
// //
// Here's a work-around MACRO: // Here's a work-around MACRO:
#define PCSCardIntroduceCardType(hContext, szCardName, pbAtr, pbAtrMask, cbAtrLe n, pguidPrimaryProvider, rgguidInterfaces, dwInterfaceCount) \ #define PCSCardIntroduceCardType(hContext, szCardName, pbAtr, pbAtrMask, cbAtrLe n, pguidPrimaryProvider, rgguidInterfaces, dwInterfaceCount) \
SCardIntroduceCardType(hContext, szCardName, pguidPrimaryProvider, rgg uidInterfaces, dwInterfaceCount, pbAtr, pbAtrMask, cbAtrLen) SCardIntroduceCardType(hContext, szCardName, pguidPrimaryProvider, rgg uidInterfaces, dwInterfaceCount, pbAtr, pbAtrMask, cbAtrLen)
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardSetCardTypeProviderNameA( SCardSetCardTypeProviderNameA(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCSTR szCardName, _In_ LPCSTR szCardName,
__in DWORD dwProviderId, _In_ DWORD dwProviderId,
__in LPCSTR szProvider); _In_ LPCSTR szProvider);
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardSetCardTypeProviderNameW( SCardSetCardTypeProviderNameW(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCWSTR szCardName, _In_ LPCWSTR szCardName,
__in DWORD dwProviderId, _In_ DWORD dwProviderId,
__in LPCWSTR szProvider); _In_ LPCWSTR szProvider);
#ifdef UNICODE #ifdef UNICODE
#define SCardSetCardTypeProviderName SCardSetCardTypeProviderNameW #define SCardSetCardTypeProviderName SCardSetCardTypeProviderNameW
#else #else
#define SCardSetCardTypeProviderName SCardSetCardTypeProviderNameA #define SCardSetCardTypeProviderName SCardSetCardTypeProviderNameA
#endif // !UNICODE #endif // !UNICODE
// //
// NOTE: This routine is an extention to the PC/SC specifications. // NOTE: This routine is an extention to the PC/SC specifications.
// //
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardForgetCardTypeA( SCardForgetCardTypeA(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCSTR szCardName); _In_ LPCSTR szCardName);
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardForgetCardTypeW( SCardForgetCardTypeW(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCWSTR szCardName); _In_ LPCWSTR szCardName);
#ifdef UNICODE #ifdef UNICODE
#define SCardForgetCardType SCardForgetCardTypeW #define SCardForgetCardType SCardForgetCardTypeW
#else #else
#define SCardForgetCardType SCardForgetCardTypeA #define SCardForgetCardType SCardForgetCardTypeA
#endif // !UNICODE #endif // !UNICODE
// //
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// //
// Service Manager Support Routines // Service Manager Support Routines
// //
// The following services are supplied to simplify the use of the Service // The following services are supplied to simplify the use of the Service
// Manager API. // Manager API.
// //
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardFreeMemory( SCardFreeMemory(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCVOID pvMem); _In_ LPCVOID pvMem);
#if (NTDDI_VERSION >= NTDDI_WINXP) #if (NTDDI_VERSION >= NTDDI_WINXP)
extern WINSCARDAPI HANDLE WINAPI extern WINSCARDAPI HANDLE WINAPI
SCardAccessStartedEvent(void); SCardAccessStartedEvent(void);
extern WINSCARDAPI void WINAPI extern WINSCARDAPI void WINAPI
SCardReleaseStartedEvent(void); SCardReleaseStartedEvent(void);
#endif // (NTDDI_VERSION >= NTDDI_WINXP) #endif // (NTDDI_VERSION >= NTDDI_WINXP)
// //
skipping to change at line 571 skipping to change at line 593
// set. // set.
#define SCARD_STATE_MUTE 0x00000200 // This implies that the card in the #define SCARD_STATE_MUTE 0x00000200 // This implies that the card in the
// reader is unresponsive or not // reader is unresponsive or not
// supported by the reader or // supported by the reader or
// software. // software.
#define SCARD_STATE_UNPOWERED 0x00000400 // This implies that the card in the #define SCARD_STATE_UNPOWERED 0x00000400 // This implies that the card in the
// reader has not been powered up. // reader has not been powered up.
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardLocateCardsA( SCardLocateCardsA(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCSTR mszCards, _In_ LPCSTR mszCards,
__inout LPSCARD_READERSTATEA rgReaderStates, _Inout_ LPSCARD_READERSTATEA rgReaderStates,
__in DWORD cReaders); _In_ DWORD cReaders);
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardLocateCardsW( SCardLocateCardsW(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCWSTR mszCards, _In_ LPCWSTR mszCards,
__inout LPSCARD_READERSTATEW rgReaderStates, _Inout_ LPSCARD_READERSTATEW rgReaderStates,
__in DWORD cReaders); _In_ DWORD cReaders);
#ifdef UNICODE #ifdef UNICODE
#define SCardLocateCards SCardLocateCardsW #define SCardLocateCards SCardLocateCardsW
#else #else
#define SCardLocateCards SCardLocateCardsA #define SCardLocateCards SCardLocateCardsA
#endif // !UNICODE #endif // !UNICODE
#if (NTDDI_VERSION >= NTDDI_WINXP) #if (NTDDI_VERSION >= NTDDI_WINXP)
typedef struct _SCARD_ATRMASK { typedef struct _SCARD_ATRMASK {
DWORD cbAtr; // Number of bytes in the ATR and the mask. DWORD cbAtr; // Number of bytes in the ATR and the mask.
BYTE rgbAtr[36]; // Atr of card (extra alignment bytes) BYTE rgbAtr[36]; // Atr of card (extra alignment bytes)
BYTE rgbMask[36]; // Mask for the Atr (extra alignment bytes) BYTE rgbMask[36]; // Mask for the Atr (extra alignment bytes)
} SCARD_ATRMASK, *PSCARD_ATRMASK, *LPSCARD_ATRMASK; } SCARD_ATRMASK, *PSCARD_ATRMASK, *LPSCARD_ATRMASK;
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardLocateCardsByATRA( SCardLocateCardsByATRA(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPSCARD_ATRMASK rgAtrMasks, _In_ LPSCARD_ATRMASK rgAtrMasks,
__in DWORD cAtrs, _In_ DWORD cAtrs,
__inout LPSCARD_READERSTATEA rgReaderStates, _Inout_ LPSCARD_READERSTATEA rgReaderStates,
__in DWORD cReaders); _In_ DWORD cReaders);
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardLocateCardsByATRW( SCardLocateCardsByATRW(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPSCARD_ATRMASK rgAtrMasks, _In_ LPSCARD_ATRMASK rgAtrMasks,
__in DWORD cAtrs, _In_ DWORD cAtrs,
__inout LPSCARD_READERSTATEW rgReaderStates, _Inout_ LPSCARD_READERSTATEW rgReaderStates,
__in DWORD cReaders); _In_ DWORD cReaders);
#ifdef UNICODE #ifdef UNICODE
#define SCardLocateCardsByATR SCardLocateCardsByATRW #define SCardLocateCardsByATR SCardLocateCardsByATRW
#else #else
#define SCardLocateCardsByATR SCardLocateCardsByATRA #define SCardLocateCardsByATR SCardLocateCardsByATRA
#endif // !UNICODE #endif // !UNICODE
#endif // (NTDDI_VERSION >= NTDDI_WINXP) #endif // (NTDDI_VERSION >= NTDDI_WINXP)
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardGetStatusChangeA( SCardGetStatusChangeA(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in DWORD dwTimeout, _In_ DWORD dwTimeout,
__inout LPSCARD_READERSTATEA rgReaderStates, _Inout_ LPSCARD_READERSTATEA rgReaderStates,
__in DWORD cReaders); _In_ DWORD cReaders);
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardGetStatusChangeW( SCardGetStatusChangeW(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in DWORD dwTimeout, _In_ DWORD dwTimeout,
__inout LPSCARD_READERSTATEW rgReaderStates, _Inout_ LPSCARD_READERSTATEW rgReaderStates,
__in DWORD cReaders); _In_ DWORD cReaders);
#ifdef UNICODE #ifdef UNICODE
#define SCardGetStatusChange SCardGetStatusChangeW #define SCardGetStatusChange SCardGetStatusChangeW
#else #else
#define SCardGetStatusChange SCardGetStatusChangeA #define SCardGetStatusChange SCardGetStatusChangeA
#endif // !UNICODE #endif // !UNICODE
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardCancel( SCardCancel(
__in SCARDCONTEXT hContext); _In_ SCARDCONTEXT hContext);
// //
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// //
// Card/Reader Communication Services // Card/Reader Communication Services
// //
// The following services provide means for communication with the card. // The following services provide means for communication with the card.
// //
#define SCARD_SHARE_EXCLUSIVE 1 // This application is not willing to share this #define SCARD_SHARE_EXCLUSIVE 1 // This application is not willing to share this
skipping to change at line 660 skipping to change at line 682
// the reader, so it is not available to other // the reader, so it is not available to other
// applications. // applications.
#define SCARD_LEAVE_CARD 0 // Don't do anything special on close #define SCARD_LEAVE_CARD 0 // Don't do anything special on close
#define SCARD_RESET_CARD 1 // Reset the card on close #define SCARD_RESET_CARD 1 // Reset the card on close
#define SCARD_UNPOWER_CARD 2 // Power down the card on close #define SCARD_UNPOWER_CARD 2 // Power down the card on close
#define SCARD_EJECT_CARD 3 // Eject the card on close #define SCARD_EJECT_CARD 3 // Eject the card on close
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardConnectA( SCardConnectA(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCSTR szReader, _In_ LPCSTR szReader,
__in DWORD dwShareMode, _In_ DWORD dwShareMode,
__in DWORD dwPreferredProtocols, _In_ DWORD dwPreferredProtocols,
__out LPSCARDHANDLE phCard, _Out_ LPSCARDHANDLE phCard,
__out LPDWORD pdwActiveProtocol); _Out_ LPDWORD pdwActiveProtocol);
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardConnectW( SCardConnectW(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in LPCWSTR szReader, _In_ LPCWSTR szReader,
__in DWORD dwShareMode, _In_ DWORD dwShareMode,
__in DWORD dwPreferredProtocols, _In_ DWORD dwPreferredProtocols,
__out LPSCARDHANDLE phCard, _Out_ LPSCARDHANDLE phCard,
__out LPDWORD pdwActiveProtocol); _Out_ LPDWORD pdwActiveProtocol);
#ifdef UNICODE #ifdef UNICODE
#define SCardConnect SCardConnectW #define SCardConnect SCardConnectW
#else #else
#define SCardConnect SCardConnectA #define SCardConnect SCardConnectA
#endif // !UNICODE #endif // !UNICODE
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardReconnect( SCardReconnect(
__in SCARDHANDLE hCard, _In_ SCARDHANDLE hCard,
__in DWORD dwShareMode, _In_ DWORD dwShareMode,
__in DWORD dwPreferredProtocols, _In_ DWORD dwPreferredProtocols,
__in DWORD dwInitialization, _In_ DWORD dwInitialization,
__out_opt LPDWORD pdwActiveProtocol); _Out_opt_ LPDWORD pdwActiveProtocol);
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardDisconnect( SCardDisconnect(
__in SCARDHANDLE hCard, _In_ SCARDHANDLE hCard,
__in DWORD dwDisposition); _In_ DWORD dwDisposition);
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardBeginTransaction( SCardBeginTransaction(
__in SCARDHANDLE hCard); _In_ SCARDHANDLE hCard);
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardEndTransaction( SCardEndTransaction(
__in SCARDHANDLE hCard, _In_ SCARDHANDLE hCard,
__in DWORD dwDisposition); _In_ DWORD dwDisposition);
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardCancelTransaction( SCardCancelTransaction(
__in SCARDHANDLE hCard); _In_ SCARDHANDLE hCard);
// //
// NOTE: This call corresponds to the PC/SC SCARDCOMM::Cancel routine, // NOTE: This call corresponds to the PC/SC SCARDCOMM::Cancel routine,
// terminating a blocked SCardBeginTransaction service. // terminating a blocked SCardBeginTransaction service.
// //
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardState( SCardState(
__in SCARDHANDLE hCard, _In_ SCARDHANDLE hCard,
__out LPDWORD pdwState, _Out_ LPDWORD pdwState,
__out LPDWORD pdwProtocol, _Out_ LPDWORD pdwProtocol,
__out_bcount(*pcbAtrLen) LPBYTE pbAtr, _Out_writes_bytes_(*pcbAtrLen) LPBYTE pbAtr,
__inout LPDWORD pcbAtrLen); _Inout_ LPDWORD pcbAtrLen);
// //
// NOTE: SCardState is an obsolete routine. PC/SC has replaced it with // NOTE: SCardState is an obsolete routine. PC/SC has replaced it with
// SCardStatus. // SCardStatus.
// //
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardStatusA( SCardStatusA(
__in SCARDHANDLE hCard, _In_ SCARDHANDLE hCard,
__nullnullterminated __out_ecount_opt(*pcchReaderLen) LPSTR mszReaderNames, _When_(_Old_(*pcchReaderLen) == SCARD_AUTOALLOCATE, _At_((LPSTR *)mszReaderN
__inout_opt LPDWORD pcchReaderLen, ames, _Outptr_result_buffer_maybenull_(*pcchReaderLen) _At_(*_Curr_, _Post_z_ _P
__out_opt LPDWORD pdwState, ost_ _NullNull_terminated_)))
__out_opt LPDWORD pdwProtocol, _When_(_Old_(*pcchReaderLen) != SCARD_AUTOALLOCATE, _Out_writes_opt_(*pcchRe
__out_ecount_opt(*pcbAtrLen) LPBYTE pbAtr, aderLen) _Post_ _NullNull_terminated_)
__inout_opt LPDWORD pcbAtrLen); LPSTR mszReaderNames,
_Inout_opt_ LPDWORD pcchReaderLen,
_Out_opt_ LPDWORD pdwState,
_Out_opt_ LPDWORD pdwProtocol,
_When_(_Old_(*pcbAtrLen) == SCARD_AUTOALLOCATE, _At_((LPBYTE *)pbAtr, _Outpt
r_result_buffer_maybenull_(*pcbAtrLen) _At_(*_Curr_, _Post_ _NullNull_terminated
_)))
_When_(_Old_(*pcbAtrLen) != SCARD_AUTOALLOCATE, _Out_writes_opt_(*pcbAtrLen)
_Post_ _NullNull_terminated_)
LPBYTE pbAtr,
_Inout_opt_ LPDWORD pcbAtrLen);
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardStatusW( SCardStatusW(
__in SCARDHANDLE hCard, _In_ SCARDHANDLE hCard,
__nullnullterminated __out_ecount_opt(*pcchReaderLen) LPWSTR mszReaderNames, _When_(_Old_(*pcchReaderLen) == SCARD_AUTOALLOCATE, _At_((LPWSTR *)mszReader
__inout_opt LPDWORD pcchReaderLen, Names, _Outptr_result_buffer_maybenull_(*pcchReaderLen) _At_(*_Curr_, _Post_z_ _
__out_opt LPDWORD pdwState, Post_ _NullNull_terminated_)))
__out_opt LPDWORD pdwProtocol, _When_(_Old_(*pcchReaderLen) != SCARD_AUTOALLOCATE, _Out_writes_opt_(*pcchRe
__out_ecount_opt(*pcbAtrLen) LPBYTE pbAtr, aderLen) _Post_ _NullNull_terminated_)
__inout_opt LPDWORD pcbAtrLen); LPWSTR mszReaderNames,
_Inout_opt_ LPDWORD pcchReaderLen,
_Out_opt_ LPDWORD pdwState,
_Out_opt_ LPDWORD pdwProtocol,
_When_(_Old_(*pcbAtrLen) == SCARD_AUTOALLOCATE, _At_((LPBYTE *)pbAtr, _Outpt
r_result_buffer_maybenull_(*pcbAtrLen) _At_(*_Curr_, _Post_ _NullNull_terminated
_)))
_When_(_Old_(*pcbAtrLen) != SCARD_AUTOALLOCATE, _Out_writes_opt_(*pcbAtrLen)
_Post_ _NullNull_terminated_)
LPBYTE pbAtr,
_Inout_opt_ LPDWORD pcbAtrLen);
#ifdef UNICODE #ifdef UNICODE
#define SCardStatus SCardStatusW #define SCardStatus SCardStatusW
#else #else
#define SCardStatus SCardStatusA #define SCardStatus SCardStatusA
#endif // !UNICODE #endif // !UNICODE
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardTransmit( SCardTransmit(
__in SCARDHANDLE hCard, _In_ SCARDHANDLE hCard,
__in LPCSCARD_IO_REQUEST pioSendPci, _In_ LPCSCARD_IO_REQUEST pioSendPci,
__in_bcount(cbSendLength) LPCBYTE pbSendBuffer, _In_reads_bytes_(cbSendLength) LPCBYTE pbSendBuffer,
__in DWORD cbSendLength, _In_ DWORD cbSendLength,
__inout_opt LPSCARD_IO_REQUEST pioRecvPci, _Inout_opt_ LPSCARD_IO_REQUEST pioRecvPci,
__out_bcount(*pcbRecvLength) LPBYTE pbRecvBuffer, _Out_writes_bytes_(*pcbRecvLength) LPBYTE pbRecvBuffer,
__inout LPDWORD pcbRecvLength); _Inout_ LPDWORD pcbRecvLength);
#if (NTDDI_VERSION >= NTDDI_VISTA) #if (NTDDI_VERSION >= NTDDI_VISTA)
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardGetTransmitCount( SCardGetTransmitCount(
__in SCARDHANDLE hCard, _In_ SCARDHANDLE hCard,
__out LPDWORD pcTransmitCount); _Out_ LPDWORD pcTransmitCount);
#endif // (NTDDI_VERSION >= NTDDI_VISTA) #endif // (NTDDI_VERSION >= NTDDI_VISTA)
// //
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// //
// Reader Control Routines // Reader Control Routines
// //
// The following services provide for direct, low-level manipulation of the // The following services provide for direct, low-level manipulation of the
// reader by the calling application allowing it control over the // reader by the calling application allowing it control over the
// attributes of the communications with the card. // attributes of the communications with the card.
// //
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardControl( SCardControl(
__in SCARDHANDLE hCard, _In_ SCARDHANDLE hCard,
__in DWORD dwControlCode, _In_ DWORD dwControlCode,
__in_bcount(cbInBufferSize) LPCVOID lpInBuffer, _In_reads_bytes_(cbInBufferSize) LPCVOID lpInBuffer,
__in DWORD cbInBufferSize, _In_ DWORD cbInBufferSize,
__out_bcount(cbOutBufferSize) LPVOID lpOutBuffer, _Out_writes_bytes_(cbOutBufferSize) LPVOID lpOutBuffer,
__in DWORD cbOutBufferSize, _In_ DWORD cbOutBufferSize,
__out LPDWORD lpBytesReturned); _Out_ LPDWORD lpBytesReturned);
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardGetAttrib( SCardGetAttrib(
__in SCARDHANDLE hCard, _In_ SCARDHANDLE hCard,
__in DWORD dwAttrId, _In_ DWORD dwAttrId,
__out_bcount_opt(*pcbAttrLen) LPBYTE pbAttr, _Out_writes_bytes_opt_(*pcbAttrLen) LPBYTE pbAttr,
__inout LPDWORD pcbAttrLen); _Inout_ LPDWORD pcbAttrLen);
// //
// NOTE: The routine SCardGetAttrib's name differs from the PC/SC definition. // NOTE: The routine SCardGetAttrib's name differs from the PC/SC definition.
// It should be: // It should be:
// //
// extern WINSCARDAPI LONG WINAPI // extern WINSCARDAPI LONG WINAPI
// SCardGetReaderCapabilities( // SCardGetReaderCapabilities(
// __in SCARDHANDLE hCard, // _In_ SCARDHANDLE hCard,
// __in DWORD dwTag, // _In_ DWORD dwTag,
// __out LPBYTE pbAttr, // _Out_ LPBYTE pbAttr,
// __inout LPDWORD pcbAttrLen); // _Inout_ LPDWORD pcbAttrLen);
// //
// Here's a work-around MACRO: // Here's a work-around MACRO:
#define SCardGetReaderCapabilities SCardGetAttrib #define SCardGetReaderCapabilities SCardGetAttrib
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardSetAttrib( SCardSetAttrib(
__in SCARDHANDLE hCard, _In_ SCARDHANDLE hCard,
__in DWORD dwAttrId, _In_ DWORD dwAttrId,
__in_bcount(cbAttrLen) LPCBYTE pbAttr, _In_reads_bytes_(cbAttrLen) LPCBYTE pbAttr,
__in DWORD cbAttrLen); _In_ DWORD cbAttrLen);
// //
// NOTE: The routine SCardSetAttrib's name differs from the PC/SC definition. // NOTE: The routine SCardSetAttrib's name differs from the PC/SC definition.
// It should be: // It should be:
// //
// extern WINSCARDAPI LONG WINAPI // extern WINSCARDAPI LONG WINAPI
// SCardSetReaderCapabilities( // SCardSetReaderCapabilities(
// __in SCARDHANDLE hCard, // _In_ SCARDHANDLE hCard,
// __in DWORD dwTag, // _In_ DWORD dwTag,
// __in LPCBYTE pbAttr, // _In_ LPCBYTE pbAttr,
// __in DWORD cbAttrLen); // _In_ DWORD cbAttrLen);
// //
// Here's a work-around MACRO: // Here's a work-around MACRO:
#define SCardSetReaderCapabilities SCardSetAttrib #define SCardSetReaderCapabilities SCardSetAttrib
// //
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// //
// Smart Card Dialog definitions // Smart Card Dialog definitions
// //
// The following section contains structures and exported function // The following section contains structures and exported function
skipping to change at line 841 skipping to change at line 871
// Defined constants // Defined constants
// Flags // Flags
#define SC_DLG_MINIMAL_UI 0x01 #define SC_DLG_MINIMAL_UI 0x01
#define SC_DLG_NO_UI 0x02 #define SC_DLG_NO_UI 0x02
#define SC_DLG_FORCE_UI 0x04 #define SC_DLG_FORCE_UI 0x04
#define SCERR_NOCARDNAME 0x4000 #define SCERR_NOCARDNAME 0x4000
#define SCERR_NOGUIDS 0x8000 #define SCERR_NOGUIDS 0x8000
typedef SCARDHANDLE (WINAPI *LPOCNCONNPROCA) (__in SCARDCONTEXT, __in LPSTR, __i typedef SCARDHANDLE (WINAPI *LPOCNCONNPROCA) (_In_ SCARDCONTEXT, _In_ LPSTR, _In
n LPSTR, __in PVOID); _ LPSTR, _In_ PVOID);
typedef SCARDHANDLE (WINAPI *LPOCNCONNPROCW) (__in SCARDCONTEXT, __in LPWSTR, __ typedef SCARDHANDLE (WINAPI *LPOCNCONNPROCW) (_In_ SCARDCONTEXT, _In_ LPWSTR, _I
in LPWSTR, __in PVOID); n_ LPWSTR, _In_ PVOID);
#ifdef UNICODE #ifdef UNICODE
#define LPOCNCONNPROC LPOCNCONNPROCW #define LPOCNCONNPROC LPOCNCONNPROCW
#else #else
#define LPOCNCONNPROC LPOCNCONNPROCA #define LPOCNCONNPROC LPOCNCONNPROCA
#endif // !UNICODE #endif // !UNICODE
typedef BOOL (WINAPI *LPOCNCHKPROC) (__in SCARDCONTEXT, __in SCARDHANDLE, __in P typedef BOOL (WINAPI *LPOCNCHKPROC) (_In_ SCARDCONTEXT, _In_ SCARDHANDLE, _In_ P
VOID); VOID);
typedef void (WINAPI *LPOCNDSCPROC) (__in SCARDCONTEXT, __in SCARDHANDLE, __in P typedef void (WINAPI *LPOCNDSCPROC) (_In_ SCARDCONTEXT, _In_ SCARDHANDLE, _In_ P
VOID); VOID);
// //
// OPENCARD_SEARCH_CRITERIA: In order to specify a user-extended search, // OPENCARD_SEARCH_CRITERIA: In order to specify a user-extended search,
// lpfnCheck must not be NULL. Moreover, the connection to be made to the // lpfnCheck must not be NULL. Moreover, the connection to be made to the
// card before performing the callback must be indicated by either providing // card before performing the callback must be indicated by either providing
// lpfnConnect and lpfnDisconnect OR by setting dwShareMode. // lpfnConnect and lpfnDisconnect OR by setting dwShareMode.
// If both the connection callbacks and dwShareMode are non-NULL, the callbacks // If both the connection callbacks and dwShareMode are non-NULL, the callbacks
// will be used. // will be used.
// //
skipping to change at line 966 skipping to change at line 996
#endif // UNICODE #endif // UNICODE
#define OPENCARDNAMEA_EX OPENCARDNAME_EXA #define OPENCARDNAMEA_EX OPENCARDNAME_EXA
#define OPENCARDNAMEW_EX OPENCARDNAME_EXW #define OPENCARDNAMEW_EX OPENCARDNAME_EXW
#define POPENCARDNAMEA_EX POPENCARDNAME_EXA #define POPENCARDNAMEA_EX POPENCARDNAME_EXA
#define POPENCARDNAMEW_EX POPENCARDNAME_EXW #define POPENCARDNAMEW_EX POPENCARDNAME_EXW
#define LPOPENCARDNAMEA_EX LPOPENCARDNAME_EXA #define LPOPENCARDNAMEA_EX LPOPENCARDNAME_EXA
#define LPOPENCARDNAMEW_EX LPOPENCARDNAME_EXW #define LPOPENCARDNAMEW_EX LPOPENCARDNAME_EXW
// //
// Smart Card Reader Selection Provider
//
// Only UNICODE is supported. Invoke smart card reader selection provider by cal
ling
// CredUIPromptForWindowsCredentials() supplying SCARD_READER_SEL_AUTH_PACKAGE a
s
// pulAuthPackage, an instance of READER_SEL_REQUEST as pvInAuthBuffer and setti
ng
// CREDUIWIN_AUTHPACKAGE_ONLY in dwFlags. Upon successful return, an instance of
// READER_SEL_RESPONSE will be returned in ppvOutAuthBuffer.
//
#define SCARD_READER_SEL_AUTH_PACKAGE ((DWORD)-629)
//
// READER_SEL_REQUEST
// Reader selection request to reader selection provider
//
// Members:
//
// dwShareMode:
// Share mode used by SCardConnect to connect to smart cards
// dwPreferredProtocols:
// Acceptable protocols for SCardConnect to connect to smart cards
//
// MatchType:
// Indicates how the caller wants the reader selection provider to verify sm
art
// cards.
//
// If MatchType is set to RSR_MATCH_TYPE_READER_AND_CONTAINER, reader select
ion
// provider will match smart cards based on whether they are in the given
// reader and have the given key container. Reader name and container name a
re
// both optional. Reader name and container name, if any, need to be appende
d
// after READER_SEL_REQUEST structure and set their offsets and lengths in
// ReaderAndContainerParameter member.
//
// If MatchType is set to RSR_MATCH_TYPE_SERIAL_NUMBER, reader selection
// provider will match smart cards based on their serial numbers / card IDs.
// Serial number is required. It needs to be appended after READER_SEL_REQUE
ST
// structure as a byte array and set its offset and length in
// SerialNumberParameter member.
//
// If MatchType is set to RSR_MATCH_TYPE_ALL_CARDS, reader selection provide
r
// will allow all recognized cards to be selected by user without any filter
ing.
// The card may not be personalized for Base CSP / Smart Card KSP yet, or ev
en
// have its own CSP.
//
// ReaderAndContainerParameter.cbReaderNameOffset:
// Byte offset of reader name UNICODE string from the beginning of
// READER_SEL_REQUEST structure
// ReaderAndContainerParameter.cchReaderNameLength:
// Number of characters in reader name UNICODE string including the terminat
ing
// NULL character
// ReaderAndContainerParameter.cbContainerNameOffset:
// Byte offset of container name UNICODE string from the beginning of
// READER_SEL_REQUEST structure
// ReaderAndContainerParameter.cchContainerNameLength:
// Number of characters in container name UNICODE string including the
// terminating NULL character
// ReaderAndContainerParameter.dwDesiredCardModuleVersion:
// The desired smart card module version
// ReaderAndContainerParameter.dwCspFlags:
// CSP and KSP flags to indicate how smart cards will be used
// (Valid flags include CRYPT_NEWKEYSET, CRYPT_DELETEKEYSET, CRYPT_VERIFYCON
TEXT
// and CRYPT_DEFAULT_CONTAINER_OPTIONAL)
//
// SerialNumberParameter.cbSerialNumberOffset:
// Byte offset of serial number byte array from the beginning of
// READER_SEL_REQUEST structure
// SerialNumberParameter.cbSerialNumberLength:
// Number of bytes in serial number byte array
// SerialNumberParameter.dwDesiredCardModuleVersion:
// The desired smart card module version
//
typedef enum {
RSR_MATCH_TYPE_READER_AND_CONTAINER = 1,
RSR_MATCH_TYPE_SERIAL_NUMBER,
RSR_MATCH_TYPE_ALL_CARDS
} READER_SEL_REQUEST_MATCH_TYPE;
typedef struct {
DWORD dwShareMode;
DWORD dwPreferredProtocols;
READER_SEL_REQUEST_MATCH_TYPE MatchType;
union {
struct {
DWORD cbReaderNameOffset;
DWORD cchReaderNameLength;
DWORD cbContainerNameOffset;
DWORD cchContainerNameLength;
DWORD dwDesiredCardModuleVersion;
DWORD dwCspFlags;
} ReaderAndContainerParameter;
struct {
DWORD cbSerialNumberOffset;
DWORD cbSerialNumberLength;
DWORD dwDesiredCardModuleVersion;
} SerialNumberParameter;
};
} READER_SEL_REQUEST, *PREADER_SEL_REQUEST;
//
// READER_SEL_RESPONSE
// Reader selection response from reader selection provider
//
// Members:
// cbReaderNameOffset:
// Byte offset of matched reader name UNICODE string from the beginning of
// READER_SEL_RESPONSE structure
// cchReaderNameLength:
// Number of characters in matched reader name UNICODE string including the
// terminating NULL character
// cbCardNameOffset:
// Byte offset of matched card name UNICODE string from the beginning of
// READER_SEL_RESPONSE structure
// cchCardNameLength:
// Number of characters in matched card name UNICODE string including the
// terminating NULL character
//
typedef struct {
DWORD cbReaderNameOffset;
DWORD cchReaderNameLength;
DWORD cbCardNameOffset;
DWORD cchCardNameLength;
} READER_SEL_RESPONSE, *PREADER_SEL_RESPONSE;
//
// SCardUIDlgSelectCard replaces GetOpenCardName // SCardUIDlgSelectCard replaces GetOpenCardName
// //
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardUIDlgSelectCardA( SCardUIDlgSelectCardA(
LPOPENCARDNAMEA_EX); LPOPENCARDNAMEA_EX);
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardUIDlgSelectCardW( SCardUIDlgSelectCardW(
LPOPENCARDNAMEW_EX); LPOPENCARDNAMEW_EX);
#ifdef UNICODE #ifdef UNICODE
skipping to change at line 1077 skipping to change at line 1233
SCardDlgExtendedError (void); SCardDlgExtendedError (void);
#if (NTDDI_VERSION >= NTDDI_VISTA) #if (NTDDI_VERSION >= NTDDI_VISTA)
// //
// Smartcard Caching API // Smartcard Caching API
// //
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardReadCacheA( SCardReadCacheA(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in UUID *CardIdentifier, _In_ UUID *CardIdentifier,
__in DWORD FreshnessCounter, _In_ DWORD FreshnessCounter,
__in LPSTR LookupName, _In_ LPSTR LookupName,
__out_bcount(*DataLen) PBYTE Data, _Out_writes_bytes_(*DataLen) PBYTE Data,
__out DWORD *DataLen); _Out_ DWORD *DataLen);
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardReadCacheW( SCardReadCacheW(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in UUID *CardIdentifier, _In_ UUID *CardIdentifier,
__in DWORD FreshnessCounter, _In_ DWORD FreshnessCounter,
__in LPWSTR LookupName, _In_ LPWSTR LookupName,
__out_bcount(*DataLen) PBYTE Data, _Out_writes_bytes_(*DataLen) PBYTE Data,
__out DWORD *DataLen); _Out_ DWORD *DataLen);
#ifdef UNICODE #ifdef UNICODE
#define SCardReadCache SCardReadCacheW #define SCardReadCache SCardReadCacheW
#else #else
#define SCardReadCache SCardReadCacheA #define SCardReadCache SCardReadCacheA
#endif // !UNICODE #endif // !UNICODE
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardWriteCacheA( SCardWriteCacheA(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in UUID *CardIdentifier, _In_ UUID *CardIdentifier,
__in DWORD FreshnessCounter, _In_ DWORD FreshnessCounter,
__in LPSTR LookupName, _In_ LPSTR LookupName,
__in_bcount(DataLen) PBYTE Data, _In_reads_bytes_(DataLen) PBYTE Data,
__in DWORD DataLen); _In_ DWORD DataLen);
extern WINSCARDAPI LONG WINAPI extern WINSCARDAPI LONG WINAPI
SCardWriteCacheW( SCardWriteCacheW(
__in SCARDCONTEXT hContext, _In_ SCARDCONTEXT hContext,
__in UUID *CardIdentifier, _In_ UUID *CardIdentifier,
__in DWORD FreshnessCounter, _In_ DWORD FreshnessCounter,
__in LPWSTR LookupName, _In_ LPWSTR LookupName,
__in_bcount(DataLen) PBYTE Data, _In_reads_bytes_(DataLen) PBYTE Data,
__in DWORD DataLen); _In_ DWORD DataLen);
#ifdef UNICODE #ifdef UNICODE
#define SCardWriteCache SCardWriteCacheW #define SCardWriteCache SCardWriteCacheW
#else #else
#define SCardWriteCache SCardWriteCacheA #define SCardWriteCache SCardWriteCacheA
#endif // !UNICODE #endif // !UNICODE
#endif // (NTDDI_VERSION >= NTDDI_VISTA) #endif // (NTDDI_VERSION >= NTDDI_VISTA)
#if (NTDDI_VERSION >= NTDDI_WIN8)
_Success_(return == SCARD_S_SUCCESS)
extern WINSCARDAPI LONG WINAPI
SCardGetReaderIconA(
_In_ SCARDCONTEXT hContext,
_In_ LPCSTR szReaderName,
_When_(_Old_(*pcbIcon) == SCARD_AUTOALLOCATE, _At_((LPBYTE *)pbIcon, _Outptr_r
esult_bytebuffer_all_maybenull_(*pcbIcon)))
_When_(_Old_(*pcbIcon) != SCARD_AUTOALLOCATE, _Out_writes_bytes_to_(*pcbIcon,
*pcbIcon) _Post_z_)
LPBYTE pbIcon,
_Inout_ LPDWORD pcbIcon);
_Success_(return == SCARD_S_SUCCESS)
extern WINSCARDAPI LONG WINAPI
SCardGetReaderIconW(
_In_ SCARDCONTEXT hContext,
_In_ LPCWSTR szReaderName,
_When_(_Old_(*pcbIcon) == SCARD_AUTOALLOCATE, _At_((LPBYTE *)pbIcon, _Outptr_r
esult_bytebuffer_all_maybenull_(*pcbIcon)))
_When_(_Old_(*pcbIcon) != SCARD_AUTOALLOCATE, _Out_writes_bytes_to_(*pcbIcon,
*pcbIcon) _Post_z_)
LPBYTE pbIcon,
_Inout_ LPDWORD pcbIcon);
#ifdef UNICODE
#define SCardGetReaderIcon SCardGetReaderIconW
#else
#define SCardGetReaderIcon SCardGetReaderIconA
#endif // !UNICODE
_Success_(return == SCARD_S_SUCCESS)
extern WINSCARDAPI LONG WINAPI
SCardGetDeviceTypeIdA(
_In_ SCARDCONTEXT hContext,
_In_ LPCSTR szReaderName,
_Inout_ LPDWORD pdwDeviceTypeId);
_Success_(return == SCARD_S_SUCCESS)
extern WINSCARDAPI LONG WINAPI
SCardGetDeviceTypeIdW(
_In_ SCARDCONTEXT hContext,
_In_ LPCWSTR szReaderName,
_Inout_ LPDWORD pdwDeviceTypeId);
#ifdef UNICODE
#define SCardGetDeviceTypeId SCardGetDeviceTypeIdW
#else
#define SCardGetDeviceTypeId SCardGetDeviceTypeIdA
#endif // !UNICODE
_Success_(return == SCARD_S_SUCCESS)
extern WINSCARDAPI LONG WINAPI
SCardGetReaderDeviceInstanceIdA(
_In_ SCARDCONTEXT hContext,
_In_ LPCSTR szReaderName,
_When_(_Old_(*pcchDeviceInstanceId) == SCARD_AUTOALLOCATE, _At_((LPSTR *)szDev
iceInstanceId, _Outptr_result_buffer_maybenull_(*pcchDeviceInstanceId) _At_(*_Cu
rr_, _Post_z_ _Post_ _NullNull_terminated_)))
_When_(_Old_(*pcchDeviceInstanceId) != SCARD_AUTOALLOCATE, _Out_writes_opt_(*p
cchDeviceInstanceId) _Post_ _NullNull_terminated_)
LPSTR szDeviceInstanceId,
_Inout_ LPDWORD pcchDeviceInstanceId);
_Success_(return == SCARD_S_SUCCESS)
extern WINSCARDAPI LONG WINAPI
SCardGetReaderDeviceInstanceIdW(
_In_ SCARDCONTEXT hContext,
_In_ LPCWSTR szReaderName,
_When_(_Old_(*pcchDeviceInstanceId) == SCARD_AUTOALLOCATE, _At_((LPWSTR *)szDe
viceInstanceId, _Outptr_result_buffer_maybenull_(*pcchDeviceInstanceId) _At_(*_C
urr_, _Post_z_ _Post_ _NullNull_terminated_)))
_When_(_Old_(*pcchDeviceInstanceId) != SCARD_AUTOALLOCATE, _Out_writes_opt_(*p
cchDeviceInstanceId) _Post_ _NullNull_terminated_)
LPWSTR szDeviceInstanceId,
_Inout_ LPDWORD pcchDeviceInstanceId);
#ifdef UNICODE
#define SCardGetReaderDeviceInstanceId SCardGetReaderDeviceInstanceIdW
#else
#define SCardGetReaderDeviceInstanceId SCardGetReaderDeviceInstanceIdA
#endif // !UNICODE
_Success_(return == SCARD_S_SUCCESS)
extern WINSCARDAPI LONG WINAPI
SCardListReadersWithDeviceInstanceIdA(
_In_ SCARDCONTEXT hContext,
_In_ LPCSTR szDeviceInstanceId,
_When_(_Old_(*pcchReaders) == SCARD_AUTOALLOCATE, _At_((LPSTR *)mszReaders, _O
utptr_result_buffer_maybenull_(*pcchReaders) _At_(*_Curr_, _Post_z_ _Post_ _Null
Null_terminated_)))
_When_(_Old_(*pcchReaders) != SCARD_AUTOALLOCATE, _Out_writes_opt_(*pcchReader
s) _Post_ _NullNull_terminated_)
LPSTR mszReaders,
_Inout_ LPDWORD pcchReaders);
_Success_(return == SCARD_S_SUCCESS)
extern WINSCARDAPI LONG WINAPI
SCardListReadersWithDeviceInstanceIdW(
_In_ SCARDCONTEXT hContext,
_In_ LPCWSTR szDeviceInstanceId,
_When_(_Old_(*pcchReaders) == SCARD_AUTOALLOCATE, _At_((LPWSTR *)mszReaders, _
Outptr_result_buffer_maybenull_(*pcchReaders) _At_(*_Curr_, _Post_z_ _Post_ _Nul
lNull_terminated_)))
_When_(_Old_(*pcchReaders) != SCARD_AUTOALLOCATE, _Out_writes_opt_(*pcchReader
s) _Post_ _NullNull_terminated_)
LPWSTR mszReaders,
_Inout_ LPDWORD pcchReaders);
#ifdef UNICODE
#define SCardListReadersWithDeviceInstanceId SCardListReadersWithDeviceInstance
IdW
#else
#define SCardListReadersWithDeviceInstanceId SCardListReadersWithDeviceInstance
IdA
#endif // !UNICODE
//
////////////////////////////////////////////////////////////////////////////////
//
// Smart Card Auditing
//
#define SCARD_AUDIT_CHV_FAILURE 0x0 // A smart card holder verification (CHV)
// attempt failed.
#define SCARD_AUDIT_CHV_SUCCESS 0x1 // A smart card holder verification (CHV)
// attempt succeeded.
_Success_(return == SCARD_S_SUCCESS)
extern WINSCARDAPI LONG WINAPI
SCardAudit(
_In_ SCARDCONTEXT hContext,
_In_ DWORD dwEvent);
#endif // (NTDDI_VERSION >= NTDDI_WIN8)
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
#pragma endregion
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif // _WINSCARD_H_ #endif // _WINSCARD_H_
 End of changes. 73 change blocks. 
263 lines changed or deleted 592 lines changed or added

This html diff was produced by rfcdiff 1.41.