private bool ReadUserInfo() { int numUser = 0; int numTemplate = 0; Cursor.Current = Cursors.WaitCursor; int result = BSSDK.BS_GetUserDBInfo(m_Handle, ref numUser, ref numTemplate); Cursor.Current = Cursors.Default; if (result != BSSDK.BS_SUCCESS) { MessageBox.Show("Cannot get user DB info", "Error"); return(false); } numOfUser.Text = numUser.ToString(); numOfTemplate.Text = numTemplate.ToString(); m_NumOfUser = numUser; if (m_DeviceType == BSSDK.BS_DEVICE_BEPLUS || m_DeviceType == BSSDK.BS_DEVICE_BIOLITE) { BSSDK.BEUserHdr[] userHdr = new BSSDK.BEUserHdr[m_NumOfUser]; IntPtr userInfo = Marshal.AllocHGlobal(m_NumOfUser * Marshal.SizeOf(typeof(BSSDK.BEUserHdr))); Cursor.Current = Cursors.WaitCursor; result = BSSDK.BS_GetAllUserInfoBEPlus(m_Handle, userInfo, ref m_NumOfUser); Cursor.Current = Cursors.Default; if (result != BSSDK.BS_SUCCESS && result != BSSDK.BS_ERR_NOT_FOUND) { Marshal.FreeHGlobal(userInfo); MessageBox.Show("Cannot get user header info", "Error"); return(false); } userList.Items.Clear(); for (int i = 0; i < m_NumOfUser; i++) { userHdr[i] = (BSSDK.BEUserHdr)Marshal.PtrToStructure(new IntPtr(userInfo.ToInt32() + i * Marshal.SizeOf(typeof(BSSDK.BEUserHdr))), typeof(BSSDK.BEUserHdr)); ListViewItem userItem = userList.Items.Add(userHdr[i].userID.ToString()); userItem.SubItems.Add(userHdr[i].numOfFinger.ToString()); userItem.SubItems.Add(userHdr[i].cardID.ToString("X")); } Marshal.FreeHGlobal(userInfo); } else if (m_DeviceType == BSSDK.BS_DEVICE_BIOSTATION) { BSSDK.BSUserHdrEx[] userHdr = new BSSDK.BSUserHdrEx[m_NumOfUser]; IntPtr userInfo = Marshal.AllocHGlobal(m_NumOfUser * Marshal.SizeOf(typeof(BSSDK.BSUserHdrEx))); Cursor.Current = Cursors.WaitCursor; result = BSSDK.BS_GetAllUserInfoEx(m_Handle, userInfo, ref m_NumOfUser); Cursor.Current = Cursors.Default; if (result != BSSDK.BS_SUCCESS && result != BSSDK.BS_ERR_NOT_FOUND) { Marshal.FreeHGlobal(userInfo); MessageBox.Show("Cannot get user header info", "Error"); return(false); } userList.Items.Clear(); for (int i = 0; i < m_NumOfUser; i++) { userHdr[i] = (BSSDK.BSUserHdrEx)Marshal.PtrToStructure(new IntPtr(userInfo.ToInt32() + i * Marshal.SizeOf(typeof(BSSDK.BSUserHdrEx))), typeof(BSSDK.BSUserHdrEx)); ListViewItem userItem = userList.Items.Add(userHdr[i].ID.ToString()); userItem.SubItems.Add(userHdr[i].numOfFinger.ToString()); userItem.SubItems.Add(userHdr[i].cardID.ToString("X")); } Marshal.FreeHGlobal(userInfo); } if (m_NumOfUser > 0) { try { uint ID = UInt32.Parse(userList.Items[0].Text); ReadUser(ID); } catch (Exception) { } } return(true); }