@msdn=http://search.microsoft.com/search/results.aspx?qu=SCardGetStatusChange @pinvoke=http://pinvoke.net/SCardGetStatusChange.htm Summary: The SCardGetStatusChange function blocks execution until the current availability of the cards in a specific set of readers changes. !!!!C# Signature: /// <summary> /// The SCardGetStatusChange function blocks execution until the current availability of the cards in a specific set of readers changes. /// </summary> /// <param name="hContext">A handle that identifies the resource manager context. The resource manager context is set by a previous call to the SCardEstablishContext function.</param> /// <param name="dwTimeout">The maximum amount of time, in milliseconds, to wait for an action. A value of zero causes the function to return immediately. A value of INFINITE causes this function never to time out.</param> /// <param name="rgReaderStates">An array of SCARD_READERSTATE structures that specify the readers to watch, and that receives the result.</param> /// <param name="cReaders">the number of elements in the rgReaderStates array.</param> /// <returns>This function returns different values depending on whether it succeeds or fails</returns> [DllImport("winscard.dll", CharSet=CharSet.Auto)] static extern SCardFunctionReturnCodes SCardGetStatusChange(int hContext, int dwTimeout, [In, Out] SCARD_READERSTATE[] rgReaderStates, int cReaders); !!!!User-Defined Types: public enum SCardFunctionReturnCodes : uint { SCARD_S_SUCCESS = 0x0, //'Errors SCARD_E_CANCELLED = 0x80100002, SCARD_E_INVALID_HANDLE = 0x80100003, SCARD_E_INVALID_PARAMETER = 0x80100004, SCARD_E_INVALID_TARGET = 0x80100005, SCARD_E_NO_MEMORY = 0x80100006, SCARD_F_WAITED_TOO_LONG = 0x80100007, SCARD_E_INSUFFICIENT_BUFFER = 0x80100008, SCARD_E_UNKNOWN_READER = 0x80100009, SCARD_E_TIMEOUT = 0x8010000A, SCARD_E_SHARING_VIOLATION = 0x8010000B, SCARD_E_NO_SMARTCARD = 0x8010000C, SCARD_E_UNKNOWN_CARD = 0x8010000D, SCARD_E_CANT_DISPOSE = 0x8010000E, SCARD_E_PROTO_MISMATCH = 0x8010000F, SCARD_E_NOT_READY = 0x80100010, SCARD_E_INVALID_VALUE = 0x80100011, SCARD_E_SYSTEM_CANCELLED = 0x80100012, SCARD_E_INVALID_ATR = 0x80100015, SCARD_E_NOT_TRANSACTED = 0x80100016, SCARD_E_READER_UNAVAILABLE = 0x80100017, SCARD_E_PCI_TOO_SMALL = 0x80100019, SCARD_E_READER_UNSUPPORTED = 0x8010001A, SCARD_E_DUPLICATE_READER = 0x8010001B, SCARD_E_CARD_UNSUPPORTED = 0x8010001C, SCARD_E_NO_SERVICE = 0x8010001D, SCARD_E_SERVICE_STOPPED = 0x8010001E, SCARD_E_UNEXPECTED = 0x8010001F, SCARD_E_ICC_INSTALLATION = 0x80100020, SCARD_E_ICC_CREATEORDER = 0x80100021, SCARD_E_DIR_NOT_FOUND = 0x80100023, SCARD_E_FILE_NOT_FOUND = 0x80100024, SCARD_E_NO_DIR = 0x80100025, SCARD_E_NO_FILE = 0x80100026, SCARD_E_NO_ACCESS = 0x80100027, SCARD_E_WRITE_TOO_MANY = 0x80100028, SCARD_E_BAD_SEEK = 0x80100029, SCARD_E_INVALID_CHV = 0x8010002A, SCARD_E_UNKNOWN_RES_MNG = 0x8010002B, SCARD_E_NO_SUCH_CERTIFICATE = 0x8010002C, SCARD_E_CERTIFICATE_UNAVAILABLE = 0x8010002D, SCARD_E_NO_READERS_AVAILABLE = 0x8010002E, SCARD_E_COMM_DATA_LOST = 0x8010002F, SCARD_E_NO_KEY_CONTAINER = 0x80100030, SCARD_E_SERVER_TOO_BUSY = 0x80100031, SCARD_E_UNSUPPORTED_FEATURE = 0x8010001F, //'The F...not sure SCARD_F_INTERNAL_ERROR = 0x80100001, SCARD_F_COMM_ERROR = 0x80100013, SCARD_F_UNKNOWN_ERROR = 0x80100014, //'The W...not sure SCARD_W_UNSUPPORTED_CARD = 0x80100065, SCARD_W_UNRESPONSIVE_CARD = 0x80100066, SCARD_W_UNPOWERED_CARD = 0x80100067, SCARD_W_RESET_CARD = 0x80100068, SCARD_W_REMOVED_CARD = 0x80100069, SCARD_W_SECURITY_VIOLATION = 0x8010006A, SCARD_W_WRONG_CHV = 0x8010006B, SCARD_W_CHV_BLOCKED = 0x8010006C, SCARD_W_EOF = 0x8010006D, SCARD_W_CANCELLED_BY_USER = 0x8010006E, SCARD_W_CARD_NOT_AUTHENTICATED = 0x8010006F, SCARD_W_INSERTED_CARD = 0x8010006A, } !!!!Notes: None. !!!!Tips & Tricks: Please add some! !!!!Sample Code: private const int SCARD_STATE_UNAWARE = 0x00000000; // get ATR of card // hContext - previously established context // reader - ATR will be read from card in this reader private static byte[] atr(int hContext, string reader) { int ret; byte[] atr = null; SCARD_READERSTATE[] rs = new SCARD_READERSTATE[1]; rs[0].szReader = reader; rs[0].dwCurrentState = SCARD_STATE_UNAWARE; ret = SCardGetStatusChange(hContext, 100, rs, 1); if (ret == 0 && rs[0].cbAtr > 0 && rs[0].rgbAtr != null) { atr = new byte[rs[0].cbAtr]; Array.Copy(rs[0].rgbAtr, atr, rs[0].cbAtr); } return atr; } !!!!Alternative Managed API: TODO Documentation: SCardGetStatusChange@msdn on MSDN
Edit winscard.scardget...
You do not have permission to change this page. If you feel this is in error, please send feedback with the contact link on the main page.