Проверка состояния активации Windows возвращает неправильное значение - PullRequest
0 голосов
/ 10 мая 2019

Я создаю настольное приложение для Windows 10, которое проверяет, активированы ли окна. Я использую метод, найденный в другом потоке, чтобы проверить состояние активации, которое работает, но только когда оно вызывается в течение нескольких секунд после создания окна. Странно, я знаю. Кто-нибудь знает, что может вызвать это, и если я могу что-нибудь сделать, чтобы это исправить? Любая помощь приветствуется.

bool isGenuineWindows()
{
    //WindowsAppId
    unsigned char uuid_bytes[] = {0x35, 0x35, 0x63, 0x39, 0x32, 0x37, 0x33, 0x34, 0x2d, 0x64, 0x36,
                                0x38, 0x32, 0x2d, 0x34, 0x64, 0x37, 0x31, 0x2d, 0x39, 0x38, 0x33,
                                0x65, 0x2d, 0x64, 0x36, 0x65, 0x63, 0x33, 0x66, 0x31, 0x36, 0x30,
                                0x35, 0x39, 0x66};

    GUID uuid;
    SL_GENUINE_STATE state;

    UuidFromStringA(uuid_bytes, &uuid);
    SLIsGenuineLocal(&uuid, &state, nullptr);
    return state == SL_GEN_STATE_IS_GENUINE;
}

int main(void)
{
      /*creates GUI and all that boring stuff*/
      MessageBox(NULL, "Some random message", "message", MB_ICONERROR);
      printf("%d", isGenuineWindows()); //works
      Sleep(5000); //wait a bit for the magic to wear off
      printf("%d", isGenuineWindows()); //always returns true regardless of activation state
      MessageBox(NULL, "Some random message", "message", MB_ICONERROR);
      printf("%d", isGenuineWindows()); //works again
}

1 Ответ

0 голосов
/ 13 мая 2019

Тип 1-го параметра UuidFromStringA - RPC_CSTR, который определен в rpcdce.h:

typedef _Null_terminated_ unsigned char __RPC_FAR * RPC_CSTR;

Это строка с нулевым символом в конце, хотя она не задокументирована. Если параметр не имеет значение NULL-Termination, функция завершится ошибкой. Переданная вами строка не является NULL-Termination, что приведет к неопределенному поведению (зависит от исходного значения uuid_bytes [36]).

Используйте строку открытого текста вместо ASCII, которая является строкой по умолчанию с символом NULL:

unsigned char uuid_bytes[] = "55c92734-d682-4d71-983e-d6ec3f16059f";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...