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

         

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


Следующий код обеспечивает взаимодействие драйвера с прикладной программой через API-функцию DeviceIOControl, передающий в IOCTL-коде номер события, за которым необходимо вести мониторинг. По соображениям наглядности, здесь используется всего лишь один счетчик производительности, управляемый MSR-регистром PerfEvtSel0.

IRP_MJ_DEVICE_CONTROL:                   ; // процедура обработки IOCTL-запросов

       ; // настраиваем регистр perfevtsel0 для мониторинга нужных событий

       XOR    EDX, EDX

       MOV    EAX, pisl->
Parameters.DeviceIoControl.IoControlCode ; //номер события

       TEST   EAX, EAX             ; // если код события равен нулю

       JZ     wrt                  ; // то вырубаем счетчик

      

       OR     EAX, 10000h          ; // делаем счетчик доступным

                                  ; // с прикладного уровня

       OR     EAX, 400000h         ; // пускаем счетчик

wrt:

       MOV ECX,0x186              ; // выбираем MSR-регистр PERFEVTSEL0

       WRMSR



Содержание раздела