private void ReadUsersInternal(Device device)
        {
            if (!Connect(device))
            {
                return;
            }

            _service.EnableDevice(MachineNumber, false);
            _service.ReadAllUserID(MachineNumber);

            string enrollNumber, name, password;
            int    privilege;
            bool   enabled;

            while (_service.SSR_GetAllUserInfo(MachineNumber, out enrollNumber, out name, out password, out privilege, out enabled))
            {
                var user = new UserInfo
                {
                    EnrollNumber = enrollNumber,
                    Name         = name,
                    Password     = password,
                    Privilege    = privilege,
                    Enabled      = enabled,
                    FingerPrints = new List <FingerPrint>()
                };

                if (UsersInfo.All(u => u.EnrollNumber != user.EnrollNumber))
                {
                    _service.SSR_DeleteEnrollDataExt(MachineNumber, user.EnrollNumber, 12);
                    continue;
                }
                UsersInfo.Add(user);

                for (var idwFingerIndex = 0; idwFingerIndex < 10; idwFingerIndex++)
                {
                    int    flag, tmpLength;
                    string tmpData;
                    if (_service.GetUserTmpExStr(MachineNumber, enrollNumber, idwFingerIndex, out flag, out tmpData,
                                                 out tmpLength)) //get the corresponding templates string and length from the memory
                    {
                        user.FingerPrints.Add(new FingerPrint {
                            Finger = idwFingerIndex, Data = tmpData
                        });
                    }
                }
            }

            _service.ReadAllUserID(MachineNumber);   //read all the user information to the memory
            _service.ReadAllTemplate(MachineNumber); //read all the users' fingerprint templates to the memory
            _service.EnableDevice(MachineNumber, true);

            Disconnect();
        }