SecItemCopyMatching
返回一个或多个匹配查询搜索的 keychain 项目,或者拷贝指定 keychain 项目的属性。
声明:OSStatus SecItemCopyMatching ( CFDictionaryRef query, CFTypeRef *result );
此函数有两个参数:
-
query
,包含一个项目类别的描述(Keychain Item Class and Values)和查找可选属性的字典。详见 Keychain Services Constants 对于当前定义的搜索属性的描述。 -
result
, 已找到项目的一个引用。result
确切的类型取决于查询时搜索属性的类型,下面会有具体讨论。
通过给查询字典添加键值对来指定一个搜索属性。
典型的查询包含有:
-
类别的 key (Item Class Key Constant) 和类的常量值(Item Class Value Constants),这些规定了要查询的项目类别。
-
一个或多个属性键值对(Attribute Item Keys and Values),规定了需要匹配的属性数据。
-
一个或多个搜索键值对(Search Keys),规定了进一步细化搜索的值。
-
一个返回值键值对(Search Results Constants),规定了你想要得到的返回类型。
指定的返回类型(Search Results Constants)如下:
-
用
kCFBooleanTrue
的值来指定kSecReturnData
去得到对应项目数据的引用(CFDataRef 类型)。 -
用
kCFBooleanTrue
的值指定kSecReturnAttributes
来获得包含对应项目的属性的字典(CFDictionaryRef
类型)。 -
用
kCFBooleanTrue
的值指定kSecReturnRef
来获得对应项目的引用(SecKeychainItemRef
,SecKeyRef
,SecCertificateRef
或SecIdentityRef
类型)。 -
用
kCFBooleanTrue
的值指定kSecReturnPersistentRef
来获得对应项目的持久引用(CFDataRef
类型)。注意这和常规的引用不同,持久引用可能会存储到磁盘中或在处理过程中被传递。
如果一个或多个返回类型被指定了(例如 kSecReturnRef
和 kSecReturnAttributes
),返回的结果是一个包含所有请求数据的字典(CFDictionaryRef
类型的字典)。
默认的,这个函数只会返回第一次匹配到的。为了在同一时间得到更多的匹配项,要用大于 1 的值来指定搜索键 kSecMatchLimit
。随后这个返回结果将会是包含许多匹配项的 CFArrayRef
类型对象。