Почему моя блокировка HWID принимает любое значение в acceptSerial_2 - PullRequest
1 голос
/ 02 февраля 2020

В основном я использую блокировку HWID для блокировки моей программы, но у меня возникла проблема, когда моя программа принимает любое значение в acceptSerial_2. Вот код, пожалуйста, помогите мне сделать улучшения, Спасибо! Очевидно, что когда я запускаю программу, принятые серийные номера не равны 0, они соответствуют реальным значениям

    {
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12);
        std::cout << ":: Verifying HWID \n " << std::endl;
        TCHAR volumeName[MAX_PATH + 1] = { 0 };
        TCHAR fileSystemName[MAX_PATH + 1] = { 0 };
        DWORD serialNumber = 0;
        DWORD maxComponentLen = 0;
        DWORD fileSystemFlags = 0;
        if (GetVolumeInformation(
            _T("C:\\"),
            volumeName,
            ARRAYSIZE(volumeName),
            &serialNumber,
            &maxComponentLen,
            &fileSystemFlags,
            fileSystemName,
            ARRAYSIZE(fileSystemName)))
        {

            DWORD acceptedSerial = 0; // 
            DWORD acceptedSerial_1 = 0; //
            DWORD acceptedSerial_2 = 0; // 


            if (serialNumber == acceptedSerial || acceptedSerial_1 || acceptedSerial_2)
            {
                MessageBox::Show("Access Granted!",
                    "Welcome",
                    MessageBoxButtons::OK,
                    MessageBoxIcon::Exclamation);
                return(0);
            }
            else
            {
                MessageBox::Show("HWID Missmatch",
                    "Error",
                    MessageBoxButtons::OK,
                    MessageBoxIcon::Error);
                exit(0);
            }


        }

    }```

1 Ответ

1 голос
/ 03 февраля 2020

Если вы хотите принять только три значения: acceptedSerial, acceptedSerial_1, acceptedSerial_2, тогда логическое выражение будет if ((serialNumber == acceptedSerial) || (serialNumber == acceptedSerial_1) || (serialNumber == acceptedSerial_2)).

Однако, то, которое вы используете в настоящее время: if (serialNumber == acceptedSerial || acceptedSerial_1 || acceptedSerial_2) всегда равно true, если acceptedSerial_1 или acceptedSerial_2 не равно нулю, даже если они не равны serialNumber.

См. C ++ Логический оператор ИЛИ: || .

...