public Rv C_GetSlotList(byte tokenPresent, IntPtr pSlotList, IntPtr pulCount) { if (!App.IsInitialized) { return(Rv.CRYPTOKI_NOT_INITIALIZED); } if (pulCount == IntPtr.Zero) { return(Rv.ARGUMENTS_BAD); } if (pSlotList == IntPtr.Zero) { Marshal.StructureToPtr( App.Slots.Count, pulCount, false); } else { if (App.Slots.Count > Marshal.PtrToStructure <UInt32>(pulCount)) { return(Rv.BUFFER_TOO_SMALL); } UInt32[] list = UnmanagedArray.PtrToStructureArray <UInt32, UInt32>(pSlotList, pulCount); int i = 0; foreach (var item in App.Slots) { list[i] = item.Key; i++; } UnmanagedArray.StructureArrayToPtr(list, pSlotList); } return(Rv.OK); }