Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Runtime.InteropServices;
- namespace LibPCSCLite
- {
- public sealed class PCSCLite
- {
- public const String WINSCARD = "winscard.dll";
- /*===========================================================
- ' STATE
- '===========================================================*/
- public const uint SCARD_UNKNOWN = 0x0001;
- public const uint SCARD_ABSENT = 0x0002;
- public const uint SCARD_PRESENT = 0x0004;
- public const uint SCARD_SWALLOWED = 0x0008;
- public const uint SCARD_POWERED = 0x0010;
- public const uint SCARD_NEGOTIABLE = 0x0020;
- public const uint SCARD_SPECIFIC = 0x0040;
- public const uint SCARD_STATE_UNAWARE = 0x0000;
- public const uint SCARD_STATE_IGNORE = 0x0001;
- public const uint SCARD_STATE_CHANGED = 0x0002;
- public const uint SCARD_STATE_UNKNOWN = 0x0004;
- public const uint SCARD_STATE_UNAVAILABLE = 0x0008;
- public const uint SCARD_STATE_EMPTY = 0x0010;
- public const uint SCARD_STATE_PRESENT = 0x0020;
- public const uint SCARD_STATE_EXCLUSIVE = 0x0080;
- public const uint SCARD_STATE_INUSE = 0x0100;
- public const uint SCARD_STATE_MUSE = 0x0200;
- /*===========================================================
- ' SHARE MODE
- '===========================================================*/
- public const uint SCARD_SHARE_EXCLUSIVE = 0x0001;
- public const uint SCARD_SHARE_SHARED = 0x0002;
- public const uint SCARD_SHARE_DIRECT = 0x0003;
- /*===========================================================
- ' PROTOCOL
- '===========================================================*/
- public const uint SCARD_PROTOCOL_UNDEFINED = 0x0000;
- public const uint SCARD_PROTOCOL_T0 = 0x0001;
- public const uint SCARD_PROTOCOL_T1 = 0x0002;
- public const uint SCARD_PROTOCOL_RAW = 0x0004;
- public const uint SCARD_PROTOCOL_T15 = 0x0008;
- public const uint SCARD_PROTOCOL_ANY = (SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1);
- /*===========================================================
- ' SCOPE
- '===========================================================*/
- public const uint SCARD_SCOPE_USER = 0x0000;
- public const uint SCARD_SCOPE_TERMINAL = 0x0001;
- public const uint SCARD_SCOPE_SYSTEM = 0x0002;
- public const uint SCARD_SCOPE_GLOBAL = 0x0003;
- /*===========================================================
- ' DISPOSITION
- '===========================================================*/
- public const uint SCARD_LEAVE_CARD = 0x0000;
- public const uint SCARD_RESET_CARD = 0x0001;
- public const uint SCARD_UNPOWER_CARD = 0x0002;
- public const uint SCARD_EJECT_CARD = 0x0003;
- /*===========================================================
- ' ERROR CODE
- '===========================================================*/
- public const int SCARD_S_SUCCESS = 0;
- public static SCARD_IO_REQUEST SCARD_PCI_T0()
- {
- return new SCARD_IO_REQUEST(SCARD_PROTOCOL_T0, (uint)Marshal.SizeOf(typeof(SCARD_IO_REQUEST)));
- }
- public static SCARD_IO_REQUEST SCARD_PCI_T1()
- {
- return new SCARD_IO_REQUEST(SCARD_PROTOCOL_T1, (uint)Marshal.SizeOf(typeof(SCARD_IO_REQUEST)));
- }
- public static SCARD_IO_REQUEST SCARD_PCI_RAW()
- {
- return new SCARD_IO_REQUEST(SCARD_PROTOCOL_RAW, (uint)Marshal.SizeOf(typeof(SCARD_IO_REQUEST)));
- }
- /// <summary>
- /// Creates an Application Context to the PC/SC Resource Manager.
- /// </summary>
- /// <param name="dwScope"></param>
- /// <param name="pvReserved1"></param>
- /// <param name="pvReserved2"></param>
- /// <param name="phContext"></param>
- /// <returns></returns>
- [DllImport(WINSCARD)]
- public static extern int SCardEstablishContext(
- [In] uint dwScope,
- [In] IntPtr pvReserved1,
- [In] IntPtr pvReserved2,
- [Out] out IntPtr phContext);
- /// <summary>
- /// Destroys a communication context to the PC/SC Resource Manager.
- /// </summary>
- /// <param name="hContext"></param>
- /// <returns></returns>
- [DllImport(WINSCARD)]
- public static extern int SCardReleaseContext(
- [In] IntPtr hContext);
- /// <summary>
- /// Establishes a connection to the reader specified in * szReader.
- /// </summary>
- /// <param name="hContext"></param>
- /// <param name="szReader"></param>
- /// <param name="dwShareMode"></param>
- /// <param name="dwPreferredProtocols"></param>
- /// <param name="phCard"></param>
- /// <param name="pdwActiveProtocol"></param>
- /// <returns></returns>
- [DllImport(WINSCARD, CharSet = CharSet.Ansi)]
- public static extern int SCardConnect(
- [In] IntPtr hContext,
- [In] string szReader,
- [In] uint dwShareMode,
- [In] uint dwPreferredProtocols,
- [Out] out IntPtr phCard,
- [Out] out uint pdwActiveProtocol);
- /// <summary>
- /// Reestablishes a connection to a reader that was previously connected to using SCardConnect().
- /// </summary>
- /// <param name="hCard"></param>
- /// <param name="dwShareMode"></param>
- /// <param name="dwPreferredProtocols"></param>
- /// <param name="dwInitialization"></param>
- /// <param name="pdActiveProtocol"></param>
- /// <returns></returns>
- [DllImport(WINSCARD)]
- public static extern int SCardReconnect(
- [In] IntPtr hCard,
- [In] uint dwShareMode,
- [In] uint dwPreferredProtocols,
- [In] uint dwInitialization,
- [Out] out uint pdActiveProtocol);
- /// <summary>
- /// Terminates a connection made through SCardConnect().
- /// </summary>
- /// <param name="hCard"></param>
- /// <param name="dwDisposition"></param>
- /// <returns></returns>
- [DllImport(WINSCARD)]
- public static extern int SCardDisconnect(
- [In] IntPtr hCard,
- [In] uint dwDisposition);
- /// <summary>
- /// Establishes a temporary exclusive access mode for doing a serie of commands in a transaction.
- /// </summary>
- /// <param name="hCard"></param>
- /// <returns></returns>
- [DllImport(WINSCARD)]
- public static extern int SCardBeginTransaction(
- [In] IntPtr hCard);
- /// <summary>
- /// Ends a previously begun transaction.
- /// </summary>
- /// <param name="hCard"></param>
- /// <param name="dwDisposition"></param>
- /// <returns></returns>
- [DllImport(WINSCARD)]
- public static extern int SCardEndTransaction(
- [In] IntPtr hCard,
- [In] uint dwDisposition);
- /// <summary>
- /// Returns the current status of the reader connected to by hCard.
- /// </summary>
- /// <param name="hCard"></param>
- /// <param name="szReaderName"></param>
- /// <param name="pcchReaderLen"></param>
- /// <param name="pdwState">Current state of this reader</param>
- /// <param name="pdwProtocol"> Current protocol of this reader</param>
- /// <param name="pbAtr"></param>
- /// <param name="pcbAtrLen"></param>
- /// <returns></returns>
- [DllImport(WINSCARD, CharSet = CharSet.Ansi)]
- public static extern int SCardStatus(
- [In] IntPtr hCard,
- [In,Out] string szReaderName,
- [In, Out] ref uint pcchReaderLen,
- [Out] out uint pdwState,
- [Out] out uint pdwProtocol,
- [Out] byte pbAtr,
- [Out] out uint pcbAtrLen);
- /// <summary>
- /// Blocks execution until the current availability of the cards in a specific set of readers changes.
- /// </summary>
- /// <param name="hContext"></param>
- /// <param name="dwTimeout"></param>
- /// <param name="rgReaderStates"></param>
- /// <param name="cReaders"></param>
- /// <returns></returns>
- [DllImport(WINSCARD, CharSet = CharSet.Ansi)]
- public static extern int SCardGetStatusChange(
- [In] IntPtr hContext,
- [In] uint dwTimeout,
- [In,Out] SCARD_READERSTATE[] rgReaderStates,
- [In] uint cReaders);
- /// <summary>
- /// Sends a command directly to the IFD Handler (reader driver) to be processed by the reader.
- /// </summary>
- /// <param name="hCard"></param>
- /// <param name="dwControlCode"></param>
- /// <param name="pbSendBuffer"></param>
- /// <param name="cbSendLength"></param>
- /// <param name="pbRecvBuffer"></param>
- /// <param name="cbRecvLength"></param>
- /// <param name="lpBytesReturned"></param>
- /// <returns></returns>
- [DllImport(WINSCARD)]
- public static extern int SCardControl(
- [In] IntPtr hCard,
- [In] uint dwControlCode,
- [In] byte[] pbSendBuffer,
- [In] uint cbSendLength,
- [Out] byte[] pbRecvBuffer,
- [In] uint cbRecvLength,
- [Out] out uint lpBytesReturned);
- /// <summary>
- /// Get an attribute from the IFD Handler (reader driver).
- /// </summary>
- /// <param name="hCard"></param>
- /// <param name="dwAttrId"></param>
- /// <param name="pbAttr"></param>
- /// <param name="pcbAttrLen"></param>
- /// <returns></returns>
- [DllImport(WINSCARD)]
- public static extern int SCardGetAttrib(
- [In] IntPtr hCard,
- [In] uint dwAttrId,
- [Out] byte[] pbAttr,
- [In, Out] ref uint pcbAttrLen);
- /// <summary>
- ///
- /// </summary>
- /// <param name="hCard"></param>
- /// <param name="dwAttrId"></param>
- /// <param name="pbAttr"></param>
- /// <param name="cbAttrLen"></param>
- /// <returns></returns>
- [DllImport(WINSCARD)]
- public static extern int SCardSetAttrib(
- [In] IntPtr hCard,
- [In] uint dwAttrId,
- [In] byte[] pbAttr,
- [In] uint cbAttrLen);
- /// <summary>
- ///
- /// </summary>
- /// <param name="hCard"></param>
- /// <param name="pioSendPci"></param>
- /// <param name="pbSendBuffer"></param>
- /// <param name="cbSendLength"></param>
- /// <param name="pioRecvPci"></param>
- /// <param name="pbRecvBuffer"></param>
- /// <param name="pcbRecvLength"></param>
- /// <returns></returns>
- [DllImport(WINSCARD)]
- public static extern int SCardTransmit(
- [In] IntPtr hCard,
- [In] ref SCARD_IO_REQUEST pioSendPci,
- [In] byte[] pbSendBuffer,
- [In] uint cbSendLength,
- [In, Out] ref SCARD_IO_REQUEST pioRecvPci,
- [Out] byte[] pbRecvBuffer,
- [In, Out] ref uint pcbRecvLength);
- [DllImport(WINSCARD)]
- public static extern int SCardTransmit(
- [In] IntPtr hCard,
- [In] ref SCARD_IO_REQUEST pioSendPci,
- [In] byte[] pbSendBuffer,
- [In] uint cbSendLength,
- [In, Out] IntPtr pioRecvPci,
- [Out] byte[] pbRecvBuffer,
- [In, Out] ref uint pcbRecvLength);
- [DllImport(WINSCARD)]
- public static extern int SCardTransmit(
- [In] IntPtr hCard,
- [In] IntPtr pioSendPci,
- [In] byte[] pbSendBuffer,
- [In] uint cbSendLength,
- [In, Out] IntPtr pioRecvPci,
- [Out] byte[] pbRecvBuffer,
- [In, Out] ref uint pcbRecvLength);
- /// <summary>
- ///
- /// </summary>
- /// <param name="hContext"></param>
- /// <param name="mszGroups"></param>
- /// <param name="pmszReaders"></param>
- /// <param name="pcchReaders"></param>
- /// <returns></returns>
- [DllImport(WINSCARD, CharSet = CharSet.Ansi)]
- public static extern int SCardListReaders(
- [In] IntPtr hContext,
- [In] byte[] mszGroups,
- [Out] byte[] pmszReaders,
- [In, Out] ref uint pcchReaders);
- /// <summary>
- ///
- /// </summary>
- /// <param name="hContext"></param>
- /// <param name="pvMem"></param>
- /// <returns></returns>
- [DllImport(WINSCARD)]
- public static extern int SCardFreeMemory(
- [In] IntPtr hContext,
- [In] IntPtr pvMem);
- /// <summary>
- ///
- /// </summary>
- /// <param name="hContext"></param>
- /// <param name="szGroups"></param>
- /// <param name="pcchGroups"></param>
- /// <returns></returns>
- [DllImport(WINSCARD, CharSet = CharSet.Ansi)]
- public static extern int SCardListReaderGroups(
- [In] IntPtr hContext,
- [Out] byte[] szGroups,
- [In, Out] ref uint pcchGroups);
- /// <summary>
- ///
- /// </summary>
- /// <param name="hContext"></param>
- /// <returns></returns>
- [DllImport(WINSCARD)]
- public static extern int SCardCancel(
- [In] IntPtr hContext);
- /// <summary>
- /// Check if a SCARDCONTEXT is valid.
- /// </summary>
- /// <param name="hContext"></param>
- /// <returns></returns>
- [DllImport(WINSCARD)]
- public static extern int SCardIsValidContext(
- [In] IntPtr hContext);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment