public List<ObjectHandle> FindAllObjects(List<ObjectAttribute> attributes)
{
if (this._disposed)
throw new ObjectDisposedException(this.GetType().FullName);
List<ObjectHandle> foundObjects = new List<ObjectHandle>();
CK_ATTRIBUTE[] template = null;
ulong templateLength = 0;
if (attributes != null)
{
templateLength = Convert.ToUInt64(attributes.Count);
template = new CK_ATTRIBUTE[templateLength];
for (int i = 0; i < Convert.ToInt32(templateLength); i++)
template[i] = attributes[i].CkAttribute;
}
CKR rv = _p11.C_FindObjectsInit(_sessionId, template, templateLength);
if (rv != CKR.CKR_OK)
throw new Pkcs11Exception("C_FindObjectsInit", rv);
ulong objectsLength = 256;
ulong[] objects = new ulong[objectsLength];
ulong objectCount = objectsLength;
while (objectCount == objectsLength)
{
rv = _p11.C_FindObjects(_sessionId, objects, objectsLength, ref objectCount);
if (rv != CKR.CKR_OK)
throw new Pkcs11Exception("C_FindObjects", rv);
for (int i = 0; i < Convert.ToInt32(objectCount); i++)
foundObjects.Add(new ObjectHandle(objects[i]));
}
rv = _p11.C_FindObjectsFinal(_sessionId);
if (rv != CKR.CKR_OK)
throw new Pkcs11Exception("C_FindObjectsFinal", rv);
return foundObjects;
}