OneTouchforWindowsSDKC C++ One Touch For Windows SDK C Developer Guide
One%20Touch%20for%20Windows%20SDK%20C-C%2B%2B%20Developer%20Guide
One%20Touch%20for%20Windows%20SDK%20C-C%2B%2B%20Developer%20Guide
One%20Touch%20for%20Windows%20SDK%20C-C%2B%2B%20Developer%20Guide
One%20Touch%20for%20Windows%20SDK%20C-C%2B%2B%20Developer%20Guide
One%20Touch%20for%20Windows%20SDK%20C-C%2B%2B%20Developer%20Guide
User Manual: Pdf
Open the PDF directly: View PDF .
Page Count: 111
Download | ![]() |
Open PDF In Browser | View PDF |
DigitalPersona, Inc. One Touch® for Windows® SDK C/C++ Edition Version 1.6 Developer Guide DigitalPersona, Inc. © 1996–2010 DigitalPersona, Inc. All Rights Reserved. All intellectual property rights in the DigitalPersona software, firmware, hardware, and documentation included with or described in this guide are owned by DigitalPersona or its suppliers and are protected by United States copyright laws, other applicable copyright laws, and international treaty provisions. DigitalPersona and its suppliers retain all rights not expressly granted. DigitalPersona, U.are.U, and One Touch are trademarks of DigitalPersona, Inc., registered in the United States and other countries. Adobe and Adobe Reader are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States and/or other countries. Microsoft, Visual C++, Visual Studio, Windows, Windows Server, and Windows Vista are registered trademarks of Microsoft Corporation in the United States and other countries. This guide and the software it describes are furnished under license as set forth in the “License Agreement” that is shown during the installation process. Except as permitted by such license or by the terms of this guide, no part of this document may be reproduced, stored, transmitted, and translated, in any form and by any means, without the prior written consent of DigitalPersona. The contents of this guide are furnished for informational use only and are subject to change without notice. Any mention of third-party companies and products is for demonstration purposes only and constitutes neither an endorsement nor a recommendation. DigitalPersona assumes no responsibility with regard to the performance or use of these third-party products. DigitalPersona makes every effort to ensure the accuracy of its documentation and assumes no responsibility or liability for any errors or inaccuracies that may appear in it. Technical Support Upon your purchase of a Developer Support package (available from http://buy.digitalpersona.com), you are entitled to a specified number of hours of telephone and email support. Feedback Although the information in this guide has been thoroughly reviewed and tested, we welcome your feedback on any errors, omissions, or suggestions for future improvements. Please contact us at TechPubs@digitalpersona.com or DigitalPersona, Inc. 720 Bay Road, Suite 100 Redwood City, California 94063 USA (650) 474-4000 (650) 298-8313 Fax Document Publication Date: June 22, 2010 (1.6.0)8 Table of Contents 1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Target Audience . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Chapter Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Document Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Notational Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Typographical Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Additional Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Related Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Online Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . System Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Supported DigitalPersona hardware Products . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fingerprint Template Compatibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 2 3 3 3 3 4 4 4 4 5 2 Quick Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Quick Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Install the Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Connect the Fingerprint Reader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Using the Sample Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 6 6 6 7 3 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Installing the SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Installing the Runtime Environment (RTE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Installing and Uninstalling the RTE Silently . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 13 14 16 4 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Biometric System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fingerprint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fingerprint Recognition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fingerprint Enrollment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fingerprint Verification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . False Positives and False Negatives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Components of the SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Device Component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Clean-up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fingerprint Recognition Component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fingerprint Enrollment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 17 17 18 18 18 19 21 21 22 23 23 23 24 24 DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide iii Table of Contents Typical Fingerprint Enrollment Workflow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Fingerprint Verification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Typical Fingerprint Verification Workflow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 5 Core API Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Device Functions List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Extraction Functions List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Matching Functions List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Device Functions Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DPFPBufferFree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DPFPCreateAcquisition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DPFPDestroyAcquisition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DPFPEnumerateDevices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DPFPGetDeviceInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DPFPSetDeviceParameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DPFPGetDeviceParameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DPFPGetVersion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DPFPInit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DPFPStartAcquisition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DPFPStopAcquisition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DPFPTerm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Extraction Functions Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . FX_init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . FX_getVersionInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . FX_createContext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . FX_closeContext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . FX_terminate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . FX_getFeaturesLen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . FX_extractFeatures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . FX_getDisplayImage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Matching Functions Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MC_init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MC_getVersionInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MC_getSettings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MC_createContext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MC_closeContext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MC_getSecurityLevel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MC_setSecurityLevel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MC_terminate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DigitalPersonaOne Touch for Windows SDK: C/C++ Edition | Developer Guide 35 35 35 36 36 38 38 38 40 41 41 42 43 44 44 45 46 46 47 47 48 48 49 49 50 51 53 55 55 55 56 56 57 57 58 59 iv Table of Contents MC_getFeaturesLen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MC_generateRegFeatures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MC_verifyFeaturesEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Data Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DP_DEVICE_INFO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DP_DEVICE_VERSION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DP_HW_INFO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DP_PRODUCT_VERSION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . FT_VERSION_INFO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MC_SETTINGS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Enumerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DP_ACQUISITION_PRIORITY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DP_DEVICE_MODALITY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DP_DEVICE_TECHNOLOGY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DP_DEVICE_UID_TYPE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DP_SAMPLE_QUALITY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . FT_IMG_QUALITY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . FT_FTR_QUALITY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . FT_FTR_TYPE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Type Definitions and Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DFLT_FA_RATE MED_SEC_FA_RATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DP_SAMPLE_TYPE_IMAGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . FT_FA_RATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . HDPOPERATION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . HIGH_SEC_FA_RATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . LOW_SEC_FA_RATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MED_SEC_FA_RATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 60 62 64 64 64 65 66 66 67 68 68 68 69 70 70 72 72 73 74 74 74 74 74 74 75 75 6 User Interface API Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DPEnrollUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DPVerifyUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Callbacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DPENROLLMENTPROC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DPVERIFYPROC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Enumerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DP_ENROLLMENT_ACTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 76 76 78 79 79 80 82 82 7 Events Notifications and Return Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 Events Notifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 Return Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 DigitalPersonaOne Touch for Windows SDK: C/C++ Edition | Developer Guide v Table of Contents 8 Developing Citrix-aware applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 9 Redistribution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RTE\Install Folder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Redist Folder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fingerprint Reader Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Hardware Warnings and Regulatory Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fingerprint Reader Use and Maintenance Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 86 86 90 90 90 A Setting the False Accept Rate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 False Accept Rate (FAR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Representation of Probability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Requested FAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Achieved FAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 91 92 92 92 B Platinum SDK Enrollment Template Conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 Platinum SDK Enrollment Template Conversion for Microsoft Visual C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 Platinum SDK Enrollment Template Conversion for Visual Basic 6.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 C Get/Set Device Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 Glossary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 DigitalPersonaOne Touch for Windows SDK: C/C++ Edition | Developer Guide vi Introduction 1 The One Touch® for Windows SDK is a software development tool that enables developers to integrate fingerprint biometrics into a wide set of Microsoft® Windows®-based applications, services, and products. The tool enables developers to perform basic fingerprint biometric operations: capturing a fingerprint from a DigitalPersona fingerprint reader, extracting the distinctive features from the captured fingerprint sample, and storing the resulting data in a template for later comparison of a submitted fingerprint with an existing fingerprint template. In addition, the One Touch for Windows SDK enables developers to use a variety of programming languages in a number of development environments to create their applications. The product includes detailed documentation and sample code that can be used to guide developers to quickly and efficiently produce fingerprint biometric additions to their products. The One Touch for Windows SDK builds on a decade-long legacy of fingerprint biometric technology, being the most popular set of development tools with the largest set of enrolled users of any biometric product in the world. Because of its popularity, the DigitalPersona® Fingerprint Recognition Engine software —with its high level of accuracy—and award-winning U.are.U® Fingerprint Reader hardware have been used with the widestage, hardest-to-fingerprint demographic of users in the world. The One Touch for Windows SDK has been designed to authenticate users on the Microsoft® Windows Vista® and Microsoft® Windows® XP operating systems running on any of the x86-based platforms. The product is used with DigitalPersona fingerprint readers in a variety of useful configurations: standalone USB peripherals, modules that are built into customer platforms, and keyboards. Also note that the DigitalPersona One Touch I.D. SDK includes the One Touch for Windows RTE, .NET documentation and .NET samples as well; and can be used to implement a full-fledged biometrics product encompassing fingerprint collection, enrollment, and verification. We strongly suggest that OTID developers use this embedded version of OTW. Fingerprint Authentication on a Remote Computer This SDK includes transparent support for fingerprint authentication through Windows Terminal Services (including Remote Desktop Connection) and through a Citrix connection to Metaframe Presentation Server using a client from the Citrix Presentation Server Client package. Through Remote Desktop or a Citrix session, you can use a local fingerprint reader to log on to, and use other installed features of, a remote machine running your fingerprint-enabled application. The following types of Citrix clients are supported: Program Neighborhood Program Neighborhood Agent Web Client To take advantage of this feature, your fingerprint-enabled application must run on the Terminal Services or Citrix server, not on the client. If you are developing a Citrix-aware application, see additional information in the Developing Citrix-aware applications chapter on page 85. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 1 Chapter 1: Introduction Target Audience Target Audience This guide is for developers who have a working knowledge of the C or C++ programming language. Chapter Overview Chapter 1, Introduction, this chapter, describes the audience for which this guide is written; defines the typographical and notational conventions used throughout this guide; identifies a number of resources that may assist you in using the One Touch for Windows SDK: C/C++ Edition; identifies the minimum system requirements needed to run the One Touch for Windows SDK: C/C++ Edition; and lists the DigitalPersona products and fingerprint templates supported by the One Touch for Windows SDK: C/C++ Edition. Chapter 2, Quick Start, provides a quick introduction to the One Touch for Windows SDK: C/C++ Edition using one of the sample applications provided as part of the SDK. Chapter 3, Installation, contains instructions for installing the SDK and the RTE and identifies the files and folders that are installed on your hard disk. Chapter 4, Overview, introduces One Touch for Windows SDK: C/C++ Edition terminology and concepts, shows how data flows among the various One Touch for Windows SDK: C/C++ Edition components, and includes workflow diagrams and explanations of the One Touch for Windows: C/C++ Edition API functions used to perform the operations in the workflows. Chapter 5, Core API Reference, defines the functions, data structures, and type definitions that are part of the One Touch for Windows: C/C++ Edition Core API. Chapter 6, User Interface API Reference, defines the functions and enumerations of the User Interface API, a highlevel wrapper providing a premade user interface and access to the full functionality of the Core API through a small number of simple functions. Chapter 7, Events Notifications and Return Codes, defines the codes returned by the One Touch for Windows: C/ C++ Edition API functions. Chapter 9, Redistribution, identifies the files that you may distribute according to the End User License Agreement (EULA) and lists the functionalities that you need to provide to your end users when you develop products based on the One Touch for Windows: C/C++ Edition API. Appendix A, Setting the False Accept Rate, provides information about determining and using specific values for the FAR and evaluating and testing achieved values. Appendix B, Platinum SDK Enrollment Template Conversion, contains sample code for converting Platinum SDK registration templates for use with the One Touch for Windows SDK: C/C++ Edition. A glossary and an index are also included for your reference. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 2 Chapter 1: Introduction Document Conventions Document Conventions This section defines the notational and typographical conventions used in this guide. Notational Conventions The following notational conventions are used throughout this guide: NOTE: Notes provide supplemental reminders, tips, or suggestions. IMPORTANT: Important notations contain significant information about system behavior, including problems or side effects that can occur in specific situations. Typographical Conventions The following typographical conventions are used in this guide: Typeface Purpose Example Courier bold Used to indicate computer programming code The only valid value for this field is TRUE. Italics Used for emphasis or to introduce new terms Initialize the licensing library by calling the DPFPInit function. For developers who are viewing this document online, text in italics may also indicate hypertext links to other areas in this guide. Bold Used for keystrokes and window and dialog box elements Duration is the period of time for which a template certificate, once issued, is valid. Call DPIDCreateIdentificationSet before calling this function (page 20). Press Enter. Click the Info tab. Additional Resources You can refer to the resources in this section to assist you in using the One Touch for Windows SDK: C/C++ Edition. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 3 Chapter 1: Introduction Related Documentation Related Documentation Subject Document Fingerprint recognition, including the history and basics of fingerprint identification and the advantages of DigitalPersona’s Fingerprint Recognition Engine The DigitalPersona White Paper: Guide to Fingerprint Recognition. The file, Fingerprint Guide.pdf, is located in the Docs folder in the software package, and is not automatically installed on your computer as part of the setup process. Late-breaking news about the product The Readme.txt files provided in the root directory in the SDK software package as well as in some subdirectories Online Resources Web site name URL DigitalPersona Developer Connection Forum for peer-to peer interaction between DigitalPersona Developers http://www.digitalpersona.com/webforums/ Latest updates for DigitalPersona software products http://www.digitalpersona.com/support/downloads/ software.php System Requirements This section lists the minimum software and hardware requirements needed to run the One Touch for Windows SDK: C/C++ Edition. x86-based processor or better Microsoft® Windows® XP, 32-bit and 64-bit versions; Microsoft® Windows® XP Embedded, 32-bit version1; or Microsoft® Windows Vista®, 32-bit and 64-bit versions USB connector on the computer where the fingerprint reader is to be connected DigitalPersona U.are.U 4000B or U.are.U 4500 fingerprint reader Supported DigitalPersona hardware Products The One Touch for Windows SDK: C/C++ Edition supports the following DigitalPersona hardware products: DigitalPersona U.are.U 4000B/4500 or later fingerprint readers and modules DigitalPersona U.are.U Fingerprint Keyboard 1. A list of DLL dependencies for installation of your application on Microsoft Windows XP Embedded, One Touch for Windows XPE Dependencies.xls, is located in the Docs folder in the SDK software package. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 4 Chapter 1: Introduction Fingerprint Template Compatibility Fingerprint Template Compatibility Fingerprint templates produced by all editions of the One Touch for Windows SDK are also compatible with the following DigitalPersona SDKs: Gold SDK Gold CE SDK One Touch for Linux SDK, all distributions NOTE: Platinum SDK enrollment templates must be converted to a compatible format to work with these SDKs. See Appendix B on page 93 for sample code that converts Platinum SDK templates to this format. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 5 Quick Start 2 This chapter provides a quick introduction to the One Touch for Windows SDK: C/C++ Edition using one of the sample applications provided as part of the One Touch for Windows SDK. The application is a sample Microsoft® Visual C++® project that demonstrates the functionality of the user interfaces supported by the One Touch for Windows SDK: C/C++ Edition User Interface API. Quick Concepts The following definitions will assist you in understanding the purpose and functionality of the sample application that is described in this section. Enrollment—The process of capturing a person’s fingerprint four times, extracting the features from the fingerprints, creating a fingerprint template, and storing the template for later comparison. Verification—The process of comparing a captured fingerprint to a fingerprint template to determine whether the two match. Unenrollment—The process of deleting a fingerprint template associated with a previously enrolled fingerprint. For further descriptions of these processes, see Chapter 4 on page 17. Install the Software To install the One Touch for Windows SDK: C/C++ Edition 1. In the SDK folder in the SDK software package, open the Setup.exe file, and then click Next. 2. Follow the installation instructions as they appear. 3. Restart your computer. Connect the Fingerprint Reader Conenct the fingerprint reader to the USB connector on the system where you installed the SDK. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 6 Chapter 2: Quick Start Using the Sample Application Using the Sample Application By performing the exercises in this section, you will Start the sample application Enroll a fingerprint Verify a fingerprint Unenroll (delete) a fingerprint Exit the sample application To start the sample application 1. Open the UIVBDemo.exe file. It is located in theOne Touch SDK\C++ Samples\ DPFP UI Demo\Release folder. 2. The DPFPUI Demo dialog box appears. Enrolling a fingerprint consists of scanning your fingerprint four times using the fingerprint reader. To enroll a fingerprint 1.In the DPFPUI Demo dialog box, click Enroll Fingerprints. The Fingerprint Enrollment dialog box appears. 2. On the right “hand,” click the index finger. A second Fingerprint Enrollment dialog box appears. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 7 Chapter 2: Quick Start Using the Sample Application 3. Using the fingerprint reader, scan your right index fingerprint. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 8 Chapter 2: Quick Start Using the Sample Application 4. Repeat step 3 until the Success message appears. 5. In the message box, click OK. The Enrollment was successful message appears. 6. Click OK. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 9 Chapter 2: Quick Start Using the Sample Application To verify a fingerprint 1. In the DPFPUI Demo dialog box, click Verify Fingerprint. The Verify Your Identify dialog box appears. 2. Using the fingerprint reader, scan your right index fingerprint. The Success message appears, which indicates that your fingerprint was verified. 3. In the message box, click OK. 4. Using the fingerprint reader, scan your right middle fingerprint. The Retry message appears, which indicates that your fingerprint was not verified. 5. In the message box, click OK. 6. Click Cancel. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 10 Chapter 2: Quick Start Using the Sample Application To unenroll (delete) a fingerprint 1. In the DPFPUI Demo dialog box, click Enroll Fingerprints. The Fingerprint Enrollment dialog box appears, indicating that you have enrolled your right index fingerprint. 2. In the right “hand,” click the green index finger. A message box appears, asking you to verify the deletion. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 11 Chapter 2: Quick Start Using the Sample Application 3. In the message box, click Yes. The Success message appears. 4. In the message box, click OK. The Fingerprint Deleted message appears. The right index finger is no longer green, indicating that the fingerprint associated with that finger is not enrolled (has been deleted). To exit the application In the DPFPUI Demo dialog box, click Quit. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 12 3 Installation This chapter contains instructions for installing the various components of the One Touch for Windows SDK: C/ C++ Edition and identifies the files and folders that are installed on your hard disk. The following two installations are located in the SDK software package: SDK, which you use in developing your application. This installation is located in the SDK folder. RTE (runtime environment), which you must provide to your end users to implement the One Touch for Windows SDK: C/C++ Edition interfaces, objects, methods, and properties. This installation is located in the RTE folder. (The RTE installation is also included in the SDK installation.) Installing the SDK To install the One Touch for Windows SDK: C/C++ Edition 1. In the SDK folder in the SDK software package, open the Setup.exe file, and then click Next. 2. Follow the installation instructions as they appear. 3. Restart your computer. Table 1 describes the files and folders that are installed in the folder on your hard disk. The RTE files and folders, which are listed in Table 2 on page 15, are also installed on your hard disk. NOTE: All installations share the DLLs and the DPHostW.exe file that are installed with the C/C++ edition. Additional product-specific files are provided for other editions. Table 1. One Touch for Windows SDK: C/C++ Edition installed files and folders Folder File Description One Touch SDK\C-C++\Docs One Touch for Windows SDK C-C++ Developer Guide.pdf DigitalPersona One Touch for Windows SDK: C/C++ Edition Developer Guide One Touch SDK\C-C++\ Include dpDefs.h Header files used by all of the One Touch for Windows SDK APIs DPDevClt.h dpFtrEx.h dpMatch.h dpRCodes.h dpUIApi.h DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 13 Chapter 3: Installation Installing the Runtime Environment (RTE) Table 1. One Touch for Windows SDK: C/C++ Edition installed files and folders (continued) Folder File Description One Touch SDK\C-C++\Lib DPFPApi.lib Import libraries used by the One Touch for Windows SDK: C/C++ Edition API DPFpUI.lib dpHFtrEx.lib dpHMatch.lib One Touch SDK\C-C++\C++ Samples\DPFP UI Demo This folder contains a sample Microsoft® Visual C++® project that demonstrates the functionality of the user interfaces supported by the One Touch for Windows SDK: C/C++ Edition User Interface API. One Touch SDK\C-C++\C++ Samples\Enrollment Sample Code This folder contains a sample Microsoft Visual C++ project that shows how to use the One Touch for Windows: C/C++ Edition Core API for performing fingerprint enrollment and fingerprint verification. Installing the Runtime Environment (RTE) When you develop a product based on the One Touch for Windows SDK: C/C++ Edition, you need to provide the redistributables to your end users. These files are designed and licensed for use with your application. You may include the installation files located in the RTE\Install folder in your application or you may incorporate the redistributables directly into your installer. You may also use the merge modules located in the Redist folder in the SDK software package to create your own MSI installer. (See Redistribution on page 86 for licensing terms.) If you created an application based on the One Touch for Windows: C/C++ Edition APIs that does not include an installer, your end users must install the One Touch for Windows: C/C++ Edition Runtime Environment to run your application. To install the One Touch for Windows: C/C++ Edition RTE for 32-bit operating systems 1. In the RTE folder in the SDK software package, open the Setup.exe file. 2. Follow the installation instructions as they appear. Table 2 identifies the files that are installed on your hard disk. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 14 Chapter 3: Installation Installing the Runtime Environment (RTE) Table 2. One Touch for Windows: C/C++ Edition RTE installed files and folders, 32-bit installation Folder File Description \Bin DPCOper2.dll DLLs and executable file used by the all of the One Touch for Windows APIs DPDevice2.dll DPDevTS.dll DpHostW.exe DPmsg.dll DPMux.dll DpSvInfo2.dll DPTSClnt.dll DPCrStor.dll DPFPApi.dll DpClback.dll DLLs used by all of the One Touch for Windows SDK APIs dpHFtrEx.dll dpHMatch.dll DPFpUI.dll To install the One Touch for Windows: C/C++ Edition RTE for 64-bit operating systems 1. In the RTE\x64 folder in the SDK software package, open the Setup.exe file. 2. Follow the installation instructions as they appear. Table 3 identifies the files that are installed on your hard disk for 64-bit versions of the supported operating systems. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 15 Chapter 3: Installation Installing and Uninstalling the RTE Silently Table 3. One Touch for Windows: C/C++ Edition RTE installed files and folders, 64-bit installation Folder File Description \Bin DPCOper2.dll DLLs and executable file used by the all of the One Touch for Windows APIs DPDevice2.dll DPDevTS.dll DpHostW.exe DPMux.dll DpSvInfo2.dll DPTSClnt.dll DPCrStor.dll \Bin\x64 DPmsg.dll DLL used by the all of the One Touch for Windows APIs DPFPApi.dll 32-bit DLLs used by all of the One Touch for Windows APIs DpClback.dll dpHFtrEx.dll dpHMatch.dll DPFpUI.dll DPFPApi.dll DpClback.dll 64-bit DLLs used by all of the One Touch for Windows APIs dpHFtrEx.dll dpHMatch.dll DPFpUI.dll Installing and Uninstalling the RTE Silently The One Touch for Windows SDK software package contains a batch file, InstallOnly.bat, that you can use to silently install the RTE. In addition, you can modify the file to selectively install the various features of the RTE. Refer to the file for instructions. The SDK software package also contains a file, UninstallOnly.bat, that you can use to silently uninstall the RTE. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 16 Overview 4 This chapter introduces One Touch for Windows SDK: C/C++ Edition concepts and terminology. This chapter also includes typical workflow diagrams and explanations of the One Touch for Windows: C/C++ Edition API functions used to perform the tasks in the workflows. For additional information on fingerprint biometrics, refer to the “DigitalPersona White Paper: Guide to Fingerprint Recognition” included in the One Touch for Windows SDK software package “doc” folder as “Fingerprint Guide.pdf.” Biometric System A biometric system is an automatic method of identifying a person based on the person’s unique physical and/ or behavioral traits, such as a fingerprint or an iris pattern, or a handwritten signature or voice. Biometric identifiers are Universal Distinctive Persistent (sufficiently unchangeable over time) Collectable Biometric systems have become an essential component of effective person recognition solutions because biometric identifiers cannot be shared or misplaced and they naturally represent an individual’s bodily identity. Substitute forms of identity, such as passwords (commonly used in logical access control) and identity cards (frequently used for physical access control), do not provide this level of authentication that strongly validates the link to the actual authorized user. Fingerprint recognition is the most popular and mature biometric system used today. In addition to meeting the four criteria above, fingerprint recognition systems perform well (that is, they are accurate, fast, and robust), they are publicly acceptable, and they are hard to circumvent. Fingerprint A fingerprint is an impression of the ridges on the skin of a finger. A fingerprint recognition system uses the distinctive and persistent characteristics from the ridges, also referred to as fingerprint features, to distinguish one finger (or person) from another. The One Touch for Windows SDK: C/C++ Edition incorporates the DigitalPersona Fingerprint Recognition Engine (Engine), which uses traditional as well as modern fingerprint recognition methodologies to convert these fingerprint features into a format that is compact, distinguishing, and persistent. The Engine then uses the converted, or extracted, fingerprint features in comparison and decision-making to provide reliable personal recognition. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 17 Chapter 4: Overview Fingerprint Recognition Fingerprint Recognition The DigitalPersona fingerprint recognition system uses the processes of fingerprint enrollment and fingerprint verification, which are illustrated in the block diagram in Figure 1 on page 19. Some of the tasks in these processes are done by the fingerprint reader and its driver; some are accomplished using One Touch for Windows: C/C++ Edition API functions, which use the Engine; and some are provided by your software application and/or hardware. Fingerprint Enrollment Fingerprint enrollment is the initial process of collecting fingerprint data from a person (enrollee) and storing the resulting data as a fingerprint template for later comparison. The following procedure describes typical fingerprint enrollment. (Steps preceded by an asterisk are not performed by the One Touch for Windows SDK: C/C++ Edition.) 1. *Obtain the enrollee’s identifier (Subject Identifier). 2. Capture the enrollee’s fingerprint using the fingerprint reader. 3. Extract the fingerprint feature set for the purpose of enrollment from the fingerprint sample. 4. Repeat steps 2 and 3 until you have enough fingerprint feature sets to create a fingerprint template. 5. Create a fingerprint template. 6. *Associate the fingerprint template with the enrollee through a Subject Identifier, such as a user name, email address, or employee number. 7. *Store the fingerprint template, along with the Subject Identifier, for later comparison. Fingerprint templates can be stored in any type of repository that you choose, such as a fingerprint capture device, a smart card, or a local or central database. Fingerprint Verification Fingerprint verification is the process of comparing the fingerprint data to the fingerprint template produced at enrollment and deciding if the two match. The following procedure describes typical fingerprint verification. (Steps preceded by an asterisk are not performed by the One Touch for Windows SDK: C/C++ Edition.) 1. *Obtain the Subject Identifier of the person to be verified. 2. Capture a fingerprint sample using the fingerprint reader. 3. Extract a fingerprint feature set for the purpose of verification from the fingerprint sample. 4. *Retrieve the fingerprint template associated with the Subject Identifier from your repository. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 18 Chapter 4: Overview False Positives and False Negatives 5. Perform a one-to-one comparison between the fingerprint feature set and the fingerprint template, and make a decision of match or non-match. 6. *Act on the decision accordingly, for example, unlock the door to a building for a match, or deny access to the building for a non-match. )LQJHUSULQW(QUROOPHQW *HW6XEMHFW,GHQWLILHU &DSWXUHILQJHUSULQWV &UHDWHILQJHUSULQW IHDWXUHVHWV &UHDWHWHPSODWH 6WRUHWHPSODWHDQG 6XEMHFW,GHQWLILHU &RPSDUHDQG PDNHGHFLVLRQ 8VHGHFLVLRQLQ DSSOLFDWLRQ )LQJHUSULQW9HULILFDWLRQ *HW6XEMHFW,GHQWLILHU 5HWULHYHWHPSODWHDQG 6XEMHFW,GHQWLILHU &DSWXUHILQJHUSULQW &UHDWHILQJHUSULQW IHDWXUHVHW /HJHQG 3HUIRUPHGE\2QH7RXFKIRU:LQGRZV6'.&& 1RWSHUIRUPHGE\2QH7RXFKIRU:LQGRZV6'.&& Figure 1. DigitalPersona fingerprint recognition system False Positives and False Negatives Fingerprint recognition systems provide many security and convenience advantages over traditional methods of recognition. However, they are essentially pattern recognition systems that inherently occasionally make certain errors because no two impressions of the same finger are identical. During verification, sometimes a person who is legitimately enrolled is rejected by the system (a false negative decision), and sometimes a person who is not enrolled is accepted by the system (a false positive decision). The proportion of false positive decisions is known as the false accept rate (FAR), and the proportion of false negative decisions is known as the false reject rate (FRR). In fingerprint recognition systems, the FAR and the FRR are traded off against each other, that is, the lower the FAR, the higher the FRR, and the higher the FAR, the lower the FRR. A One Touch for Windows: C/C++ Edition API function enables you to set the value of the FAR, also referred to as the security level, to accommodate the needs of your application. In some applications, such as an access DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 19 Chapter 4: Overview False Positives and False Negatives control system to a highly confidential site or database, a lower FAR is required. In other applications, such as an entry system to an entertainment theme park, security (which reduces ticket fraud committed by a small fraction of patrons by sharing their entry tickets) may not be as significant as accessibility for all of the patrons, and it may be preferable to decrease the FRR at the expense of an increased FAR. It is important to remember that the accuracy of the fingerprint recognition system is largely related to the quality of the fingerprint. Testing with sizable groups of people over an extended period has shown that a majority of people have feature-rich, high-quality fingerprints. These fingerprints will almost surely be recognized accurately by the DigitalPersona Fingerprint Recognition Engine and practically never be falsely accepted or falsely rejected. The DigitalPersona fingerprint recognition system is optimized to recognize fingerprints of poor quality. However, a very small number of people may have to try a second or even a third time to obtain an accurate reading. Their fingerprints may be difficult to verify because they are either worn from manual labor or have unreadable ridges. Instruction in the proper use of the fingerprint reader will help these people achieve the desired results. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 20 Chapter 4: Overview Operations Operations Each time the user puts a finger on the fingerprint reader, fingerprint-related data is sent to the Engine. When the client application needs to perform some action requiring scanning a fingerprint, it should create an operation. There is only one type of operation supported: Fingerprint sample acquisition. Right now the Engine supports only one type of fingerprint sample, which is a fingerprint image. During the creation of a fingerprint sample acquisition operation, the client application may specify its priority level, which can be low, normal, or high. Note that the high priority level is reserved for internal DigitalPersona use only. Note that no more than one client application may obtain the results of a single fingerprint scan. It is possible to create and register any number of operations with normal priority, but no more than one operation for each of low and high priority at a time. When the Engine is ready to dispatch the result of fingerprint scan, it processes operations using the following rules in the sequence shown. 1. If there is a high-priority operation registered, the result is dispatched to the process that owns the operation. 2. If there is no high-priority operation registered, the engine determines which process owns the topmost window. If there is a normal-priority operation owned by this process, it will receive the result. 3. If the above-mentioned steps do not allow the engine to dispatch the result, the process owning the lowpriority operation (if registered) will receive the result. If the result is still not dispatched, it is discarded. Components of the SDK The One Touch for Windows SDK: C/C++ Edition consists of the following two components: Device component The device component directs fingerprint reader (device) data and events to your application. Fingerprint recognition component The fingerprint recognition component performs fingerprint enrollment and verification and includes two modules: the fingerprint feature extraction module and the fingerprint comparison module. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 21 Chapter 4: Overview Device Component Device Component The device component workflow is shown below and is followed by explanations of the One Touch for Windows: C/C++ Edition Core API functions that are used to perform the tasks in the workflow. ,QLWLDOL]DWLRQ ,QLWLDOL]HWKH GHYLFHFRPSRQHQW '3)3,QLW 2SHUDWLRQ (QXPHUDWHDYDLODEOH ILQJHUSULQWUHDGHUV GHYLFHV '3)3(QXPHUDWH'HYLFHV &UHDWHDILQJHUSULQWVDPSOH DFTXLVLWLRQRSHUDWLRQ '3)3&UHDWH$FTXLVLWLRQ 6XEVFULEHFOLHQWIRUUHFHLYLQJ RSHUDWLRQHYHQWVQRWLILFDWLRQV 3URFHVVWKHHYHQW '3)36WDUW$FTXLVLWLRQ 8QVXEVFULEHFOLHQW IURPUHFHLYLQJRSHUDWLRQ HYHQWVQRWLILFDWLRQV '3)36WRS$FTXLVLWLRQ &OHDQXS 7HUPLQDWHWKH GHYLFHFRPSRQHQW '3)37HUP /HJHQG 2SWLRQDOVWHS Figure 2. Device component workflow DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 22 Chapter 4: Overview Initialization Initialization Initialize the device component by calling the DPFPInit function (page 44). Operation 1. (Optional) If necessary, enumerate the available fingerprint readers (devices) connected to a computer by calling the DPFPEnumerateDevices function (page 41). 2. Create a fingerprint sample acquisition operation by calling the DPFPCreateAcquisition (page 38) and specifying the device’s UID. You can also subscribe to all available fingerprint readers by passing the value GUID_NULL. 3. Subscribe the client application for receiving operation events notifications by calling DPFPStartAcquisition (page 45)and passing the operation handle. 4. Process the event. 5. Unsubscribe by calling the DPFPStopAcquisition function (page 46) 6. Release a subscribed fingerprint reader by calling the DPFPDestroyAcquisition function (page 40). Clean-up Terminate the device component when your application no longer requires access to any fingerprint readers by calling the DPFPTerm function (page 46). DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 23 Chapter 4: Overview Fingerprint Recognition Component Fingerprint Recognition Component This section includes illustrations of typical fingerprint enrollment and verification workflows for the fingerprint recognition component and explanations of the One Touch for Windows: C/C++ Edition Core API functions used to perform the tasks in the workflows. Your application workflows may be different than those illustrated here. For example, you could choose to create fingerprint feature sets locally and then send them to a server for enrollment. Fingerprint Enrollment A typical fingerprint enrollment application workflow is represented below. Each figure is followed by explanations of the One Touch for Windows: C/C++ Edition Core API functions that are used to perform the tasks in that part of the workflow. Both the fingerprint feature extraction and the fingerprint comparison modules are used for performing enrollment. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 24 Chapter 4: Overview Typical Fingerprint Enrollment Workflow Typical Fingerprint Enrollment Workflow 6WDUW ,QLWLDOL]DWLRQ ,QLWLDOL]HWKHILQJHUSULQW FRPSDULVRQPRGXOH ,QLWLDOL]HWKHILQJHUSULQW IHDWXUHH[WUDFWLRQPRGXOH &UHDWHDFRPSDULVRQFRQWH[W &UHDWHDIHDWXUHH[WUDFWLRQFRQWH[W 0&BLQLW );BLQLW 0&BFUHDWH&RQWH[W );BFUHDWH&RQWH[W 5HWULHYHWKHVL]HRIWKH ILQJHUSULQWWHPSODWH 67 SDVVLQJ IHDWXUHVHWSXUSRVH)7B5(*B)75 0&BJHW)HDWXUHV/HQ 5HWULHYHWKHVL]HRIWKHILQJHUSULQW IHDWXUHVHW )6( SDVVLQJIHDWXUH VHWSXUSRVH)7B35(B5(*B)75 );BJHW)HDWXUHV/HQ 5HWULHYHWKHUHTXLUHGQXPEHURI ILQJHUSULQWIHDWXUHVHWV 1 0&BJHW6HWWLQJV $ Figure 3. Typical fingerprint enrollment workflow: Initialization Initialization Tasks Steps 3 and 4 can be done before steps 1 and 2. 1. Initialize the fingerprint feature extraction module by calling the FX_init function (page 47). 2. Create a feature extraction context by calling the FX_createContext function (page 48) 3. Initialize the fingerprint comparison module by calling the MC_init function (page 55). 4. Create a comparison context by calling the MC_createContext function (page 56). Steps 5 through 7 can be done in any order. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 25 Chapter 4: Overview Typical Fingerprint Enrollment Workflow 5. Retrieve the size of the fingerprint feature set (FSE) by calling the FX_getFeaturesLen function and passing feature set purpose FT_PRE_REG_FTR (page 50). 6. Retrieve the size of the fingerprint template (ST) by calling the MC_getFeaturesLen function and passing feature set purpose FT_REG_FTR (page 59). 7. Retrieve the number (N) of fingerprint feature sets required to create the fingerprint template by calling the MC_getSettings function (page 56). $ )LQJHUSULQWIHDWXUHVHWFUHDWLRQ 3UHSDUHWKHILQJHUSULQW VDPSOHIRUGLVSOD\ &DSWXUHDILQJHUSULQW VDPSOHIURPWKH ILQJHUSULQWUHDGHU 'LVSOD\WKHLPDJH &UHDWHDILQJHUSULQWIHDWXUH VHWSDVVLQJ)6(DQGIHDWXUH VHWSXUSRVH)7B35(B5(*B)75 );BJHW'LVSOD\,PDJH );BH[WUDFW)HDWXUHV 6WRUHWKHILQJHUSULQWIHDWXUH VHWLQYRODWLOHPHPRU\ 5HTXLUHGQXPEHU RIILQJHUSULQW IHDWXUHVHWV" 1R = 100.0, or the specified comparison context is not valid. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 58 Chapter 5: Core API Reference Matching Functions Reference FR_ERR_INVALID_CONTEXT The specified comparison context is not valid. FR_WRN_INTERNAL The value of the parameter targetFar is unacceptably high and was reduced to an internally defined value. Library dpHMatch.lib MC_terminate Terminates the fingerprint comparison module and releases the resources associated with it. Syntax MC_DLL_INTERFACE FT_RETCODE MC_terminate(void); Return Values FT_OK Termination was successful. Library dpHMatch.lib MC_getFeaturesLen Retrieves the size of the buffer for the fingerprint template. This function returns either the minimum or the recommended size that provides the best recognition accuracy, or both. Syntax MC_DLL_INTERFACE FT_RETCODE MC_getFeaturesLen( IN FT_FTR_TYPE featureSetPurpose, IN int reserved, OUT int* recommendedTemplateSize, OUT int* minimumTemplateSize ); DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 59 Chapter 5: Core API Reference Matching Functions Reference Parameters featureSetPurpose [in] Feature set purpose. Specifies the purpose for which the fingerprint feature set is to be created. For a feature set to be used for enrollment, use the value FT_PRE_REG_FTR; for verification, use FT_VER_FTR; and for a fingerprint template, use FT_REG_FTR. reserved [in] This parameter is deprecated and should always be set to 0. recommendedTemplateSize [out] Pointer to the memory receiving the size of the buffer for the fingerprint template recommended for best recognition accuracy, or NULL. If NULL is passed, minimumTemplateSize must not be NULL. minimumTemplateSize [out] Pointer to the memory receiving the minimum size of the buffer for the fingerprint template, or NULL. If NULL is passed, recommendedTemplateSize must not be NULL. Return Values FT_OK Termination was successful. Library dpHMatch.lib MC_generateRegFeatures Creates a fingerprint template to be used for later comparison with a fingerprint feature set. This function, known as fingerprint enrollment, computes the fingerprint template using the specified number of fingerprint feature sets (numFeatureSets) successfully returned by the FX_extractFeatures function (page 51). DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 60 Chapter 5: Core API Reference Matching Functions Reference Syntax MC_DLL_INTERFACE FT_RETCODE MC_generateRegFeatures( IN FT_HANDLE mcContext, IN int reserved0, IN int numFeatureSets, IN int featureSetSize, IN FT_BYTE* featureSet[], IN int templateSize, OUT FT_BYTE* template, OUT FT_BYTE reserved1[], OUT FT_BOOL* templateCreated ); Parameters mcContext [in] Handle to the comparison context reserved0 [in] This parameter is deprecated and should always be set to 0. numFeatureSets [in] Number of input fingerprint feature sets, which is the number specified in the numFeatureSets field of the structure of type MC_SETTINGS. featureSetSize [in] Size of the buffer for the fingerprint feature set (assuming that the size of each fingerprint feature set is the same) featureSet[] [in] Array of pointers to the locations of the buffers for each fingerprint feature set templateSize [in] Size of the fingerprint template template [out] Pointer to the location of the buffer receiving the fingerprint template reserved1[] [out] This parameter is deprecated and should be set to NULL. templateCreated [out] Pointer to the memory that will receive the value of whether the template is created. If the value of this parameter is FT_TRUE, the fingerprint template was written to template. If the value is FT_FALSE, a template was not created. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 61 Chapter 5: Core API Reference Matching Functions Reference Return Values FR_OK The function succeeded. FR_ERR_NO_INIT The fingerprint comparison module is not initialized. FR_ERR_NO_MEMORY There is not enough memory to perform the function. FR_ERR_BAD_INI_SETTING Initialization settings are corrupted. FR_ERR_INVALID_BUFFER A buffer is not valid. FR_ERR_INVALID_PARAM One or more parameters are not valid. FR_ERR_INTERNAL An internal error occurred. Library dpHMatch.lib MC_verifyFeaturesEx Performs a one-to-one comparison of a fingerprint feature set with a fingerprint template produced at enrollment and makes a decision of match or non-match. This function is known as fingerprint verification. The function succeeds if the comparison score is high enough given the security level of the specified comparison context. Syntax MC_DLL_INTERFACE FT_RETCODE MC_verifyFeaturesEx( IN FT_HANDLE mcContext, IN int templateSize, IN OUT FT_BYTE* template, IN int featureSetSize, IN FT_BYTE* featureSet, IN int reserved0, OUT void* reserved1, OUT int reserved2[], OUT FT_VER_SCORE_PT reserved3, OUT double* achievedFar, OUT FT_BOOL* comparisonDecision ); DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 62 Chapter 5: Core API Reference Matching Functions Reference Parameters mcContext [in] Handle to the comparison context templateSize [in] Size of the fingerprint template template [in, out] Pointer to the location of the buffer containing the fingerprint template featureSetSize [in] Size of the fingerprint feature set featureSet [in] Pointer to the location of the buffer containing the fingerprint feature set reserved0 [in] This parameter is deprecated and should always be 0. reserved1 [in] This parameter is deprecated and should always be NULL. reserved2[] [out] This parameter is deprecated and should always be NULL. reserved3 [out] This parameter is deprecated and should always be NULL. achievedFar [out] Pointer to the value of the achieved FAR for this comparison. If the achieved FAR is not required, a NULL pointer can be passed. comparisonDecision [out] Pointer to the memory that will receive the comparison decision. This parameter indicates whether the comparison of the fingerprint feature set and the fingerprint template resulted in a decision of match (FT_TRUE) or non-match (FT_FALSE) at the security level of the specified comparison context. Return Values FR_OK The function succeeded. FR_ERR_NO_INIT The fingerprint comparison module is not initialized. FR_ERR_NO_MEMORY There is not enough memory to perform the function. FR_ERR_BAD_INI_SETTING Initialization settings are corrupted. FR_ERR_INVALID_BUFFER An internal error occurred. FR_ERR_INVALID_PARAM One or more parameters are not valid. Library dpHMatch.lib DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 63 Chapter 5: Core API Reference Data Structures Data Structures This section defines the One Touch for Windows: C/C++ Edition Core API data structures. DP_DEVICE_INFO Device information structure. Syntax typedef struct DP_DEVICE_INFO { GUID DeviceUid; DP_DEVICE_UID_TYPE eUidType; DP_DEVICE_MODALITY eDeviceModality; DP_DEVICE_TECHNOLOGY eDeviceTech; DP_HW_INFO HwInfo; } DP_DEVICE_INFO, * PDP_DEVICE_INFO; Data Fields DeviceUid Device unique identifier eUidType Defines whether the UID is persistent or volatile eDeviceModality Defines which modality the device is being used in eDeviceTech Defines the type of technology used in the device HwInfo Describes the device hardware DP_DEVICE_VERSION Device hardware/firmware version number structure. Syntax typedef struct DP_DEVICE_VERSION { ULONG uMajor; ULONG uMinor; ULONG uBuild; } DP_DEVICE_VERSION; DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 64 Chapter 5: Core API Reference DP_HW_INFO Data Fields wMajor Major version of the product wMinor Minor version of the product wRevision Revision number of the product uBuild Build number of the product DP_HW_INFO Device hardware information structure. Syntax typedef struct DP_HW_INF { unsigned int uLanguageId; wchar_t szVendor[DP_MAX_USB_STRING_SIZE]; wchar_t szProduct[DP_MAX_USB_STRING_SIZE]; wchar_t szSerialNb[DP_MAX_USB_STRING_SIZE]; DP_DEVICE_VERSION HardwareRevision DP_DEVICE_VERSION FirmwareRevision; } DP_HW_INFO, * PDP_HW_INFO; Data Fields uLanguageId Device language szVendor Manufacturer name, for example, “DigitalPersona, Inc.” szProduct Build number of device hardware/firmware DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 65 Chapter 5: Core API Reference DP_PRODUCT_VERSION DP_PRODUCT_VERSION DigitalPersona product version structure. Syntax typedef struct DP_PRODUCT_VERSION { WORD wMajor; WORD wMinor; WORD wRevision; WORD wBuild; } DP_PRODUCT_VERSION, * PDP_PRODUCT_VERSION; Data Fields wMajor Major version of the product wMinor Minor version of the product wRevision Revision number of the product uBuild Build number of the product FT_VERSION_INFO Fingerprint feature extraction or fingerprint comparison module version information structure. Syntax typedef struct { unsigned major; unsigned minor; unsigned revision; unsigned build; } FT_VERSION_INFO, * FT_VERSION_INFO_PT; DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 66 Chapter 5: Core API Reference MC_SETTINGS Data Fields Major Major version number Minor Minor version number Revision Revision number number Build Build number MC_SETTINGS Fingerprint comparison module settings structure. Syntax typedef struct{ int numPreRegFeatures; } MC_SETTINGS, * MC_SETTINGS_PT; Data Fields numPreRegFeatures Number of fingerprint feature sets required to generate a fingerprint template DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 67 Chapter 5: Core API Reference Enumerations Enumerations This section defines the One Touch for Windows: C/C++ Edition Core API enumerations. DP_ACQUISITION_PRIORITY Defines the priority of a fingerprint sample capture operation performed by a fingerprint reader. Syntax typedef enum DP_ACQUISITION_PRIORITY { DP_PRIORITY_HIGH= 1, DP_PRIORITY_NORMAL= 2, DP_PRIORITY_LOW = 3 } DP_ACQUISITION_PRIORITY; Values DP_PRIORITY_HIGH Highest priority (RESERVED. For internal use only.) DP_PRIORITY_NORMAL Standard priority DP_PRIORITY_LOW Lowest priority DP_DEVICE_MODALITY Defines the modality that a fingerprint reader uses to capture fingerprint samples. Syntax typedef enum DP_DEVICE_MODALITY { DP_UNKNOWN_DEVICE_MODALITY = 0, DP_SWIPE_DEVICE, DP_AREA_DEVICE, DP_DEVICE_MODALITY_NUM, } DP_DEVICE_MODALITY; DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 68 Chapter 5: Core API Reference DP_DEVICE_TECHNOLOGY Values DP_UNKNOWN_DEVICE_MODALITY Device modality is unknown DP_SWIPE_DEVICE Swipe mode device DP_AREA_DEVICE Area mode device DP_DEVICE_MODALITY_NUM Count of different modalities defined DP_DEVICE_TECHNOLOGY Defines the fingerprint reader technology. Syntax typedef enum DP_DEVICE_TECHNOLOGY { DP_UNKNOWN_DEVICE_TECHNOLOGY = 0, DP_OPTICAL_DEVICE, DP_CAPACITIVE_DEVICE, DP_THERMAL_DEVICE, DP_PRESSURE_DEVICE, DP_DEVICE_TECHNOLOGY_NUM, } DP_DEVICE_TECHNOLOGY; Values DP_UNKNOWN_DEVICE_TECHNOLOGY The technology used in the device is not known. DP_OPTICAL_DEVICE The technology used in the device is optical. DP_CAPACITIVE_DEVICE The technology used in the device is capacitive. DP_THERMAL_DEVICE The technology used in the device is thermal. DP_PRESSURE_DEVICE The technology used in the device is pressure. DP_DEVICE_TECHNOLOGY_NUM Count of the different technologies defined. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 69 Chapter 5: Core API Reference DP_DEVICE_UID_TYPE DP_DEVICE_UID_TYPE Defines the type of UUID identifying the device. Syntax typedef enum DP_DEVICE_UID_TYPE { DP_PERSISTENT_DEVICE_UID = 0, DP_VOLATILE_DEVICE_UID, } DP_DEVICE_UID_TYPE; Values DP_PERSISTENT_DEVICE_UID Unique hardware identifier. Hardware dependent. DP_VOLATILE_DEVICE_UID Software generated identifier. DP_SAMPLE_QUALITY Defines the quality of the fingerprint sample. Syntax typedef enum DP_SAMPLE_QUALITY { DP_QUALITY_GOOD = 0, DP_QUALITY_NONE = 1, DP_QUALITY_TOOLIGHT = 2, DP_QUALITY_TOODARK = 3, DP_QUALITY_TOONOISY = 4, DP_QUALITY_LOWCONTR = 5, DP_QUALITY_FTRNOTENOUGH = 6, DP_QUALITY_NOCENTRAL = 7, DP_QUALITY_NOFINGER = 8, DP_QUALITY_TOOHIGH = 9, DP_QUALITY_TOOLOW = 10, DP_QUALITY_TOOLEFT = 11, DP_QUALITY_TOORIGHT = 12, DP_QUALITY_TOOSTRANGE = 13, DP_QUALITY_TOOFAST = 14, DP_QUALITY_TOOSKEWED = 15, DP_QUALITY_TOOSHORT = 16, DP_QUALITY_TOOSLOW = 17, } DP_SAMPLE_QUALITY; DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 70 Chapter 5: Core API Reference DP_SAMPLE_QUALITY Values DP_QUALITY_GOOD The image is of good quality. DP_QUALITY_NONE There is no image. DP_QUALITY_TOOLIGHT The image is too light. DP_QUALITY_TOODARK The image is too dark. DP_QUALITY_TOONOISY The image is too noisy. DP_QUALITY_LOWCONTR The image contrast is too low. DP_QUALITY_FTRNOTENOUGH The image does not contain enough information. DP_QUALITY_NOCENTRAL The image is not centered. DP_QUALITY_NOFINGER The scanned object is not a finger. DP_QUALITY_TOOHIGH The finger was too high on the swipe sensor. DP_QUALITY_TOOLOW The finger was too low on the swipe sensor. DP_QUALITY_TOOLEFT The finger was too close to left border of the swipe sensor. DP_QUALITY_TOORIGHT The finger was too close to right border of the swipe sensor. DP_QUALITY_TOOSTRANGE The scan looks strange. DP_QUALITY_TOOFAST The finger was swiped too quickly. DP_QUALITY_TOOSKEWED The image is too skewed. DP_QUALITY_TOOSHORT The image is too short. DP_QUALITY_TOOSLOW The finger was swiped too slowly. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 71 Chapter 5: Core API Reference FT_IMG_QUALITY FT_IMG_QUALITY Defines the image quality. typedef enum { FT_GOOD_IMG, FT_IMG_TOO_LIGHT, FT_IMG_TOO_DARK, FT_IMG_TOO_NOISY, FT_LOW_CONTRAST, FT_UNKNOWN_IMG_QUALITY } FT_IMG_QUALITY, *FT_IMG_QUALITY_PT; Values FT_GOOD_IMG The fingerprint image quality is good. FT_IMG_TOO_LIGHT The fingerprint image is too light. FT_IMG_TOO_DARK The fingerprint image is too dark. FT_IMG_TOO_NOISY The fingerprint image is too blurred. FT_LOW_CONTRAST The fingerprint image contrast is too low. FT_UNKNOWN_IMG_QUALITY The fingerprint image quality is undetermined. FT_FTR_QUALITY Defines the fingerprint features quality. typedef enum { FT_GOOD_FTR, FT_NOT_ENOUGH_FTR, FT_NO_CENTRAL_REGION, FT_UNKNOWN_FTR_QUALITY, FT_AREA_TOO_SMALL } FT_FTR_QUALITY, * FT_FTR_QUALITY_PT; DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 72 Chapter 5: Core API Reference FT_FTR_TYPE Values FT_GOOD_FTR The fingerprint features quality is good. FT_NOT_ENOUGH_FTR There are not enough fingerprint features. FT_NO_CENTRAL_REGION The fingerprint image does not contain the central portion of the finger. FT_UNKNOWN_FTR_QUALITY The fingerprint features quality is undetermined. FT_AREA_TOO_SMALL The fingerprint image area is too small. FT_FTR_TYPE Defines the feature set purpose. Syntax typedef enum { FT_PRE_REG_FTR, FT_REG_FTR, } FT_FTR_TYPE; Values FT_PRE_REG_FTR Value for a fingerprint feature set to be used for enrollment FT_REG_FTR Value for a fingerprint template FT_VER_FTR Value for a fingerprint feature set to be used for verification DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 73 Chapter 5: Core API Reference Type Definitions and Constants Type Definitions and Constants This section defines the One Touch for Windows: C/C++ Edition Core API type definitions and constants. DFLT_FA_RATE MED_SEC_FA_RATE Default value for target FAR. Syntax #define DFLT_FA_RATE MED_SEC_FA_RATE DP_SAMPLE_TYPE_IMAGE Type of fingerprint sample needed. This value is used in the uSampleType parameter of the DPFPCreateAcquisition function (page 38). Syntax #define DP_SAMPLE_TYPE_IMAGE 4 FT_FA_RATE Target false accept rate (FAR). These are percentages, that is, a value of 0.1 means 0.1% = 1/1000. */ Syntax typedef double FT_FA_RATE; HDPOPERATION Operation handle. Syntax typedef unsigned long HDPOPERATION HIGH_SEC_FA_RATE High security/low value for target FAR. Syntax #define HIGH_SEC_FA_RATE 0.0001f DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 74 Chapter 5: Core API Reference LOW_SEC_FA_RATE LOW_SEC_FA_RATE Low security/high value for target FAR. Syntax #define LOW_SEC_FA_RATE 0.0100f MED_SEC_FA_RATE Mid-range security/mid-range value for target FAR. Syntax #define MED_SEC_FA_RATE 0.0010f DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 75 User Interface API Reference 6 This chapter provides a reference to the User Interface API (DPUIAPI) wrapper that simplifies access to the entire functionality available in the Core API described in the previous chapter. The wrapper provides a premade user interface that handles device component, fingerprint enrollment, and fingerprint verification tasks through a few simple functions and two callbacks. Functions DPEnrollUI This function displays the user interface for enrolling the fingerprints and returns after closing of the user interface. It does not store the fingerprint template; instead, it calls the application-defined function DPENROLLMENTPROC for each enrollment or deletion of a fingerprint. Syntax DPFPUI_STDAPI DPEnrollUI(HWND hParentWnd, USHORT usMaxEnrollFingerCount, PULONGpulEnrolledFingersMask, DPENROLLMENTPROC dpEnrollmentProc, LPVOID pUserData ); Parameters hParentWnd [in] Handle to the parent window. usMaxEnrollFingerCount [in] Maximum number of fingers allowed to be enrolled. The value should be between 1 and 10 (both inclusive). pulEnrolledFingersMask [in, out] Bitwise mask that specifies the fingers enrolled. For possible values, see Table 4. dpEnrollmentProc [in] Pointer to the function to be notified when a fingerprint template is available for enrollment. pUserData [in] The pointer to the user data. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 76 Chapter 6: User Interface API Reference DPEnrollUI The pulEnrolledFingersMask parameter contains a combination of the values representing a user’s enrolled fingerprints. For example, if a user’s right index fingerprint and right middle fingerprint are enrolled, the value of this property is 00000000 011000000, or 192. Table 4. Values for the pulEnrolledFingersMask parameter Finger Binary Representation Integer Representation Left little finger 000000000 000000001 1 Left ring finger 000000000 000000010 2 Left middle finger 000000000 000000100 4 Left index finger 000000000 000001000 8 Left thumb 000000000 000010000 16 Right thumb 000000000 000100000 32 Right index finger 000000000 001000000 64 Right middle finger 000000000 010000000 128 Right ring finger 000000000 100000000 256 Right little finger 000000001 000000000 512 Return Values S_OK Function successfully completed. Library DPFPUI.dll DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 77 Chapter 6: User Interface API Reference DPVerifyUI DPVerifyUI Displays the fingerprint verification user interface. The title, text, and banner image of the fingerprint verification user interface can be customized. Syntax DPFPUI_STDAPI DPVerifyUI( HWND hParentWnd, DPVERIFYPROC dpVerifyProc, LPCWSTR lpszCaption, LPCWSTR lpszText, HBITMAP hBanner, LPVOID pUserData ); Parameters hParentWnd [in] Handle to the parent window. dpVerifyProc [in] Pointer to the callback function. lpszCaption [in] The caption of the dialog box. lpszText [in] The text of the dialog box. hBanner [in] The custom banner bitmap. pUserData [in] The pointer to the user data. Return Values S_OK Fingerprint verification user interface successfully displayed. 0x800704c7 Fingerprint verification canceled by user. E_ABORT Fingerprint verification was aborted by callback function. Library DPFPUI.dll DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 78 Chapter 6: User Interface API Reference Callbacks Callbacks A callback is executable code that is passed as an argument to other code. It allows a lower-level software layer to call a subroutine (or function) defined in a higher-level layer. DPENROLLMENTPROC This is the application-provided callback function. This function is called while enrolling a new fingerprint or deleting an enrolled fingerprint. The application should handle the storing of new fingerprint templates for comparison or deleting of an enrolled fingerprint template in this callback. The application can display its own success or error messages. typedef HRESULT (CALLBACK *DPENROLLMENTPROC)( HWND hParentWnd, DP_ENROLLMENT_ACTION enrollmentAction, UINT uiFingerIndex, PDATA_BLOB pFingerprintTemplate, LPVOID pUserData ); Parameters hParentWnd [in] Handle to the parent window. enrollmentAction [in] Specifies whether to enroll the fingerprint or delete it. Values are DP_ENROLLMENT_ADD or DP_ENROLLMENT_DELETE. uiFingerIndex [in] The index of the fingerprint to be enrolled, as defined in ANSI/NISTITL 1. For possible values, see Table 5. pFingerprintTemplate [in] If the enrollmentAction parameter is DP_ENROLLMENT_ADD, then this contains a pointer to the fingerprint template. Otherwise it is NULL. pUserData [in] Pointer to the user data. The uiFingerIndex parameter contains the index value of the finger associated with a fingerprint template to be enrolled or with a fingerprint template to be deleted, as defined in ANSI/NIST-ITL 1. The index values are assigned to the graphical representation of the fingers on the hands in the user interface. All possible values are listed in Table 5. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 79 Chapter 6: User Interface API Reference DPVERIFYPROC Table 5. Values for the uiFingerIndex parameter Finger Index Value Finger Index Value Right thumb 1 Left thumb 6 Right index finger 2 Left index finger 7 Right middle finger 3 Left middle finger 8 Right ring finger 4 Left ring finger 9 Right little finger 5 Left little finger 10 Return Values S_OK The fingerprint template was successfully saved. 0x800704c7 The operation could not be completed. A retry should be performed. Library DPFPUI.dll DPVERIFYPROC This is an application-provided callback function. It is called when a fingerprint feature set is ready for comparison. The application should handle the comparison of this fingerprint feature set against the fingerprint templates. Syntax typedef HRESULT (CALLBACK *DPVERIFYPROC)( HWND hParentWnd, PDATA_BLOB pVerificationFeatureSet, LPVOID pUserData ); Parameters hParentWnd [in] Handle to the parent window. pVerificationFeatureSet [in] Pointer to the fingerprint feature set to be verified. pUserData [in] Pointer to the user data. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 80 Chapter 6: User Interface API Reference DPVERIFYPROC Return Values S_OK The fingerprint feature set to be verified matches one of the fingerprint templates. 0x800704c7 The fingerprint feature set to be verified did not match any of the fingerprint templates. A retry should be performed. Library DPFPUI.dll DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 81 Chapter 6: User Interface API Reference Enumerations Enumerations DP_ENROLLMENT_ACTION Defines the requested fingerprint enrollment action. Syntax typedef enum { DP_ENROLLMENT_ADD, DP_ENROLLMENT_DELETE } DP_ENROLLMENT_ACTION; Values DP_ENROLLMET_ADD Enroll a fingerprint template. DP_ENROLLMET_DELETE Delete a fingerprint template. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 82 Events Notifications and Return Codes 7 This chapter defines the notification events and return codes used within the One Touch for Windows: C/C++ Edition SDK. Events Notifications During the creation of an operation, the client application specifies the handle of the window to be notified on operation-related events as well as the window message to be sent as a notification. The wParam of the message specifies the event type. The value of lParam is event-specific. Defines Description 0 WN_COMPLETED Operation completed successfully. The fingerprint image is returned in lParam as pointer to DATA_BLOB structure. 1 WN_ERROR An error occurred. The error code is returned in lParam. 2 WN_DISCONNECT The device has been disconnected. The pointer to device UID is returned in lParam. 3 WN_RECONNECT The device has been reconnected. The pointer to device UID is returned in lParam. 4 WN_SAMPLEQUALITY Provides information about the quality of the fingerprint image. lParam contains the fingerprint image quality listed in the enum of type DP_SAMPLE_QUALITY. 5 WN_FINGER_TOUCHED The device has been touched. 6 WN_FINGER_GONE The finger has been removed from the device. 7 WN_IMAGE_READY An image is ready from the device. The pointer to device UID is returned in lParam. WN_OPERATION_STOPPED Sent when an operation was stopped by calling DPFPStopAcquisition. Value 10 DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 83 Chapter 7: Events Notifications and Return Codes Return Codes Return Codes Value Return Code Description 0 FT_OK The function succeeded. 1 FT_WRN_NO_INIT The fingerprint feature extraction module or the fingerprint comparison module are not initialized. 8 FT_WRN_INTERNAL An internal error occurred. 9 FT_WRN_KEY_NOT_FOUND The fingerprint feature extraction module or the fingerprint comparison module could not find an initialization setting. 11 FT_WRN_UNKNOWN_DEVICE The fingerprint reader is not known. 12 FT_WRN_TIMEOUT The function has timed out. -1 FT_ERR_NO_INIT The fingerprint feature extraction module or the fingerprint comparison module is not initialized. -2 FT_ERR_INVALID_PARAM One or more parameters are not valid. -3 FT_ERR_NOT_IMPLEMENTED The called function was not implemented -4 FT_ERR_IO A generic I/O file error occurred. -7 FT_ERR_NO_MEMORY There is not enough memory to perform the action. -8 FT_ERR_INTERNAL An unknown internal error occurred. -9 FT_ERR_BAD_INI_SETTING Initialization settings are corrupted. -10 FT_ERR_UNKNOWN_DEVICE The fingerprint reader is not known. -11 FT_ERR_INVALID_BUFFER A buffer is not valid. -16 FT_ERR_FEAT_LEN_TOO_SHORT The specified fingerprint feature set or fingerprint template buffer size is too small. -17 FT_ERR_INVALID_CONTEXT The given context is not valid. -29 FT_ERR_INVALID_FTRS_TYPE The feature set purpose is not valid. -32 FT_ERR_FTRS_INVALID Decrypted fingerprint features are not valid. Decryption may have failed. -33 FT_ERR_UNKNOWN_EXCEPTION An unknown exception occurred. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 84 Developing Citrix-aware applications 8 This SDK includes support for fingerprint authentication through Windows Terminal Services (including Remote Desktop Connection) and through a Citrix connection to Metaframe Presentation Server using a client from the Citrix Presentation Server Client package. The following types of Citrix clients are supported for fingerprint authentication: Program Neighborhood Program Neighborhood Agent Web Client In order to utilize this support, your application (or the end-user) will need to copy a file to the client computer and register it. The name of the file is DPICACnt.dll, and it is located in the "Misc\Citrix Support" folder in the product package. To deploy the DigitalPersona library for Citrix support: 1. Locate the DPICACnt.dll file in the "Misc\Citrix Support" folder of your software package.. 2. Copy the file to the folder on the client computer where the Citrix client components are located (i.e. for the Program Neighborhood client it might be the "Program Files\Citrix\ICA Client" folder). 3. Using the regsvr32.exe program, register the DPICACnt.dll library. If you have several Citrix clients installed on a computer, deploy the DPICACnt.dll library to the Citrix client folder for each client. If your application will also be working with Pro Workstation 4.2.0 and later or Pro Kiosk 4.2.0 and later, you will need to inform the end-user’s administrator that they will need to enable two Group Policy Objects (GPOs), "Use DigitalPersona Pro Server for authentication" and "Allow Fingerprint Data Redirection". For information on how to enable these policies, see the "DigitalPersona Pro for AD Guide.pdf" located in the DigitalPersona Pro Server software package. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 85 9 Redistribution You may redistribute the files in the RTE\Install and the Redist folders in any of the One Touch for Windows SDK software packages to your end users pursuant to the terms of the end user license agreement (EULA), attendant to the software and located in the Docs folder in the SDK software package. When you develop a product based on the One Touch for Windows SDK, you need to provide the redistributables to your end users. These files are designed and licensed for use with your application. You may include the installation files located in the RTE\Install folder in your application, or you may incorporate the redistributables directly into your installer. You may also use the merge modules located in the Redist folder in the SDK software package to create your own MSI installer. Per the terms of the EULA, DigitalPersona grants you a non-transferable, non-exclusive, worldwide license to redistribute, either directly or via the respective merge modules, the following files contained in the RTE\Install and Redist folders in the One Touch for Windows SDK software package to your end users and to incorporate these files into derivative works for sale and distribution: RTE\Install Folder InstallOnly.bat Setup.exe Setup.msi UninstallOnly.bat Redist Folder The following table indicates which merge modules are required to support each development language and OS. Merge module C/C++ 32-bit COM/ActiveX .NET Java 64-bit 32-bit 64-bit 32-bit 64-bit 32-bit 64-bit DpDrivers.msm X X X X X X X X DpPolicies_OTW.msm X X X X X X X X DpCore.msm X X X X X X X X DpCore_x64.msm DpProCore.msm DpProCore_x64.msm X X X X X DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide X X X X X X X 86 Chapter 9: Redistribution Redist Folder Merge module DpFpRec.msm C/C++ X DpFpRec_x64.msm DpFpUI.msm DpFpUI_x64.msm COM/ActiveX X X X X X DpOTCOMActX_x64.msm X X X X X X X Java X X X DpOTCOMActX.msm .NET X X X X X X X X X X DpOTDotNet.msm X X DpOTShrDotNet.msm X X DpOTJni.msm X DpOTJni_x64.msm DpOTJava.msm X X X X The merge modules, and the files that they contain, are listed below alphabetically. DpCore.msm This merge module contains the following files: Dpcoper2.dll Dpdevice2.dll Dpfpapi.dll Dphostw.exe Dpmux.dll Dpmsg.dll Dpclback.dll DPCrStor.dll DpCore_x64.msm This merge module contains the following files: Dpcoper2.dll Dpdevice2.dll Dpfpapi.dll Dphostw.exe DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 87 Chapter 9: Redistribution Dpmux.dll Dpclback.dll DPCrStor.dll x64\Dpmsg.dll Redist Folder DpDrivers.msm This merge module contains the following files: Dpd00701x64.dll Dpdevctlx64.dll Dpdevdatx64.dll Dpersona_x64.cat Dpersona_x64.inf Dpi00701x64.dll Dpinst32.exe Dpinst64.exe Usbdpfp.sys Dpersona.cat Dpersona.inf Dpdevctl.dll Dpdevdat.dll Dpk00701.sys Dpk00303.sys Dpd00303.dll Dpd00701.dll Dpi00701.dll DpFpRec.msm This merge module contains the following files: Dphftrex.dll Dphmatch.dll DpFpRec_x64.msm This merge module contains the following files: \Dphftrex.dll DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 88 Chapter 9: Redistribution \Dphmatch.dll \Dphftrex.dll \Dphmatch.dll Redist Folder DPFpUI.msm This merge module contains the following file: Dpfpui.dll DPFpUI_x64.msm This merge module contains the following file: \Dpfpui.dll \Dpfpui.dll DpProCore.msm This merge module contains the following files: Dpdevts.dll Dpsvinfo2.dll Dptsclnt.dll •DpOTCOMActX.msm This merge module contains the following files: DPFPShrX.dll DPFPDevX.dll DPFPEngX.dll DPFPCtlX.dll •DpOTCOMActX_x64.msm This merge module contains the following files: DPFPShrX.dll DPFPDevX.dll DPFPEngX.dll DPFPCtlX.dll x64\DpFpCtlX.dll x64\DpFpDevX.dll x64\DpFpEngX.dll x64\DpFpShrX.dll DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 89 Chapter 9: Redistribution Fingerprint Reader Documentation •DpOTDotNET.msm This merge module contains the following files: DPFPDevNET.dll DPFPEngNET.dll DPFPVerNET.dll DPFPGuiNET.dll DPFPCtlXTypeLibNET.dll DPFPCtlXWrapperNET.dll DPFPShrXTypeLibNET.dll DpOTShrDotNET.msm This merge module contains the following files: DPFPShrNET.dll Fingerprint Reader Documentation You may redistribute the documentation included in the Redist folder of any One Touch for Windows SDK software package to your end users pursuant to the terms of this section and of the EULA, attendant to the software and located in the Docs folder in the SDK software package. Hardware Warnings and Regulatory Information If you distribute DigitalPersona U.are.U fingerprint readers to your end users, you are responsible for advising them of the warnings and regulatory information included in the Warnings and Regulatory Information.pdf file in the Redist folder of any One Touch for Windows SDK software package. You may copy and redistribute the language, including the copyright and trademark notices, set forth in the Warnings and Regulatory Information.pdf file. Fingerprint Reader Use and Maintenance Guide The DigitalPersona U.are.U fingerprint reader use and maintenance guides, DigitalPersona Reader Maintenance Touch.pdf and DigitalPersona Reader Maintenance Swipe.pdf, are located in the Redist folder in the One Touch for Windows SDK software package. You may copy and redistribute the DigitalPersona Reader Maintenance Touch.pdf and the DigitalPersona Reader Maintenance Swipe.pdf files, including the copyright and trademark notices, to those who purchase a U.are.U module or fingerprint reader from you. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 90 A Setting the False Accept Rate This appendix is for developers who want to specify a false accept rate (FAR) other than the default used by the DigitalPersona Fingerprint Recognition Engine. False Accept Rate (FAR) The false accept rate (FAR), also known as the security level, is the proportion of fingerprint verification operations by authorized users that incorrectly returns a comparison decision of match. The FAR is typically stated as the ratio of the expected number of false accept errors divided by the total number of verification attempts, or the probability that a biometric system will falsely accept an unauthorized user. For example, a probability of 0.001 (or 0.1%) means that out of 1,000 verification operations by authorized users, a system is expected to return 1 incorrect match decision. Increasing the probability to, say, 0.0001 (or 0.01%) changes this ratio from 1 in 1,000 to 1 in 10,000. Increasing or decreasing the FAR has the opposite effect on the false reject rate (FRR), that is, decreasing the rate of false accepts increases the rate of false rejects and vice versa. Therefore, a high security level may be appropriate for an access system to a secured area, but may not be acceptable for a system where convenience or easy access is more significant than security. Representation of Probability Probability should always be in the range from 0 to 1. Some common representations of probability are listed in column one of Table 2. The value in the third row represents the current default value used by the DigitalPersona Fingerprint Recognition Engine, which offers a mid-range security level. The value in the second row represents a typical high FAR/low security level, and the value in the fourth row represents a typical low FAR/high security level. Table 2. Common values of probability Decimal (0 to 1) Percent (0 to 100%) Fraction (1/n1 to 1) 0.001 0.1% 1/1000 0.0001 0.01% 1/10000 0.00001 0.001% 1/100000 0.000001 0.0001% 1/1000000 1. Where n is equal to infinity. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 91 Appendix A: Setting the False Accept Rate Requested FAR You specify the value of the FAR using the targetFar parameter of the MC_setSecurityLevel function. While you can request any value from 0 to 100%, it is not guaranteed that the Engine will fulfill the request exactly. The Engine implementation makes the best effort to accommodate the request by internally setting the value closest to that requested within the restrictions it imposes for security. The following sample code sets the FAR to a value of 0.005%. ... //Sets the FAR to 0.005% rc = MC_setSecurityLevel(mcContext, 0.005); Achieved FAR The actual value of the FAR achieved for a particular verification operation is returned in the achievedFar parameter of MC_verifyFeaturesEx function as a probability value between 0 and 1. This value is typically much smaller than the requested FAR due to the accuracy of the DigitalPersona Fingerprint Recognition Engine. The requested FAR specifies the maximum value of the FAR to be used by the Engine in making the verification decision. The actual FAR achieved by the Engine when conducting a legitimate comparison is usually a much lower value. The Engine implementation may choose the range and granularity for the achieved FAR. If you make use of this value in your application, for example, by combining it with other achieved FARs, you should use it with caution, as the granularity and range may change between versions of DigitalPersona SDKs without notice. Testing Although you may achieve the desired values of the FAR in your development environment, it is not guaranteed that your application will achieve the required security level in real-world situations. Even though the Engine is designed to make its best effort to accurately implement the probability estimates, it is recommended that you conduct system-level testing to determine the actual operating point and accuracy in a given scenario. This is even more important in systems where multiple biometric factors are used for identification. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 92 Platinum SDK Enrollment Template Conversion B This appendix is for Platinum SDK users who need to convert their Platinum SDK registration templates to a format that is compatible with the SDKs that are listed in Fingerprint Template Compatibility on page 5. Sample code is included below for C++ and Visual Basic. Platinum SDK Enrollment Template Conversion for Microsoft Visual C++ Use Code Sample 1 in applications developed in Microsoft Visual C++ to convert DigitalPersona Platinum SDK registration templates. Code Sample 1. Platinum SDK Template Conversion for Microsoft Visual C++ #import "DpSdkEng.tlb" no_namespace, named_guids, raw_interfaces_only #include bool PlatinumTOGold(unsigned char* platinumBlob, int platinumBlobSize, unsigned char* goldBlob, int goldBufferSize, int* goldTemplateSize) { // Load the byte array into FPTemplate Object // to create Platinum template object SAFEARRAYBOUND rgsabound; rgsabound.lLbound = 0; rgsabound.cElements = platinumBlobSize; CComVariant varVal; varVal.vt = VT_ARRAY | VT_UI1; varVal.parray = SafeArrayCreate(VT_UI1, 1, &rgsabound); unsigned char* data; if (FAILED(SafeArrayAccessData(varVal.parray, (void**)&data))) return false; memcpy(data, platinumBlob, platinumBlobSize); SafeArrayUnaccessData(varVal.parray); IFPTemplatePtr pIFPTemplate(__uuidof(FPTemplate)); if (pIFPTemplate == NULL) return false; DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 93 Appendix B: Platinum SDK Enrollment Template Conversion Code Sample 1. Platinum SDK Template Conversion for Microsoft Visual C++ (continued) AIErrors error; if (FAILED(pIFPTemplate->Import(varVal, &error))) return false; if (error != Er_OK) return false; // Now pIFPTemplate contains the Platinum template. // Use TemplData property to get the Gold Template out. CComVariant varValGold; if (FAILED(pIFPTemplate->get_TemplData(&varValGold))) return false; unsigned char* dataGold; if (FAILED(SafeArrayAccessData(varValGold.parray, (void**)&dataGold))) return false; int blobSizeRequired = varValGold.parray->rgsabound->cElements * varValGold.parray->cbElements; *goldTemplateSize = blobSizeRequired; if (goldBufferSize < blobSizeRequired) { SafeArrayUnaccessData(varValGold.parray); return false; } memcpy(goldBlob, dataGold, blobSizeRequired); SafeArrayUnaccessData(varValGold.parray); return true; } DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 94 Appendix B: Platinum SDK Enrollment Template Conversion Platinum SDK Enrollment Template Conversion for Visual Basic 6.0 Use Code Sample 2 in applications developed in Microsoft Visual Basic 6.0 to convert DigitalPersona Platinum SDK enrollment templates. Code Sample 2. Platinum SDK Template Conversion for Visual Basic 6.0 Public Function PlatinumToGold(platinumTemplate As Variant) As Byte() Dim pTemplate As New FPTemplate Dim vGold As Variant Dim bGold() As Byte Dim er As DpSdkEngLib.AIErrors er = pTemplate.Import(platinumTemplate) If er <> Er_OK Then PlatinumToGold = "": Exit Function vGold = pTemplate.TemplData bGold = vGold PlatinumToGold = bGold End Function DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 95 Get/Set Device Parameters C This appendix is for developers who want to specify and retrieve a device-specific private key on any of DigitalPersona’s family of fingerprint readers (4000B and later). Overview All of DigitalPersona’s current family of fingerprint readers, beginning with the U.are.U 4000B series, have a dedicated memory location that can be used to set a private key on the device and then retrieve the key programatically. This feature can be used to “lock in” the use of a specific device with your applications. This is most often used to ensure that a specific feature set and/or tested hardware device is the one that your application expects. Parameters There are two Device Parameter functions accessible through the DPFPAPI library (DPFPAPI.dll); DPFPSetDeviceParameter() and DPFPGetDeviceParameter(). The prototypes for these functions are available in dpfpapi.h, and are shown below for your convenience. DPFP_STDAPI DPFPSetDeviceParameter( REFGUID DevUID, unsigned long ulParamID, const DATA_BLOB* pData ); DPFP_STDAPI DPFPGetDeviceParameter( REFGUID DevUID, unsigned long ulParamID, DATA_BLOB* pData ); These two functions set and get (read) the value stored on the fingerprint reader. They both require the use of a device GUID, which can be retrieved through DPFPEnumerateDevices (see page 41). A parameter ID is also needed (ulParamID). The currently supported parameter IDs are: FT_SET_CLIENT_PRIVATE_KEY - Writes a private key to a device. The device then needs to be recycled prior to reading the value. FT_GET_CLIENT_PRIVATE_KEY - Reads the private key from a device. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 96 Glossary biometric system An automatic method of identifying a person based on the person’s unique physical and/or behavioral traits, such as a fingerprint or an iris pattern, or a handwritten signature or a voice. against their own fingerprint template(s) where an incorrect decision of non-match is returned. comparison The estimation, calculation, or measurement of similarity or dissimilarity between fingerprint feature set(s) and fingerprint template(s). fingerprint An impression of the ridges on the skin of a finger. comparison score The numerical value resulting from a comparison of fingerprint feature set(s) with fingerprint template(s). Comparison scores can be of two types: similarity scores or dissimilarity scores. context A temporary object used for passing data between the steps of multi-step programming operations. DigitalPersona Fingerprint Recognition Engine A set of mathematical algorithms formalized to determine whether a fingerprint feature set matches a fingerprint template according to a specified security level in terms of the false accept rate (FAR). enrollee See fingerprint data subject. enrollment See fingerprint enrollment. false accept rate (FAR) The proportion of fingerprint verification transactions by fingerprint data subjects not enrolled in the system where an incorrect decision of match is returned. false reject rate (FRR) The proportion of fingerprint verification transactions by fingerprint enrollment subjects features See fingerprint features. fingerprint capture device A device that collects a signal of a fingerprint data subject’s fingerprint characteristics and converts it to a fingerprint sample. A device can be any piece of hardware (and supporting software and firmware). In some systems, converting a signal from fingerprint characteristics to a fingerprint sample may include multiple components such as a camera, photographic paper, printer, digital scanner, or ink and paper. fingerprint characteristic Biological finger surface details that can be detected and from which distinguishing and repeatable fingerprint feature set(s) can be extracted for the purpose of fingerprint verification or fingerprint enrollment. fingerprint data Either the fingerprint feature set, the fingerprint template, or the fingerprint sample. fingerprint data storage subsystem A storage medium where fingerprint templates are stored for reference. Each fingerprint template is associated with a fingerprint enrollment subject. Fingerprint templates can be stored within a fingerprint capture device; on a portable medium such as a smart card; locally, such as on a personal computer or a local server; or in a central database. fingerprint data subject A person whose fingerprint sample(s), fingerprint feature set(s), or fingerprint template(s) are present within the fingerprint recognition system at any time. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 97 Glossary Fingerprint data can be either from a person being recognized or from a fingerprint enrollment subject. fingerprint reader A device that collects data from a person’s fingerprint features and converts it to a fingerprint image. fingerprint enrollment a. In a fingerprint recognition system, the initial process of collecting fingerprint data from a person by extracting the fingerprint features from the person’s fingerprint image for the purpose of enrollment and then storing the resulting data in a template for later comparison. fingerprint recognition system A biometric system that uses the distinctive and persistent characteristics from the ridges of a finger, also referred to as fingerprint features, to distinguish one finger (or person) from another. b. The system function that computes a fingerprint template from a fingerprint feature set(s). fingerprint enrollment subject The fingerprint data subject whose fingerprint template(s) are held in the fingerprint data storage subsystem. fingerprint feature extraction The system function that is applied to a fingerprint sample to compute repeatable and distinctive information to be used for fingerprint verification or fingerprint enrollment. The output of the fingerprint feature extraction function is a fingerprint feature set. fingerprint features The distinctive and persistent characteristics from the ridges on the skin of a finger. See also fingerprint characteristics. fingerprint feature set The output of a completed fingerprint feature extraction process applied to a fingerprint sample. A fingerprint feature set(s) can be produced for the purpose of fingerprint verification or for the purpose of fingerprint enrollment. fingerprint image A digital representation of fingerprint features prior to extraction that are obtained from a fingerprint reader. See also fingerprint sample. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide fingerprint sample The analog or digital representation of fingerprint characteristics prior to fingerprint feature extraction that are obtained from a fingerprint capture device. A fingerprint sample may be raw (as captured), or intermediate (after some processing). fingerprint template The output of a completed fingerprint enrollment process that is stored in a fingerprint data storage subsystem. Fingerprint templates are stored for later comparison with a fingerprint feature set(s). fingerprint verification a. In a fingerprint recognition system, the process of extracting the fingerprint features from a person’s fingerprint image provided for the purpose of verification, comparing the resulting data to the template generated during enrollment, and deciding if the two match. b. The system function that performs a one-to-one comparison and makes a decision of match or nonmatch. match The decision that the fingerprint feature set(s) and the fingerprint template(s) being compared are from the same fingerprint data subject. non-match The decision that the fingerprint feature set(s) and the fingerprint template(s) being compared are not from the same fingerprint data subject. 98 Glossary one-to-one comparison The process in which recognition fingerprint feature set(s) from one or more fingers of one fingerprint data subject are compared with fingerprint template(s) from one or more fingers of one fingerprint data subject. repository See fingerprint data storage subsystem. security level The target false accept rate for a comparison context. See also FAR. verification See fingerprint verification. DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 99 Index A additional resources 3 online resources 4 related documentation 4 Allow Fingerprint Data Redirection 85 audience for this guide 2 B biometric system defined 97 explained 17 bold typeface, uses of 3 C chapters, overview of 2 Citrix 1 Citrix Web Client 1 Citrix, developing for 85 comparison context creating function for 56 in typical enrollment workflow 25 in typical verification workflow 30 destroying function for 57 in typical enrollment workflow 29 in typical verification workflow 34 comparison module, purpose of 21 comparison, defined 97 compatible fingerprint templates See fingerprint template compatibility context 25 creating comparison context function for 56 in typical enrollment workflow 25 in typical verification workflow 30 feature extraction context in typical enrollment workflow 25 in typical verification workflow 30 defined 97 destroying comparison context function for 57 in typical enrollment workflow 29 in typical verification workflow 34 feature extraction context in typical enrollment workflow 29 DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide in typical verification workflow 34 conventions, document See document conventions converting Platinum SDK enrollment templates for Microsoft Visual Basic 6.0 95 for Microsoft Visual C++ 93 Core API Reference 35 Courier bold typeface, use of 3 creating comparison context function for 56 in typical enrollment workflow 25 in typical verification workflow 30 feature extraction context in typical enrollment workflow 25 in typical verification workflow 30 fingerprint feature set function for 51 in typical enrollment workflow 27 in typical verification workflow 32 fingerprint template function for 60 in typical enrollment workflow 29 D destroying comparison context function for 57 in typical enrollment workflow 29 in typical verification workflow 34 feature extraction context in typical enrollment workflow 29 in typical verification workflow 34 device component purpose of 21 workflow 22–23 DFLT_FA_RATE constant, defined 74 DigitalPersona Developer Connection Forum, URL to 4 DigitalPersona Fingerprint Recognition Engine 17 DigitalPersona fingerprint recognition system 18 illustrated 19 DigitalPersona products, supported 4 document conventions 3 notational 3 typographical 3 documentation, related 4 DP_ACQUISITION_PRIORITY enumeration, defined 68 100 Index DP_DEVICE_INFO data structure, defined 64 DP_DEVICE_MODALITY enumeration, defined 68 DP_DEVICE_TECHNOLOGY enumeration, defined 69 DP_DEVICE_UID_TYPE enumeration, defined 70 DP_DEVICE_VERSION data structure, defined 64 DP_ENROLLMENT_ACTION enumeration, defined 82 DP_HW_INFO data structure, defined 65 DP_PRODUCT_VERSION data structure, defined 66 DP_SAMPLE_QUALITY enumeration, defined 70 DP_SAMPLE_TYPE_IMAGE constant, defined 74 DPENROLLMENTPROC callback, defined 79 DPEnrollUI function, defined 76 DPFPBufferFree function, defined 38 DPFPCreateAcquisition function defined 38 using in device component workflow 23 DPFPDestroyAcquisition function defined 40 using in device component workflow 23 DPFPEnumerateDevices function defined 41 using in device component workflow 23 DPFPGetDevice Parameter 36 DPFPGetDeviceInfo function, defined 41 DPFPGetVersion function, defined 44 DPFPInit function defined 44 using in device component workflow 23 DPFPSetDeviceParameter 36 DPFPStartAcquisition function defined 45 using in device component workflow 23 DPFPStopAcquisition function defined 46 using in device component workflow 23 DPFPTerm function defined 46 using in device component workflow 23 DPVERIFYPROC callback, defined 80 DPVerifyUI function, defined 78 driver 18 E Engine See DigitalPersona Fingerprint Recognition Engine enrollee 18 enrollment See fingerprint enrollment enrollment mask, possible values for 77 DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide E F false accept rate 19 defined 97 setting target for comparison context function for 58 in typical verification workflow 30 setting to value other than the default 91 false negative decision 19 false negative decision, proportion of 19 See also false accept rate false positive decision 19 false positive decision, proportion of 19 See also false accept rate false positives and false negatives 19 false reject rate 19 defined 97 FAR See false accept rate feature extraction context creating in typical enrollment workflow 25 in typical verification workflow 30 destroying in typical enrollment workflow 29 in typical verification workflow 34 important notice not to set security level for 58 feature extraction module, purpose of 21 features See fingerprint features files and folders installed for RTE 32-bit installation 15 64-bit installation 16 installed for SDK 13 fingerprint 17 defined 97 fingerprint capture device 18 defined 97 See fingerprint reader fingerprint characteristics, defined 97 fingerprint comparison module See comparison module fingerprint data 18 defined 97 fingerprint data storage subsystem, defined 97 fingerprint enrollment 18 defined 98 typical workflow 24–29 clean-up 29 fingerprint feature set creation 27 101 Index fingerprint template creation 29 initialization 25 fingerprint feature extraction defined 98 performing function for 51 in typical enrollment workflow 27, 32 fingerprint feature extraction module See feature extraction module fingerprint feature set 18 creating function for 51 in typical enrollment workflow 27 in typical verification workflow 32 defined 98 retrieving number required for fingerprint template creation function for 56 in typical enrollment workflow 26 retrieving size of in typical enrollment workflow 26 in typical verification workflow 30 fingerprint features, defined 98 fingerprint image preparing for display function for 53 in typical enrollment workflow 27 in typical verification workflow 32 fingerprint image, defined 98 fingerprint reader 18 defined 98 redistributing documentation for 90 use and maintenance guides, redistributing 90 fingerprint recognition 18 fingerprint recognition component 24 purpose of 21 fingerprint recognition system 17 defined 98 See also DigitalPersona fingerprint recognition system fingerprint recognition, guide to 4 fingerprint sample, defined 98 See fingerprint image fingerprint template 18 creating function for 60 in typical enrollment workflow 29 defined 98 retrieving size of function for 59 in typical enrollment workflow 26 DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide F fingerprint template compatibility 5 fingerprint verification 18 defined 98 performing function for 62 in typical verification workflow 34 typical workflow 29–34 clean-up 34 comparison and decision 34 fingerprint feature set creation 32 initialization 30 folders and files installed for RTE 32-bit installation 15 64-bit installation 16 installed for SDK 13 FRR See false reject rate FT_FA_RATE data type, defined 74 FT_FTR_QUALITY enumeration, defined 72 FT_FTR_TYPE enumeration, defined 73 FT_IMG_QUALITY enumeration, defined 72 FT_PRE_REG_FTR value defined 51 using in typical enrollment workflow 26, 27 FT_REG_FTR value defined 60 using in typical enrollment workflow 26 FT_VER_FTR value defined 51 using in typical verification workflow 30, 32 FT_VERSION_INFO data structure, defined 66 FX_closeContext function defined 49 using in typical enrollment workflow 29 in typical verification workflow 34 FX_createContext function defined 48 using in typical enrollment workflow 25 in typical verification workflow 30 FX_extractFeatures function defined 51 using in typical enrollment workflow 27 in typical verification workflow 32 FX_getDisplayImage function defined 53 using 102 Index in typical enrollment workflow 27 in typical verification workflow 32 FX_getFeaturesLen function defined 50 using in typical enrollment workflow 26 in typical verification workflow 30 FX_getVersionInfo function defined 48 FX_init function defined 47 using in typical enrollment workflow 25 in typical verification workflow 30 FX_terminate function defined 49 using in typical enrollment workflow 29 in typical verification workflow 34 G Group Policy Objects 85 GUID_NULL value defined 39 using in device component workflow 23 H hardware warnings and regulatory information, redistributing 90 HDPOPERATION data type, defined 74 HIGH_SEC_FA_RATE constant, defined 74 I image See fingerprint image important notation, defined 3 important notice do not specify security level for feature extraction context 58 read Appendix A before setting targetFar parameter 58 initializing comparison module function for 55 in typical enrollment workflow 25 in typical verification workflow 30 feature extraction module in typical enrollment workflow 25 in typical verification workflow 30 installation files for redistributables redistributing 86 DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide G installing RTE 14 RTE silently 16 italics typeface, uses of 3 L LOW_SEC_FA_RATE constant, defined 75 M match 19 defined 98 MC_closeContext function defined 57 using in typical enrollment workflow 29 in typical verification workflow 34 MC_createContext function defined 56 using in typical enrollment workflow 25 in typical verification workflow 30 MC_generateRegFeatures function defined 60 using in typical enrollment workflow 29 MC_getFeaturesLen function defined 59 using in typical enrollment workflow 26 MC_getSecurityLevel function, defined 57 MC_getSettings function defined 56 using in typical enrollment workflow 26 MC_getVersionInfo function, defined 55 MC_init function defined 55 using in typical enrollment workflow 25 in typical verification workflow 30 MC_setSecurityLevel function defined 58 using in typical verification workflow 30 MC_SETTINGS data structure, defined 67 MC_terminate function defined 59 using in typical enrollment workflow 29 in typical verification workflow 34 MC_verifyFeaturesEx function defined 62 using in typical verification workflow 34 MED_SEC_FA_RATE constant, defined 74, 75 merge modules 103 Index contents of 86 redistributing 86 Metaframe Presentation Server 1 N non-match 19 defined 98 notational conventions 3 note notation, defined 3 number of required fingerprint feature sets for fingerprint template creation, retrieving function for 56 in typical enrollment workflow 26 O one-to-one comparison 19 defined 99 online resources 4 overview of chapters 2 of concepts and terminology 17 P Platinum SDK enrollment template conversion 93 product compatibility See fingerprint template compatibility Program Neighborhood 1 Program Neighborhood Agent 1 R Redist folder, redistributing contents of 86 redistributables, redistributing 86 redistribution of files 86 regulatory information, requirement to advise end users of 90 releasing resources associated with comparison module function for 59 in typical enrollment workflow 29 in typical verification workflow 34 resources associated with feature extraction module in typical enrollment workflow 29 in typical verification workflow 34 remote authentication 1 Remote Desktop Connection 1 repository 18 requirements, system See system requirements resources, additional See additional resources resources, online See online resources DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide N retrieving number of required fingerprint feature sets for fingerprint template creation function for 56 in typical enrollment workflow 26 security level of comparison context, function for 57 size of fingerprint feature set in typical enrollment workflow 26 in typical verification workflow 30 size of fingerprint template function for 59 in typical enrollment workflow 26 software version information comparison module, function for 55 RTE installing 14 installing/uninstalling silently 16 redistributing 86 RTE\Install folder, redistributing contents of 86 runtime environment See RTE S sample code for converting Platinum SDK enrollment templates for Microsoft Visual Basic 6.0 95 for Microsoft Visual C++ 93 SDK components of 21 files and folders installed 13 security level 19 retrieving for comparison context, function for 57 setting for comparison context function for 58 in typical verification workflow 30 silently installing RTE 16 size of fingerprint feature set, retrieving in typical enrollment workflow 26 in typical verification workflow 30 size of fingerprint template, retrieving function for 59 in typical enrollment workflow 26 software version information retrieving for comparison module, function for 55 supported DigitalPersona products 4 system requirements 4 T target audience for this guide 2 target false accept rate for comparison context retrieving, function for 57 104 Index U setting function for 58 in typical verification workflow 30 targetFar parameter defined 57 important notice to read Appendix A before setting 58 template compatibility See fingerprint template compatibility terminating comparison module function for 59 in typical enrollment workflow 29 in typical verification workflow 34 feature extraction module in typical enrollment workflow 29 in typical verification workflow 34 typefaces, uses of bold 3 Courier bold 3 italics 3 typographical conventions 3 U uninstalling RTE silently 16 updates for DigitalPersona software products, URL for downloading 4 URLs DigitalPersona Developer Connection Forum 4 Updates for DigitalPersona Software Products 4 use and maintenance guides for fingerprint readers, redistributing 90 Use DigitalPersona Pro Server for authentication 85 using device component API functions 23 fingerprint recognition component API functions 24– 34 V verification See fingerprint verification W Windows Terminal Services 1 DigitalPersona One Touch for Windows SDK: C/C++ Edition | Developer Guide 105
Source Exif Data:
File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.6 Linearized : Yes XMP Toolkit : Adobe XMP Core 4.2.2-c063 53.352624, 2008/07/30-18:12:18 Creator Tool : FrameMaker 9.0 Create Date : 2010:06:22 11:40:43Z Modify Date : 2010:06:22 11:45:39-07:00 Metadata Date : 2010:06:22 11:45:39-07:00 Format : application/pdf Title : OneTouchforWindowsSDKC-C++.book Creator : LenH Producer : Acrobat Distiller 8.1.0 (Windows) Document ID : uuid:6992e9d2-d19c-4d76-8ce5-62533e382360 Instance ID : uuid:4c726d3a-f728-4839-a577-6951cde5245d Page Mode : UseOutlines Page Count : 111 Author : LenHEXIF Metadata provided by EXIF.tools