Esempio n. 1
0
        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);
        }