Set LogonHours Active Directory

julierme

Member
Joined
Jun 13, 2021
Messages
14
Programming Experience
3-5
Dear,
I'm developing a system to restrict user login times in AD, I can view login times and even change. But for example, I'm not able to establish this login time from 17:00 to midnight, the system appears to be zero, another issue is to establish the time from 00:00 to 00:00, when this done in the system in AD, it displays as denied.

I'm using as a base the classes available here: LogonTime.cs
Observe the days of Friday and Saturday, the system is showing up empty, but in AD is marked the allowed times.
I need help getting these details right.

1623625475735.png


1623625508749.png
 
Please post your code here, not just a link to a gist. We want maintain the context of all threads. If sometime in the future, you decide to delete to restrict the access to your gist, then this thread will be useless to a future reader who may find this thread.
 
As a quick aside, your code could dramatically have been simplified by using the built in BitArray class. The entire week can a single 168 bit array and computing the day and hour is simply:
dayOfWeek * 24 + hourOfDay. Then when it's time to convert to/from UTC is just a matter rotating the bit array the appropriate number of hours delta from UTC.
 
Anyway, regarding your question. It's really hard to help you because you are not showing us your code for filling out those combo boxes. The only code you linked takes a list of LogonTimes and returns a bitmap representing those logon times. A cursory look of that code makes it looks like it is doing the right thing (albeit the hard way). Where is the code that then takes that bitmap and translates them into combo box values?
 
Thanks for listening.
I will be posting the code.
This code is to load the combobox with the times
carregarcombo:
  public void carregarHorario(string NomeUsuario)
        {
            var varSelectedUserLogonTimes = new List<LogonTime>();
            String sSelectedUserName = "";
            PrincipalContext pctxLocalMachine;
            UserPrincipal usrpSelectedUser;

            string servidor = "192.0.64.151";
            string userAD = usuarioAD;
            string pwdAD = senhaAD;
            sSelectedUserName = NomeUsuario;//cmbUserList.SelectedItem.ToString();
            pctxLocalMachine = new PrincipalContext(ContextType.Domain, servidor, userAD, pwdAD);
            usrpSelectedUser = UserPrincipal.FindByIdentity(pctxLocalMachine, IdentityType.SamAccountName, sSelectedUserName);

            //  grpbxTimeRestrictions.Visible = true;

            if (usrpSelectedUser.Enabled == true)
            {
                cmbSunFromTime.Enabled = true;
                cmbSunToTime.Enabled = true;
                cmbMonFromTime.Enabled = true;
                cmbMonToTime.Enabled = true;
                cmbTueFromTime.Enabled = true;
                cmbTueToTime.Enabled = true;
                cmbWedFromTime.Enabled = true;
                cmbWedToTime.Enabled = true;
                cmbThuFromTime.Enabled = true;
                cmbThuToTime.Enabled = true;
                cmbFriFromTime.Enabled = true;
                cmbFriToTime.Enabled = true;
                cmbSatFromTime.Enabled = true;
                cmbSatToTime.Enabled = true;
                btnSave.Enabled = true;
            }
            else
            {
                cmbSunFromTime.Enabled = false;
                cmbSunToTime.Enabled = false;
                cmbMonFromTime.Enabled = false;
                cmbMonToTime.Enabled = false;
                cmbTueFromTime.Enabled = false;
                cmbTueToTime.Enabled = false;
                cmbWedFromTime.Enabled = false;
                cmbWedToTime.Enabled = false;
                cmbThuFromTime.Enabled = false;
                cmbThuToTime.Enabled = false;
                cmbFriFromTime.Enabled = false;
                cmbFriToTime.Enabled = false;
                cmbSatFromTime.Enabled = false;
                cmbSatToTime.Enabled = false;
                btnSave.Enabled = false;
            }

            varSelectedUserLogonTimes = PermittedLogonTimes.GetLogonTimes(usrpSelectedUser.PermittedLogonTimes);

            cmbSunFromTime.SelectedIndex = -1;
            cmbMonFromTime.SelectedIndex = -1;
            cmbTueFromTime.SelectedIndex = -1;
            cmbWedFromTime.SelectedIndex = -1;
            cmbThuFromTime.SelectedIndex = -1;
            cmbFriFromTime.SelectedIndex = -1;
            cmbSatFromTime.SelectedIndex = -1;
            cmbSunToTime.SelectedIndex = -1;
            cmbMonToTime.SelectedIndex = -1;
            cmbTueToTime.SelectedIndex = -1;
            cmbWedToTime.SelectedIndex = -1;
            cmbThuToTime.SelectedIndex = -1;
            cmbFriToTime.SelectedIndex = -1;
            cmbSatToTime.SelectedIndex = -1;

            for (int iIndex = 0; iIndex < varSelectedUserLogonTimes.Count; iIndex++)
            {
                LogonTime lExtractedTime = varSelectedUserLogonTimes.ElementAt(iIndex);

                switch (lExtractedTime.DayOfWeek)
                {
                    case DayOfWeek.Sunday:
                        cv_iSunFromTime = cmbSunFromTime.SelectedIndex = cmbSunFromTime.Items.IndexOf(lExtractedTime.BeginTime.ToShortTimeString());
                        cv_iSunToTime = cmbSunToTime.SelectedIndex = cmbSunToTime.Items.IndexOf(lExtractedTime.EndTime.ToShortTimeString());
                        break;
                    case DayOfWeek.Monday:
                        cv_iMonFromTime = cmbMonFromTime.SelectedIndex = cmbMonFromTime.Items.IndexOf(lExtractedTime.BeginTime.ToShortTimeString());
                        cv_iMonToTime = cmbMonToTime.SelectedIndex = cmbMonToTime.Items.IndexOf(lExtractedTime.EndTime.ToShortTimeString());
                        break;
                    case DayOfWeek.Tuesday:
                        cv_iTueFromTime = cmbTueFromTime.SelectedIndex = cmbTueFromTime.Items.IndexOf(lExtractedTime.BeginTime.ToShortTimeString());
                        cv_iTueToTime = cmbTueToTime.SelectedIndex = cmbTueToTime.Items.IndexOf(lExtractedTime.EndTime.ToShortTimeString());
                        break;
                    case DayOfWeek.Wednesday:
                        cv_iWedFromTime = cmbWedFromTime.SelectedIndex = cmbWedFromTime.Items.IndexOf(lExtractedTime.BeginTime.ToShortTimeString());
                        cv_iWedToTime = cmbWedToTime.SelectedIndex = cmbWedToTime.Items.IndexOf(lExtractedTime.EndTime.ToShortTimeString());
                        break;
                    case DayOfWeek.Thursday:
                        cv_iThuFromTime = cmbThuFromTime.SelectedIndex = cmbThuFromTime.Items.IndexOf(lExtractedTime.BeginTime.ToShortTimeString());
                        cv_iThuToTime = cmbThuToTime.SelectedIndex = cmbThuToTime.Items.IndexOf(lExtractedTime.EndTime.ToShortTimeString());
                        break;
                    case DayOfWeek.Friday:
                        cv_iFriFromTime = cmbFriFromTime.SelectedIndex = cmbFriFromTime.Items.IndexOf(lExtractedTime.BeginTime.ToShortTimeString());
                        cv_iFriToTime = cmbFriToTime.SelectedIndex = cmbFriToTime.Items.IndexOf(lExtractedTime.EndTime.ToShortTimeString());
                        break;
                    case DayOfWeek.Saturday:
                        cv_iSatFromTime = cmbSatFromTime.SelectedIndex = cmbSatFromTime.Items.IndexOf(lExtractedTime.BeginTime.ToShortTimeString());
                        cv_iSatToTime = cmbSatToTime.SelectedIndex = cmbSatToTime.Items.IndexOf(lExtractedTime.EndTime.ToShortTimeString());
                        break;
                }
            }

          }

This code is to save after choosing the times in the combo. it will generate the byte array using the codes from the github page given above.
save:
  private void btnSave_Click(object sender, EventArgs e)
        {
            DateTime dtSunFromTime, dtMonFromTime, dtTueFromTime, dtWedFromTime, dtThuFromTime, dtFriFromTime, dtSatFromTime;
            DateTime dtSunToTime, dtMonToTime, dtTueToTime, dtWedToTime, dtThuToTime, dtFriToTime, dtSatToTime;
            String sSelectedUserName = "", sFromTime = "", sToTime = "";
            LogonTime lSunLogonTime, lMonLogonTime, lTueLogonTime, lWedLogonTime;
            LogonTime lThuLogonTime, lFriLogonTime, lSatLogonTime;
            List<LogonTime> lstLogonTimes = new List<LogonTime>();
            PrincipalContext pctxLocalMachine;
            UserPrincipal usrpSelectedUser;

        
            string servidor = "192.0.64.151";
            string userAD = usuarioAD;
            string pwdAD = senhaAD;
            sSelectedUserName = lbUserSelecionado.Text;//cmbUserList.SelectedItem.ToString();
            pctxLocalMachine = new PrincipalContext(ContextType.Domain, servidor, userAD, pwdAD);
            usrpSelectedUser = UserPrincipal.FindByIdentity(pctxLocalMachine, IdentityType.SamAccountName, sSelectedUserName);

            if (cmbSunFromTime.SelectedItem != null & cmbSunToTime.SelectedItem !=null )
            {
                sFromTime = "1/1/" + DateTime.Now.Year + " "; sToTime = "1/1/" + DateTime.Now.Year + " ";
                sFromTime = sFromTime + cmbSunFromTime.SelectedItem.ToString();
                sToTime = sToTime + cmbSunToTime.SelectedItem.ToString();
                dtSunFromTime = DateTime.Parse(sFromTime);
                dtSunToTime = DateTime.Parse(sToTime);
                lSunLogonTime = new LogonTime(System.DayOfWeek.Sunday, dtSunFromTime, dtSunToTime);
                lstLogonTimes.Add(lSunLogonTime);
            }
            else
            {

                sFromTime = "1/1/" + DateTime.Now.Year + " "; sToTime = "1/1/" + DateTime.Now.Year + " ";
                sFromTime = sFromTime + "00:00";
                sToTime = sToTime + "00:00";
                dtSunFromTime = DateTime.Parse(sFromTime);
                dtSunToTime = DateTime.Parse(sToTime);
                lSunLogonTime = new LogonTime(System.DayOfWeek.Sunday, dtSunFromTime, dtSunToTime);
                lstLogonTimes.Add(lSunLogonTime);
            }

            if (cmbMonFromTime.SelectedItem!= null & cmbMonToTime.SelectedItem !=null)
            {

            sFromTime = "1/1/" + DateTime.Now.Year + " "; sToTime = "1/1/" + DateTime.Now.Year + " ";
            sFromTime = sFromTime + cmbMonFromTime.SelectedItem.ToString();
            sToTime = sToTime + cmbMonToTime.SelectedItem.ToString();
            dtMonFromTime = DateTime.Parse(sFromTime);
            dtMonToTime = DateTime.Parse(sToTime);
            lMonLogonTime = new LogonTime(System.DayOfWeek.Monday, dtMonFromTime, dtMonToTime);
            lstLogonTimes.Add(lMonLogonTime);
            }
            else
            {
                sFromTime = "1/1/" + DateTime.Now.Year + " "; sToTime = "1/1/" + DateTime.Now.Year + " ";
                sFromTime = sFromTime + "00:00";
                sToTime = sToTime + "00:00";
                dtMonFromTime = DateTime.Parse(sFromTime);
                dtMonToTime = DateTime.Parse(sToTime);
                lMonLogonTime = new LogonTime(System.DayOfWeek.Monday, dtMonFromTime, dtMonToTime);
                lstLogonTimes.Add(lMonLogonTime);


            }

            if (cmbTueFromTime.SelectedItem!=null & cmbTueToTime.SelectedItem!=null)
            {
            sFromTime = "1/1/" + DateTime.Now.Year + " "; sToTime = "1/1/" + DateTime.Now.Year + " ";
            sFromTime = sFromTime + cmbTueFromTime.SelectedItem.ToString();
            sToTime = sToTime + cmbTueToTime.SelectedItem.ToString();
            dtTueFromTime = DateTime.Parse(sFromTime);
            dtTueToTime = DateTime.Parse(sToTime);
            lTueLogonTime = new LogonTime(System.DayOfWeek.Tuesday, dtTueFromTime, dtTueToTime);
            lstLogonTimes.Add(lTueLogonTime);
            }
            else
            {
                sFromTime = "1/1/" + DateTime.Now.Year + " "; sToTime = "1/1/" + DateTime.Now.Year + " ";
                sFromTime = sFromTime + "00:00";
                sToTime = sToTime + "00:00";
                dtTueFromTime = DateTime.Parse(sFromTime);
                dtTueToTime = DateTime.Parse(sToTime);
                lTueLogonTime = new LogonTime(System.DayOfWeek.Tuesday, dtTueFromTime, dtTueToTime);
                lstLogonTimes.Add(lTueLogonTime);

            }

            if (cmbWedFromTime.SelectedItem != null & cmbWedToTime.SelectedItem !=null)
            {

                sFromTime = "1/1/" + DateTime.Now.Year + " "; sToTime = "1/1/" + DateTime.Now.Year + " ";
                sFromTime = sFromTime + cmbWedFromTime.SelectedItem.ToString();
                sToTime = sToTime + cmbWedToTime.SelectedItem.ToString();
                dtWedFromTime = DateTime.Parse(sFromTime);
                dtWedToTime = DateTime.Parse(sToTime);
                lWedLogonTime = new LogonTime(System.DayOfWeek.Wednesday, dtWedFromTime, dtWedToTime);
                lstLogonTimes.Add(lWedLogonTime);
            }
            else
            {
                sFromTime = "1/1/" + DateTime.Now.Year + " "; sToTime = "1/1/" + DateTime.Now.Year + " ";
                sFromTime = sFromTime + "00:00";
                sToTime = sToTime + "00:00";
                dtWedFromTime = DateTime.Parse(sFromTime);
                dtWedToTime = DateTime.Parse(sToTime);
                lWedLogonTime = new LogonTime(System.DayOfWeek.Wednesday, dtWedFromTime, dtWedToTime);
                lstLogonTimes.Add(lWedLogonTime);

            }

            if (cmbThuFromTime.SelectedItem != null & cmbThuToTime.SelectedItem!=null)
            {
                sFromTime = "1/1/" + DateTime.Now.Year + " "; sToTime = "1/1/" + DateTime.Now.Year + " ";
                sFromTime = sFromTime + cmbThuFromTime.SelectedItem.ToString();
                sToTime = sToTime + cmbThuToTime.SelectedItem.ToString();
                dtThuFromTime = DateTime.Parse(sFromTime);
                dtThuToTime = DateTime.Parse(sToTime);
                lThuLogonTime = new LogonTime(System.DayOfWeek.Thursday, dtThuFromTime, dtThuToTime);
                lstLogonTimes.Add(lThuLogonTime);

            }
            else
            {
                sFromTime = "1/1/" + DateTime.Now.Year + " "; sToTime = "1/1/" + DateTime.Now.Year + " ";
                sFromTime = sFromTime + "00:00";
                sToTime = sToTime + "00:00";
                dtThuFromTime = DateTime.Parse(sFromTime);
                dtThuToTime = DateTime.Parse(sToTime);
                lThuLogonTime = new LogonTime(System.DayOfWeek.Thursday, dtThuFromTime, dtThuToTime);
                lstLogonTimes.Add(lThuLogonTime);

            }


            if (cmbFriFromTime.SelectedItem != null & cmbFriToTime.SelectedItem!=null)
            {
                sFromTime = "1/1/" + DateTime.Now.Year + " "; sToTime = "1/1/" + DateTime.Now.Year + " ";
                sFromTime = sFromTime + cmbFriFromTime.SelectedItem.ToString();
                sToTime = sToTime + cmbFriToTime.SelectedItem.ToString();
                dtFriFromTime = DateTime.Parse(sFromTime);
                dtFriToTime = DateTime.Parse(sToTime);
                lFriLogonTime = new LogonTime(System.DayOfWeek.Friday, dtFriFromTime, dtFriToTime);
                lstLogonTimes.Add(lFriLogonTime);

            }
            else
            {
                sFromTime = "1/1/" + DateTime.Now.Year + " "; sToTime = "1/1/" + DateTime.Now.Year + " ";
                sFromTime = sFromTime + "00:00";
                sToTime = sToTime + "00:00";
                dtFriFromTime = DateTime.Parse(sFromTime);
                dtFriToTime = DateTime.Parse(sToTime);
                lFriLogonTime = new LogonTime(System.DayOfWeek.Friday, dtFriFromTime, dtFriToTime);
                lstLogonTimes.Add(lFriLogonTime);

            }

            if (cmbSatFromTime.SelectedItem != null & cmbSatToTime.SelectedItem!=null)
            {
                sFromTime = "1/1/" + DateTime.Now.Year + " "; sToTime = "1/1/" + DateTime.Now.Year + " ";
                sFromTime = sFromTime + cmbSatFromTime.SelectedItem.ToString();
                sToTime = sToTime + cmbSatToTime.SelectedItem.ToString();
                dtSatFromTime = DateTime.Parse(sFromTime);
                dtSatToTime = DateTime.Parse(sToTime);
                lSatLogonTime = new LogonTime(System.DayOfWeek.Saturday, dtSatFromTime, dtSatToTime);
                lstLogonTimes.Add(lSatLogonTime);
            }
            else
            {
                sFromTime = "1/1/" + DateTime.Now.Year + " "; sToTime = "1/1/" + DateTime.Now.Year + " ";
                sFromTime = sFromTime + "00:00";
                sToTime = sToTime + "00:00";
                dtSatFromTime = DateTime.Parse(sFromTime);
                dtSatToTime = DateTime.Parse(sToTime);
                lSatLogonTime = new LogonTime(System.DayOfWeek.Saturday, dtSatFromTime, dtSatToTime);
                lstLogonTimes.Add(lSatLogonTime);
            }
            


            if (cmbSunFromTime.SelectedIndex == cv_iSunFromTime &&
                cmbSunToTime.SelectedIndex == cv_iSunToTime &&
                cmbMonFromTime.SelectedIndex == cv_iMonFromTime &&
                cmbMonToTime.SelectedIndex == cv_iMonToTime &&
                cmbTueFromTime.SelectedIndex == cv_iTueFromTime &&
                cmbTueToTime.SelectedIndex == cv_iTueToTime &&
                cmbWedFromTime.SelectedIndex == cv_iWedFromTime &&
                cmbWedToTime.SelectedIndex == cv_iWedToTime &&
                cmbThuFromTime.SelectedIndex == cv_iThuFromTime &&
                cmbThuToTime.SelectedIndex == cv_iThuToTime &&
                cmbFriFromTime.SelectedIndex == cv_iFriFromTime &&
                cmbFriToTime.SelectedIndex == cv_iFriToTime &&
                cmbSatFromTime.SelectedIndex == cv_iSatFromTime &&
                cmbSatToTime.SelectedIndex == cv_iSatToTime)
            {
                MessageBox.Show("Nenhuma alteração feita que precise ser salva!", "SGAD", MessageBoxButtons.OK, MessageBoxIcon.Information);
                btnSave.Enabled = false;
            }
            else
            {
                byte[] byteMaskForUser;

                // Saving Permitted Logon Times based on selection
                byteMaskForUser = PermittedLogonTimes.GetByteMask(lstLogonTimes);
                usrpSelectedUser.PermittedLogonTimes = byteMaskForUser;
                usrpSelectedUser.Save();



                MessageBox.Show("As alterações de limite de tempo do usuário:" + usrpSelectedUser.Name + " foram salvas com sucesso no Servidor!", "SGAD", MessageBoxButtons.OK, MessageBoxIcon.Information) ;

                usrpSelectedUser.Dispose();
                pctxLocalMachine.Dispose();

                btnSave.Enabled = false;
            }

            carregarHorario(lbUserSelecionado.Text);

        }
 
Last edited:
Seems simple enough to try to figure out what's happening. Set breakpoints on lines 100 and 104 of your carregarcombo file. Inspect the values of cv_iFriFromTime, cv_iFriToTime, cv_iSatFromTime, and cv_iSatToTime. If you are getting -1 values for those, share with us what values are of:
C#:
lExtractedTime.BeginTime.ToShortTimeString()
lExtractedTime.EndTime.ToShortTimeString()

As a quick aside, a lot of your code could be simplified is you simply made use of arrays and dictionaries. You could dramatically trim down the raw number of variables and members that you have.
 
Parece simples o suficiente para tentar descobrir o que está acontecendo. Defina pontos de interrupção nas linhas 100 e 104 do seu arquivo carregarcombo. Inspecione os valores de cv_iFriFromTime [/ icode], [icode] cv_iFriToTime [/ icode], [icode] cv_iSatFromTime [/ icode] e [icode] cv_iSatToTime [/ icode]. Se você está recebendo valores -1 para eles, compartilhe conosco quais são os valores de: [código] lExtractedTime.BeginTime.ToShortTimeString () lExtractedTime.EndTime.ToShortTimeString () [/código] Como um aparte rápido, muito do seu código poderia ser simplificado se você simplesmente fizesse uso de matrizes e dicionários. Você pode reduzir drasticamente o número bruto de variáveis e membros que possui. [/QUOTE] [ATTACH type="full"]1575[/ATTACH] Acho que o problema é como passar a máscara, porque no AD você verifica se é permitido ou negado.
 

Attachments

  • 1623697649889.png
    1623697649889.png
    33.3 KB · Views: 16
Yes those are the values in your LogonTime class. Unfortunately, that screenshot is not showing us the value after ToShortTimeString() executes. (I can't make assumptions about the resulting string because I have no idea how your local machine's culture settings are configured.) Once you get those strings, it looks like they obviously don't match any values that are in your combo boxes because presumably IndexOf() is returning -1 indicating no matching value found. A common error I've seen with these hardcoded strings in combo boxes, specially when you have so many duplicates, is that sometimes there is a leading or trailing space left put into one or more of the combo box values.
 
I'm debugging here and in this varSelectUserLogonTime variable I noticed that the sixth day is being displayed as Saturday and not Friday as shown in AD.
I believe this is skipping one day, when the selection ends at midnight. follows the code of the PermittedLogonTimes.GetlogonTimes class (Calculate the login times based on an Active)
1623752254664.png


GetLogonTimes:
 /// <resumo>
        /// Calcular os tempos de logon com base em uma máscara de bytes do Active Directory
        /// </summary>
        /// <param name = "byteMask"> máscara de bytes do Active Directory </param>
        /// <returns> Lista de objetos LogonTime para significar permite tempos </returns>
        public static List <LogonTime> GetLogonTimes (byte [] byteMask)
        {
            var zone = TimeZoneInfo.FindSystemTimeZoneById ("E. Horário padrão da América do Sul");
            return GetLogonTimes (byteMask, zona);
        }

        /// <resumo>
        /// Calcular os tempos de logon com base em uma máscara de bytes do Active Directory
        /// </summary>
        /// <param name = "byteMask"> máscara de bytes do Active Directory </param>
        /// <param name = "timeZone"> Fuso horário para converter </param>
        /// <returns> Lista de objetos LogonTime para significar permite tempos </returns>
        public static List <LogonTime> GetLogonTimes (byte [] byteMask, TimeZoneInfo timeZone)
        {
            var horas = MarkHours (byteMask);

            return ConvertToLogonTime (horas, (timeZone.BaseUtcOffset.Hours));
        }
 
Last edited by a moderator:
Sorry this is an English language forum. Please repost your reply in English.
 
And please stop posting using inline code. The correct code button to use is </> not >_

If it wasn't such an eyesore to read with inline code, and if it were in English, I'd have chimed in to try offer some help...

Regarding some of the code above. You really should be binding your data to models. Databinding is also possible in Winforms, although its best done in WPF. And it would also help to reduce a lot of that code clutter you have going on.
 
I'm going to try to clean up post #9 to make it more legible.
 
@julierme : You really aren't help us by only giving us bits and pieces, as well as, swapping topics.

Regarding your original problem with the combo boxes not filling out properly, you still haven't responded to post #8's questions: What are the results of calling ToShortTimeString() for the begin and end times? What values do you have in your combo boxes? The only way you'll get a -1 for the IndexOf() calls will be if the result of ToShortTimeString() doesn't match any of the values in your combo boxes.

Now regarding your new problem in post #9 where your LogonTime class values don't seem to correspond to what you are seeing in the AD GUI. All you gave us was the code in post #9, but the code there calls MarkHours() and ConvertToLogonTime(), but you don't show us the code for those methods. To me, it looks like you have a bug in that code which creates the LogonTimes list.
 
@julierme : You really aren't help us by only giving us bits and pieces, as well as, swapping topics.

Regarding your original problem with the combo boxes not filling out properly, you still haven't responded to post #8's questions: What are the results of calling ToShortTimeString() for the begin and end times? What values do you have in your combo boxes? The only way you'll get a -1 for the IndexOf() calls will be if the result of ToShortTimeString() doesn't match any of the values in your combo boxes.

Now regarding your new problem in post #9 where your LogonTime class values don't seem to correspond to what you are seeing in the AD GUI. All you gave us was the code in post #9, but the code there calls MarkHours() and ConvertToLogonTime(), but you don't show us the code for those methods. To me, it looks like you have a bug in that code which creates the LogonTimes list.
Dear,
I will try to answer your questions:
After ToShortTimeString, combo boxes are populated with times starting from 00:00 to 23:00
What you say is the other topic, it's actually the same topic, but looking at the part that the system brings the AD time mask.
I thought that showing that since then when you get the AD mask would help to understand the problem.
I will post the full code
 
Back
Top Bottom