фрагмент процедуры деиницилизации драйвера
Прикладная программа первым делом должна загрузить драйвер (пусть для определенности он будет называться 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;
} return 1;
}