Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

804 lines
21 KiB

  1. /*****************************************************************************
  2. * $ProjectName: $
  3. * $ProjectRevision: $
  4. *-----------------------------------------------------------------------------
  5. * $Source: z:/pr/cmbs0/sw/sccmn50m.ms/rcs/sccmn50m.h $
  6. * $Revision: 1.3 $
  7. *-----------------------------------------------------------------------------
  8. * $Author: TBruendl $
  9. *-----------------------------------------------------------------------------
  10. * History: see EOF
  11. *-----------------------------------------------------------------------------
  12. *
  13. * Copyright 2000 OMNIKEY AG
  14. ******************************************************************************/
  15. #ifndef _CARDMAN_
  16. #define _CARDMAN_
  17. // ****************************************************************************
  18. // DEFINES
  19. // ****************************************************************************
  20. #define DRIVER_NAME "SCCMN50M"
  21. #define SMARTCARD_POOL_TAG 'CMCS'
  22. #include <ntddk.h>
  23. #include <ntddser.h>
  24. #include "smclib.h"
  25. #include "sccmlog.h"
  26. #include "pcsc_cm.h"
  27. #define SMARTCARD_READ SCARD_CTL_CODE(1000)
  28. #define SMARTCARD_WRITE SCARD_CTL_CODE(1001)
  29. #define CARDMAN_DEVICE_NAME L"\\Device\\CM_2010_0"
  30. #define IFD_NT_VERSIONMAJOR_CARDMAN 3
  31. #define IFD_NT_VERSIONMINOR_CARDMAN 2
  32. #define IFD_NT_BUILDNUMBER_CARDMAN 1
  33. #define ATTR_VENDOR_NAME "OMNIKEY"
  34. #define ATTR_IFD_TYPE_CM "CardMan 2010"
  35. #define ATTR_MAX_IFSD_CARDMAN_II 80
  36. #define WAIT_MS -10000
  37. #define ms_ 1
  38. #define UNKNOWN 0xFFFFFFFF
  39. #define REMOVED 0x00000001
  40. #define INSERTED 0x00000002
  41. #define POWERED 0x00000004
  42. // SCR control byte
  43. #define IGNORE_PARITY 0x01
  44. #define XMIT_HANDSHAKE_OFF 0x02
  45. #define CM2_GET_ATR 0x04
  46. //#define reserved 0x08
  47. #define TO_STATE_XH 0x10
  48. #define LEDS_OFF 0x20
  49. #define LEDS_RED 0x40
  50. #define CARD_POWER 0x80
  51. // card control byte
  52. #define INVERSE_DATA 0x01
  53. #define ENABLE_5MHZ_FAST 0x02
  54. #define ENABLE_3MHZ_FAST 0x04
  55. #define ENABLE_5MHZ 0x08
  56. #define ENABLE_3MHZ 0x00
  57. #define ENABLE_SYN 0x10
  58. #define ENABLE_T0 0x20
  59. #define ENABLE_T1 0x40
  60. #define ENABLE_CRC 0x80
  61. #define ALL_FLAGS 0xFF
  62. // tx control byte
  63. #define SYNC_RESET_LINE_HIGH 0x80
  64. #define SYNC_RESET_LINE_LOW 0x00
  65. #define CLOCK_FORCED_2WBP 0x40
  66. #define TRANSMIT_A8 0x08
  67. #define SYNC_DUMMY_RECEIVE 0x10
  68. // rx control byte
  69. #define T0_DATA_TO_CARD 0x80
  70. #define T0_DATA_FROM_CARD 0x00
  71. #define COLD_RESET 0x40
  72. #define RECEIVE_A8 0x08
  73. #define DEFAULT_READ_INTERVAL_TIMEOUT 1000
  74. #define DEFAULT_READ_TOTAL_TIMEOUT_MULTIPLIER 50
  75. #define DEFAULT_READ_TOTAL_TIMEOUT_CONSTANT 1500
  76. #define DEFAULT_WRITE_TOTAL_TIMEOUT_MULTIPLIER 50
  77. #define DEFAULT_WRITE_TOTAL_TIMEOUT_CONSTANT 250
  78. // for protocol T=0
  79. #define T0_HEADER_LEN 0x05
  80. #define T0_STATE_LEN 0x02
  81. // for protocol T=1
  82. #define T1_HEADER_LEN 0x03
  83. #define MAX_EDC_LEN 0x02
  84. // for power on
  85. #define RESET_DELAY_SYNC 0x01
  86. #define ASYNC3_CARD 0x00
  87. #define ASYNC5_CARD 0x01
  88. #define ATR_LEN_SYNC 4
  89. #define ATR_LEN_ASYNC 33
  90. #define CHAR_INV 0x03
  91. #define CHAR_NORM 0x3B
  92. #define MIN_ATR_LEN 0x03
  93. #define SYNC_ATR_RX_CONTROL 0x47
  94. #define SYNC_RESET_DELAY 0x01
  95. #define TS_OFFSET 0
  96. #define T0_OFFSET 1
  97. typedef enum _READER_POWER_STATE
  98. {
  99. PowerReaderUnspecified = 0,
  100. PowerReaderWorking,
  101. PowerReaderOff
  102. } READER_POWER_STATE, *PREADER_POWER_STATE;
  103. typedef struct _SERIAL_READER_CONFIG
  104. {
  105. // flow control
  106. SERIAL_HANDFLOW HandFlow;
  107. // special characters
  108. SERIAL_CHARS SerialChars;
  109. // read/write timeouts
  110. SERIAL_TIMEOUTS Timeouts;
  111. // Baudrate for reader
  112. SERIAL_BAUD_RATE BaudRate;
  113. // Stop bits, parity configuration
  114. SERIAL_LINE_CONTROL LineControl;
  115. //
  116. // current status of the serial port for IOCTL_GET_COMMSTATUS
  117. //
  118. SERIAL_STATUS SerialStatus;
  119. // mask for purge operation
  120. ULONG PurgeMask;
  121. } SERIAL_READER_CONFIG, *PSERIAL_READER_CONFIG;
  122. typedef struct _CARDMAN_CONFIG
  123. {
  124. UCHAR SCRControl;
  125. UCHAR CardControl;
  126. UCHAR CardStopBits;
  127. UCHAR ResetDelay;
  128. } CARDMAN_CONFIG, *PCARDMAN_CONFIG;
  129. typedef struct _CARDMAN_HEADER
  130. {
  131. UCHAR TxControl;
  132. UCHAR TxLength;
  133. UCHAR RxControl;
  134. UCHAR RxLength;
  135. } CARDMAN_HEADER, *PCARDMAN_HEADER;
  136. typedef struct _DEVICE_EXTENSION
  137. {
  138. // Our smart card extension
  139. SMARTCARD_EXTENSION SmartcardExtension;
  140. // The current number of io-requests
  141. LONG IoCount;
  142. // Used to signal that the reader is able to process reqeusts
  143. KEVENT ReaderStarted;
  144. // Used to signal the the reader has been closed
  145. KEVENT ReaderClosed;
  146. // Used to signal that the connection to the serial driver has been closed
  147. KEVENT SerialCloseDone;
  148. ULONG DeviceInstance;
  149. // The pnp device name of our smart card reader
  150. UNICODE_STRING PnPDeviceName;
  151. KSPIN_LOCK SpinLock;
  152. } DEVICE_EXTENSION, *PDEVICE_EXTENSION;
  153. //
  154. // Define the reader specific portion of the smart card extension
  155. //
  156. typedef struct _READER_EXTENSION
  157. {
  158. HANDLE hThread;
  159. // DeviceObject pointer to serial port
  160. PDEVICE_OBJECT AttachedDeviceObject;
  161. // IoRequest to be send to serial driver
  162. ULONG SerialIoControlCode;
  163. // Saved card state for hibernation/sleeping modes.
  164. BOOLEAN CardPresent;
  165. // Current reader power state.
  166. READER_POWER_STATE ReaderPowerState;
  167. BOOLEAN TimeToTerminateThread;
  168. PVOID ThreadObjectPointer;
  169. KMUTEX CardManIOMutex;
  170. SERIAL_READER_CONFIG SerialConfigData;
  171. BOOLEAN NoConfig;
  172. BOOLEAN ToRHConfig;
  173. BOOLEAN BreakSet;
  174. ULONG SerialErrors;
  175. CARDMAN_CONFIG CardManConfig;
  176. CARDMAN_HEADER CardManHeader;
  177. ULONG ulOldCardState;
  178. ULONG ulNewCardState;
  179. BOOLEAN fRawModeNecessary;
  180. ULONG ulFWVersion;
  181. BOOLEAN fSPESupported;
  182. BOOLEAN fTransparentMode;
  183. BOOLEAN fInverseAtr;
  184. UCHAR abDeviceDescription[42];
  185. SYNC_PARAMETERS SyncParameters;
  186. } READER_EXTENSION, *PREADER_EXTENSION;
  187. #define READER_EXTENSION(member) (SmartcardExtension->ReaderExtension->member)
  188. #define ATTACHED_DEVICE_OBJECT deviceExtension->SmartcardExtension.ReaderExtension->AttachedDeviceObject
  189. // ****************************************************************************
  190. // PROTOTYPES
  191. // ****************************************************************************
  192. NTSTATUS
  193. SCCMN50M_AddDevice (
  194. IN PDRIVER_OBJECT DriverObject,
  195. IN PDEVICE_OBJECT PhysicalDeviceObject
  196. );
  197. NTSTATUS
  198. SCCMN50M_CallSerialDriver (
  199. IN PDEVICE_OBJECT DeviceObject,
  200. IN PIRP Irp
  201. );
  202. NTSTATUS
  203. SCCMN50M_Cancel (
  204. IN PDEVICE_OBJECT DeviceObject,
  205. IN PIRP Irp
  206. );
  207. NTSTATUS
  208. SCCMN50M_Cleanup (
  209. IN PDEVICE_OBJECT DeviceObject,
  210. IN PIRP Irp
  211. );
  212. VOID
  213. SCCMN50M_ClearCardControlFlags (
  214. IN PSMARTCARD_EXTENSION pSmartcardExtension,
  215. IN UCHAR Flags
  216. );
  217. VOID
  218. SCCMN50M_ClearCardManHeader (
  219. IN PSMARTCARD_EXTENSION pSmartcardExtension
  220. );
  221. VOID
  222. SCCMN50M_ClearSCRControlFlags (
  223. IN PSMARTCARD_EXTENSION pSmartcardExtension,
  224. IN UCHAR Flags
  225. );
  226. VOID
  227. SCCMN50M_CompleteCardTracking (
  228. IN PSMARTCARD_EXTENSION SmartcardExtension
  229. );
  230. NTSTATUS
  231. SCCMN50M_CreateClose (
  232. IN PDEVICE_OBJECT DeviceObject,
  233. IN PIRP Irp
  234. );
  235. NTSTATUS
  236. SCCMN50M_CreateDevice (
  237. IN PDRIVER_OBJECT DriverObject,
  238. IN PDEVICE_OBJECT PhysicalDeviceObject,
  239. OUT PDEVICE_OBJECT *DeviceObject
  240. );
  241. NTSTATUS
  242. SCCMN50M_DeviceControl (
  243. PDEVICE_OBJECT DeviceObject,
  244. PIRP Irp
  245. );
  246. VOID
  247. SCCMN50M_DriverUnload (
  248. IN PDRIVER_OBJECT DriverObject
  249. );
  250. VOID
  251. SCCMN50M_InitializeSmartcardExtension (
  252. IN PSMARTCARD_EXTENSION pSmartcardExtension,
  253. IN ULONG ulDeviceInstance
  254. );
  255. NTSTATUS
  256. SCCMN50M_PnP (
  257. IN PDEVICE_OBJECT DeviceObject,
  258. IN PIRP Irp
  259. );
  260. NTSTATUS
  261. SCCMN50M_Power (
  262. IN PDEVICE_OBJECT DeviceObject,
  263. IN PIRP Irp
  264. );
  265. VOID
  266. SCCMN50M_RemoveDevice (
  267. PDEVICE_OBJECT DeviceObject
  268. );
  269. NTSTATUS
  270. SCCMN50M_SerialIo (
  271. PSMARTCARD_EXTENSION SmartcardExtension
  272. );
  273. VOID
  274. SCCMN50M_SetCardManHeader (
  275. IN PSMARTCARD_EXTENSION pSmartcardExtension,
  276. IN UCHAR TxControl,
  277. IN UCHAR TxLength,
  278. IN UCHAR RxControl,
  279. IN UCHAR RxLength
  280. );
  281. VOID
  282. SCCMN50M_SetCardControlFlags (
  283. IN PSMARTCARD_EXTENSION pSmartcardExtension,
  284. IN UCHAR Flags
  285. );
  286. VOID
  287. SCCMN50M_SetSCRControlFlags (
  288. IN PSMARTCARD_EXTENSION pSmartcardExtension,
  289. IN UCHAR Flags
  290. );
  291. VOID
  292. SCCMN50M_StopCardTracking (
  293. IN PDEVICE_EXTENSION pDeviceExtension
  294. );
  295. VOID SCCMN50M_SetVendorAndIfdName(
  296. IN PDEVICE_OBJECT PhysicalDeviceObject,
  297. IN PSMARTCARD_EXTENSION SmartcardExtension
  298. );
  299. NTSTATUS
  300. SCCMN50M_SystemControl(
  301. PDEVICE_OBJECT DeviceObject,
  302. PIRP Irp
  303. );
  304. VOID
  305. SCCMN50M_UpdateCurrentStateThread (
  306. IN PVOID Context
  307. );
  308. NTSTATUS
  309. SCCMN50M_UpdateCurrentState(
  310. IN PSMARTCARD_EXTENSION smartcardExtension
  311. );
  312. NTSTATUS
  313. SCCMN50M_VendorIoctl (
  314. PSMARTCARD_EXTENSION SmartcardExtension
  315. );
  316. VOID
  317. SCCMN50M_CloseSerialDriver(
  318. IN PDEVICE_OBJECT DeviceObject
  319. );
  320. NTSTATUS
  321. DriverEntry(
  322. IN PDRIVER_OBJECT DriverObject,
  323. IN PUNICODE_STRING RegistryPath
  324. );
  325. VOID
  326. MemSet(PUCHAR pbBuffer,
  327. ULONG ulBufferSize,
  328. UCHAR ucPattern,
  329. ULONG ulCount);
  330. VOID
  331. MemCpy(PUCHAR pbDestination,
  332. ULONG ulDestinationLen,
  333. PUCHAR pbSource,
  334. ULONG ulCount);
  335. NTSTATUS Wait (
  336. IN PSMARTCARD_EXTENSION pSmartcardExtension,
  337. IN ULONG ulMilliseconds
  338. );
  339. NTSTATUS
  340. SCCMN50M_ReadCardMan (
  341. IN PSMARTCARD_EXTENSION pSmartcardExtension,
  342. IN ULONG ulBytesToRead,
  343. OUT PULONG pulBytesRead,
  344. IN PUCHAR pbReadBuffer,
  345. IN ULONG ulReadBufferSize
  346. );
  347. NTSTATUS
  348. SCCMN50M_WriteCardMan (
  349. IN PSMARTCARD_EXTENSION SmartcardExtension,
  350. ULONG BytesToWrite,
  351. PUCHAR pWriteBuffer
  352. );
  353. NTSTATUS
  354. SCCMN50M_SerialIo(
  355. IN PSMARTCARD_EXTENSION SmartcardExtension
  356. );
  357. NTSTATUS
  358. SCCMN50M_SetWrite (
  359. IN PSMARTCARD_EXTENSION pSmartcardExtension,
  360. IN ULONG ulBytesToWrite,
  361. IN PUCHAR pbWriteBuffer
  362. );
  363. NTSTATUS
  364. SCCMN50M_SetRead(
  365. IN PSMARTCARD_EXTENSION pSmartcardExtension,
  366. IN ULONG ulBytesToRead
  367. );
  368. NTSTATUS
  369. SCCMN50M_PurgeComm (
  370. IN PSMARTCARD_EXTENSION SmartcardExtension
  371. );
  372. NTSTATUS
  373. SCCMN50M_GetCommStatus(
  374. IN PSMARTCARD_EXTENSION SmartcardExtension
  375. );
  376. NTSTATUS
  377. SCCMN50M_ResyncCardManII (
  378. IN PSMARTCARD_EXTENSION SmartcardExtension
  379. );
  380. BOOLEAN
  381. SCCMN50M_IOOperationFailed(
  382. IN PSMARTCARD_EXTENSION pSmartcardExtension
  383. );
  384. NTSTATUS
  385. SCCMN50M_StartCardTracking (
  386. PDEVICE_EXTENSION pDeviceExtension
  387. );
  388. NTSTATUS
  389. SCCMN50M_InitCommPort (
  390. PSMARTCARD_EXTENSION pSmartcardExtension
  391. );
  392. NTSTATUS
  393. SCCMN50M_GetDeviceDescription (
  394. PSMARTCARD_EXTENSION pSmartcardExtension
  395. );
  396. NTSTATUS
  397. SCCMN50M_InitializeCardMan (
  398. IN PSMARTCARD_EXTENSION SmartcardExtension
  399. );
  400. NTSTATUS
  401. SCCMN50M_SetRTS (
  402. PSMARTCARD_EXTENSION pSmartcardExtension
  403. );
  404. NTSTATUS
  405. SCCMN50M_SetDTR (
  406. PSMARTCARD_EXTENSION pSmartcardExtension
  407. );
  408. NTSTATUS
  409. SCCMN50M_TransmitT0 (
  410. PSMARTCARD_EXTENSION pSmartcardExtension
  411. );
  412. NTSTATUS
  413. SCCMN50M_TransmitT1 (
  414. PSMARTCARD_EXTENSION pSmartcardExtension
  415. );
  416. NTSTATUS
  417. SCCMN50M_Transmit (
  418. PSMARTCARD_EXTENSION pSmartcardExtension
  419. );
  420. NTSTATUS
  421. SCCMN50M_EnterTransparentMode (
  422. IN PSMARTCARD_EXTENSION pSmartcardExtension
  423. );
  424. NTSTATUS
  425. SCCMN50M_ExitTransparentMode (
  426. IN PSMARTCARD_EXTENSION pSmartcardExtension
  427. );
  428. VOID
  429. SCCMN50M_InverseBuffer (
  430. PUCHAR pbBuffer,
  431. ULONG ulBufferSize
  432. );
  433. NTSTATUS
  434. SCCMN50M_ResyncCardManI (
  435. IN PSMARTCARD_EXTENSION SmartcardExtension
  436. );
  437. NTSTATUS
  438. SCCMN50M_SetBRK (
  439. PSMARTCARD_EXTENSION pSmartcardExtension
  440. );
  441. NTSTATUS
  442. SCCMN50M_ClearBRK (
  443. PSMARTCARD_EXTENSION pSmartcardExtension
  444. );
  445. NTSTATUS
  446. SCCMN50M_ClearRTS (
  447. PSMARTCARD_EXTENSION pSmartcardExtension
  448. );
  449. NTSTATUS
  450. SCCMN50M_PowerOff (
  451. IN PSMARTCARD_EXTENSION pSmartcardExtension
  452. );
  453. NTSTATUS
  454. SCCMN50M_PowerOn (
  455. IN PSMARTCARD_EXTENSION pSmartcardExtension,
  456. OUT PULONG pulAtrLength,
  457. OUT PUCHAR pbAtrBuffer,
  458. IN ULONG ulAtrBufferSize
  459. );
  460. NTSTATUS
  461. SCCMN50M_CardPower (
  462. IN PSMARTCARD_EXTENSION pSmartcardExtension
  463. );
  464. NTSTATUS
  465. SCCMN50M_UseParsingStrategy (
  466. IN PSMARTCARD_EXTENSION pSmartcardExtension,
  467. OUT PULONG pulAtrLength,
  468. OUT PUCHAR pbAtrBuffer,
  469. IN ULONG ulAtrBufferSize
  470. );
  471. NTSTATUS
  472. SCCMN50M_UseColdWarmResetStrategy (
  473. IN PSMARTCARD_EXTENSION pSmartcardExtension,
  474. OUT PULONG pulAtrLength,
  475. OUT PUCHAR pbAtrBuffer,
  476. IN ULONG ulAtrBufferSize,
  477. IN BOOLEAN fWarmReset
  478. );
  479. BOOLEAN
  480. SCCMN50M_IsAtrValid (
  481. PUCHAR pbAtrBuffer,
  482. ULONG ulAtrLength
  483. );
  484. NTSTATUS
  485. SCCMN50M_SetProtocol (
  486. PSMARTCARD_EXTENSION pSmartcardExtension
  487. );
  488. NTSTATUS
  489. SCCMN50M_CardTracking (
  490. PSMARTCARD_EXTENSION pSmartcardExtension
  491. );
  492. NTSTATUS
  493. SCCMN50M_IoCtlVendor (
  494. PSMARTCARD_EXTENSION SmartcardExtension
  495. );
  496. NTSTATUS
  497. SCCMN50M_SetHighSpeed_CR80S_SAMOS (
  498. IN PSMARTCARD_EXTENSION pSmartcardExtension
  499. );
  500. NTSTATUS
  501. SCCMN50M_GetFWVersion (
  502. IN PSMARTCARD_EXTENSION pSmartcardExtension
  503. );
  504. NTSTATUS
  505. SCCMN50M_ReadDeviceDescription (
  506. IN PSMARTCARD_EXTENSION pSmartcardExtension
  507. );
  508. BOOLEAN
  509. SCCMN50M_IsAsynchronousSmartCard (
  510. IN PSMARTCARD_EXTENSION pSmartcardExtension
  511. );
  512. NTSTATUS
  513. SCCMN50M_SetFl_1Dl_3(IN PSMARTCARD_EXTENSION pSmartcardExtension );
  514. NTSTATUS
  515. SCCMN50M_SetFl_1Dl_1(IN PSMARTCARD_EXTENSION pSmartcardExtension );
  516. // synchronous smart cards
  517. NTSTATUS
  518. SCCMN50M_SyncCardPowerOn (
  519. IN PSMARTCARD_EXTENSION pSmartcardExtension
  520. );
  521. NTSTATUS
  522. SCCMN50M_SetSyncParameters (
  523. IN PSMARTCARD_EXTENSION pSmartcardExtension
  524. );
  525. UCHAR
  526. SCCMN50M_CalcTxControlByte (
  527. IN PSMARTCARD_EXTENSION pSmartcardExtension,
  528. IN ULONG ulBitsToWrite
  529. );
  530. UCHAR
  531. SCCMN50M_CalcTxLengthByte (
  532. IN PSMARTCARD_EXTENSION pSmartcardExtension,
  533. IN ULONG ulBitsToWrite
  534. );
  535. UCHAR
  536. SCCMN50M_CalcRxControlByte (
  537. IN PSMARTCARD_EXTENSION pSmartcardExtension,
  538. IN ULONG ulBitsToRead
  539. );
  540. UCHAR
  541. SCCMN50M_CalcRxLengthByte (
  542. IN PSMARTCARD_EXTENSION pSmartcardExtension,
  543. IN ULONG ulBitsToRead
  544. );
  545. NTSTATUS
  546. SCCMN50M_ResetCard2WBP (
  547. IN PSMARTCARD_EXTENSION pSmartcardExtension
  548. );
  549. NTSTATUS
  550. SCCMN50M_Transmit2WBP (
  551. IN PSMARTCARD_EXTENSION pSmartcardExtension
  552. );
  553. NTSTATUS
  554. SCCMN50M_Transmit3WBP (
  555. IN PSMARTCARD_EXTENSION pSmartcardExtension
  556. );
  557. NTSTATUS
  558. SCCMN50M_UseSyncStrategy (
  559. IN PSMARTCARD_EXTENSION pSmartcardExtension,
  560. OUT PULONG pulAtrLength,
  561. OUT PUCHAR pbAtrBuffer,
  562. IN ULONG ulAtrBufferSize
  563. );
  564. VOID
  565. SCCMN50M_Shift_Msg (
  566. PUCHAR pbBuffer,
  567. ULONG ulMsgLen
  568. );
  569. VOID SCCMN50M_CheckAtrModified (
  570. IN OUT PUCHAR pbBuffer,
  571. IN ULONG ulBufferSize
  572. );
  573. #endif
  574. /*****************************************************************************
  575. * History:
  576. * $Log: sccmn50m.h $
  577. * Revision 1.3 2000/07/28 09:24:13 TBruendl
  578. * Changes for OMNIKEY on Whistler CD
  579. *
  580. * Revision 1.8 2000/06/28 08:47:33 TBruendl
  581. * R03_0_1_1
  582. *
  583. * Revision 1.7 2000/06/27 11:56:29 TBruendl
  584. * workaraound for SAMOR smart cards with invalid ATR (ITSEC)
  585. *
  586. * Revision 1.6 2000/05/23 09:58:27 TBruendl
  587. * OMNIKEY 3.0.0.1
  588. *
  589. * Revision 1.5 2000/03/01 09:32:06 TBruendl
  590. * R02.20.0
  591. *
  592. * Revision 1.4 1999/12/13 07:57:30 TBruendl
  593. * build number increased
  594. *
  595. * Revision 1.3 1999/07/12 12:50:10 TBruendl
  596. * new version information
  597. *
  598. * Revision 1.2 1999/06/10 09:03:58 TBruendl
  599. * No comment given
  600. *
  601. * Revision 1.1 1999/02/02 13:34:39 TBruendl
  602. * This is the first release (R01.00) of the IFD handler for CardMan running under NT5.0.
  603. *
  604. *
  605. *****************************************************************************/