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


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


При деиницилизации драйвера крайне желательно "отобрать" доступ к команде RDPMC с прикладного уровня и остановить все ранее запущенные счетчики производительности, сбросив флажок Enable Counter в MSR-регистрах PerfEvtSel0/PerfEvtSel1 (код, приведенный ниже останавливает только PerfEvtSel0):

DriverUnload:              ; // процедура деиницилизации драйвера

       …

       ; // сбрасываем бит pce регистра cr4 для запрета чтения

       ; // счетчика производительности с пользовательского уровня

       MOV    EAX, CR4

       MOV    ECX, 100h

       NOT    ECX           ; // запрещаем доступ к RDPMC с прикладного уровня

       AND    EAX, ECX

       MOV    CR4, EAX

      

       ; // останавливаем счетчик производительности

       XOR    EDX, EDX

       XOR    EAX, EAX

       MOV    ECX, 186h

       WRMSR

       …

Листинг 5 фрагмент процедуры деиницилизации драйвера

Прикладная программа первым делом должна загрузить драйвер (пусть для определенности он будет называться 996.SYS), открыв его с помощью функции CreateFile. При этом управление получит процедура инициализации, открывающая доступ к машинной команде RDPMC, но сами счетчики производительности еще не заданы, так что читать, собственно говоря, нечего и незачем.

Нет никакой необходимости писать загрузку драйвера на ассемблере и лучше всего воспользоваться для этой цели языком Си:

// определения необходимых констант

#define PrefCtrl0          0x0000

#define DCU_MISS_OUTSTANDING      0x0048

 

// дескриптор драйвера 996

static HANDLE _996_handle = INVALID_HANDLE_VALUE;

 

int _996_init()

{

       if (_996_handle == INVALID_HANDLE_VALUE)

       {

              _996_handle = CreateFile("\\\\.\\996",GENERIC_READ,

                                  FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,

                                  OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

             

              if (_996_handle == INVALID_HANDLE_VALUE) return 0;




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



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