Я хотел бы считать значение IA32_TSC_DEADLINE в Windows, но, кажется, оно возвращает значение 0 в DebugView Код (Text): #define IA32_APIC_BASE_MSR 0x1B #define IA32_TSC_DEADLINE_MSR 0x6E0 #define LOCAL_APIC_LVT_TIMER_OFFSET 0x320 #define LOCAL_APIC_TIMER_MODE_MASK (1 << 17) NTSTATUS ReadLocalApicBaseAddress(ULONG64* apic_base_address) { ULONG64 ia32_apic_base = __readmsr(IA32_APIC_BASE_MSR); *apic_base_address = ia32_apic_base & 0xFFFFFFFFF000ULL; return STATUS_SUCCESS; } NTSTATUS MapLocalApicMmio(PVOID* apic_base_virtual, ULONG64 apic_base_address) { PHYSICAL_ADDRESS apic_physical_base; apic_physical_base.QuadPart = apic_base_address; *apic_base_virtual = MmMapIoSpace(apic_physical_base, PAGE_SIZE, MmNonCached); return *apic_base_virtual ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL; } VOID UnmapLocalApicMmio(PVOID apic_base_virtual) { MmUnmapIoSpace(apic_base_virtual, PAGE_SIZE); } NTSTATUS ReadTscDeadlineValue(ULONG64* tsc_deadline_value) { ULONG64 apic_base_address; NTSTATUS status = ReadLocalApicBaseAddress(&apic_base_address); if (!NT_SUCCESS(status)) { return status; } PVOID apic_base_virtual; status = MapLocalApicMmio(&apic_base_virtual, apic_base_address); if (!NT_SUCCESS(status)) { return status; } ULONG timer_lvt = *(volatile ULONG*)((PUCHAR)apic_base_virtual + LOCAL_APIC_LVT_TIMER_OFFSET); if (timer_lvt & LOCAL_APIC_TIMER_MODE_MASK) { *tsc_deadline_value = __readmsr(IA32_TSC_DEADLINE_MSR); } else { status = STATUS_NOT_SUPPORTED; } UnmapLocalApicMmio(apic_base_virtual); return status; } код для вывода, если срок доступен Код (Text): ULONG64 tsc_deadline_value; status = ReadTscDeadlineValue(&tsc_deadline_value); if (NT_SUCCESS(status)) { DbgPrint("TSC_DEADLINE value: %llu\n", tsc_deadline_value); } else { DbgPrint("Failed to read TSC_DEADLINE value, status: %08X\n", status); } Оно возвращает 0, почему это происходит?