Экстремальный разгон процессора


Как мы будем действовать - часть 5


       } return 1;

}

Листинг 6 прикладная функция, загружающая драйвер в память

Тоже самое относится и к функции, вызывающей DeviceIoControl и передающей ей код интересующего нас события. На языке Си она выглядит гораздо нагляднее:

int _996_select(int xCode, int REG)

{

       DWORD x;

       if (REG != PrefCtrl0) return 0;

      

       // если программист забыл загрузить драйвер,

       // данная функция делает это самостоятельно

       if (_996_handle == INVALID_HANDLE_VALUE) _996_init();

      

       // если загрузка драйвера провалилась сваливаем отсюда

       if (_996_handle == INVALID_HANDLE_VALUE) return 0;

       return DeviceIoControl(_996_handle, xCode, &x,0, &x, 0, &x, 0);

}

Листинг 7 прикладная функция, позволяющая выбирать интересующее нас событие для его мониторинга

Процедура закрытия драйвера должна просто вызывать CloseHandle, а все остальное за нас сделает сам драйвер. Впрочем, драйвер можно и не закрывать. При выходе из приложения операционная система сделает это автоматически.

int _996_exit()

{

 

       if (_996_handle != INVALID_HANDLE_VALUE)

       {

              CloseHandle(_996_handle);

       }

       return 1;

}

Листинг 8 прикладная функция выгружающая драйвер из памяти

А вот при снятии показаний со счетчиков производительности без ассемблера уже не обойтись! Для упрощения программирования можно использовать ассемблерные вставки, хоть это и является признаком дурного тона, затрудняющих перенос программы на другие платформы и препятствующей ее компиляции другим компилятором. Правильным решением было бы создание отдельного ассемблерного модуля, но это слишком хлопотно, тем более, что мы пишем не коммерческую программу, а всего лишь демонстрационный макет.

       // ИНИЦИЛИЗАЦИЯ ДРАЙВЕРА 996

       if (_996_init()==0) return printf("-ERR: 996 driver not loaded!\n");

      

       // ВЫБОР СОБЫТИЯ ДЛЯ МОНИТОРИНГА И ЗАПУСК СЧЕТЧИКА

       _996_select(DCU_MISS_OUTSTANDING, PrefCtrl0);




Начало  Назад  Вперед



Книжный магазин