PKCS#11 v2.40の作成者は、APIがアイテムの可変長リストを返すときに共通のパターンを利用します。 C_GetSlotList
およびC_GetMechanismList
などのAPIでは、アプリケーションはAPIを2回呼び出すことが予想されます。最初の呼び出しでは、CK_ULONG
へのポインターは、次の呼び出しで返される項目の数に設定されます。これにより、アプリケーションは十分なメモリーを割り振り、結果を取り出すためにAPIを再度呼び出すことができます。PKCS#11 C_FindObjectsのメモリ所有権ulMaxObjectCount!= 1
また、C_FindObjects
コールは可変数の項目を返しますが、異なるパラダイムを使用します。パラメーターCK_OBJECT_HANDLE_PTR phObject
は、結果リストの先頭に設定されます。パラメータCK_ULONG_PTR pulObjectCount
は返された項目の数に設定され、CK_ULONG ulMaxObjectCount
未満であることが保証されています。
標準では、phObject
は、ulMaxObjectCount
CK_OBJECT_HANDLE
を保持するのに十分な大きさのメモリブロックへの有効なポインタである必要があると明示的には言及していません。
標準は、アプリケーションがulMaxObjectCount
オブジェクトに十分なメモリを悲観的に割り当てる必要があると解釈できます。 PKCS#11の実装でpulObjectCount
CK_OBJECT_HANDLE
が割り当てられ、そのメモリを解放するのはアプリケーションの責任です。しかし、この後の解釈は、PKCS#11の実装がこれまでにメモリ内のどこに標準を実装していないとしても、疑わしいと思われる。
通路がある:それは、しかし、その1つのエントリのためのメモリを割り当てないulMaxObjectCount
1に設定するように
C_FindObjects continues a search for token and session objects that
match a template, obtaining additional object handles. hSession is
the session’s handle; phObject points to the location that receives
the list (array) of additional object handles; ulMaxObjectCount is
the maximum number of object handles to be returned; pulObjectCount
points to the location that receives the actual number of object
handles returned.
If there are no more objects matching the template, then the location
that pulObjectCount points to receives the value 0.
The search MUST have been initialized with C_FindObjectsInit.
非規範的な例は、非常に有用ではありません。これは、アプリケーションが悲観的にメモリを事前に割り当てる必要があることを示しているようです。
CK_SESSION_HANDLE hSession;
CK_OBJECT_HANDLE hObject;
CK_ULONG ulObjectCount;
CK_RV rv;
.
.
rv = C_FindObjectsInit(hSession, NULL_PTR, 0);
assert(rv == CKR_OK);
while (1) {
rv = C_FindObjects(hSession, &hObject, 1, &ulObjectCount);
if (rv != CKR_OK || ulObjectCount == 0)
break;
.
.
}
rv = C_FindObjectsFinal(hSession);
assert(rv == CKR_OK);
仕様のリンク:http://docs.oasis-open.org/pkcs11/pkcs11-base/v2.40/pkcs11-base-v2.40.pdf
私は同意します、それは境界線です。 S.O.にある人がいるかもしれませんが。メモリが一般的にどのように管理されているかについての洞察がありますが、ここで誰かがPKCS#11 Cライブラリを特に使用していることはほぼ確実です。 – Huckle