IDT检测(支持多核cpu,兼容xp vista)

2023-12-03 00:38

本文主要是介绍IDT检测(支持多核cpu,兼容xp vista),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

获取idt信息再简单不过,只是随手实验的代码。欢迎各种飘过

ms的某些改动真是很烦人,没多大用处,又给兼容带来许多麻烦,大概ms以为vista会大卖,xp是淘汰货不用兼容了吧!我晕。(win7界面很难看。。学Ubuntu没学好吧....)

1. DbgPrin 用不了,查了查资料

  • Enable output of DbgPrint/KdPrint messages by default --Open the key "HKLM\SYSTEM\CCS\Control\Session Manager\Debug Print Filter".  Under this key, create a  value with the name "DEFAULT"  Set the value of this key equal to the DWORD value 8 to enable xxx_INFO_LEVEL output as well as xxx_ERROR_LEVEL output.  Or try setting the mask to 0xF so you get all output.  You must reboot for these changes to take effect.各种吃饱了没事干。

    2.获取cpu数目的方式变了,具体方法看下文。

      1 #define MAKELONG(a, b) ((unsigned long) (((unsigned short) (a)) | ((unsigned long) ((unsigned short) (b))) << 16)) 2 3 4 VOID ShowIDTinfo( 5                  IN struct _KDPC  *Dpc, 6                  IN ULONG cpuNum, 7                  IN PVOID  SystemArgument1, 8                  IN PVOID  SystemArgument2); 9 typedef struct _IDTENTRY 10 { 11     unsigned short LowOffset; 12     unsigned short selector; 13     unsigned char unused_lo; 14     unsigned char segment_type:4;    //0x0E is an interrupt gate 15     unsigned char system_segment_flag:1; 16     unsigned char DPL:2;           // descriptor privilege level 17     unsigned char P:1;              /* present */ 18     unsigned short HiOffset; 19 } IDTENTRY,*PIDTENTRY; 20 21 /* sidt returns idt in this format */ 22 typedef struct _IDTINFO 23 { 24     unsigned short IDTLimit; 25     unsigned short LowIDTbase; 26     unsigned short HiIDTbase; 27 } IDTINFO,*PIDTINFO; 28 typedef  ULONG (NTAPI *fnKeQueryActiveProcessorCount)(OUT PKAFFINITY  ActiveProcessors); 29 ULONG g_dwBuildNumber; 30 //记录完成dpc的数量 31 volatile LONG g_FinshedDPC = 0; 32 //入口函数 33 extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject,IN PUNICODE_STRING pRegistryPath) 34 { 35     NTSTATUS status; 36 37     //注册驱动调用函数入口 38     pDriverObject->DriverUnload = (PDRIVER_UNLOAD)DriverUnload; 39     pDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL]= DriverIOCtrl    ; 40     pDriverObject->MajorFunction[IRP_MJ_CLOSE]= DriverDispatch    ; 41     pDriverObject->MajorFunction[IRP_MJ_CREATE]= DriverDispatch    ; 42     pDriverObject->MajorFunction[IRP_MJ_READ]= DriverDispatch    ; 43     pDriverObject->MajorFunction[IRP_MJ_WRITE]= DriverDispatch    ; 44 45 46     //创建设备 47     status = CreateDevice(pDriverObject); 48 49     ULONG count = 0; 50     UNICODE_STRING  ustr; 51     PKDPC pdpc; 52     PsGetVersion(0,0,&g_dwBuildNumber,0); 53     //__asm int 3 54     //动态获取地址,因为获取cpu数目的方法在vista sp1即以后版本有所改变, 55     //如果直接使用KeQueryActiveProcessorCount将导致驱动在xp下无法加载 56     if (g_dwBuildNumber == 2600 || g_dwBuildNumber == 6000) 57     { 58         RtlInitUnicodeString(&ustr,L"KeNumberProcessors"); 59         PVOID p = MmGetSystemRoutineAddress(&ustr); 60         if (p!=0) 61         { 62             count = *(ULONG *)p; 63         }     64     } 65     else 66     { 67         KAFFINITY procs; 68         RtlInitUnicodeString(&ustr,L"KeQueryActiveProcessorCount"); 69         fnKeQueryActiveProcessorCount MyQueryActiveProcessorCount = (fnKeQueryActiveProcessorCount)MmGetSystemRoutineAddress(&ustr); 70         if (MyQueryActiveProcessorCount != 0) 71         { 72             count = MyQueryActiveProcessorCount(&procs); 73         } 74 75     } 76     if (count==1) 77     { 78         ShowIDTinfo(0,0,0,0); 79     } 80     else 81     { 82         ULONG currrent_pro_num = KeGetCurrentProcessorNumber(); 83         ShowIDTinfo(0,currrent_pro_num,0,0); 84         g_FinshedDPC = 1; 85         PKDPC temp_dpc; 86         temp_dpc = (PKDPC)ExAllocatePoolWithTag(NonPagedPool,sizeof(KDPC)*count,'rm'); 87         pdpc = temp_dpc; 88         if (temp_dpc == NULL) 89             return status; 90         for (ULONG i = 0;i<count;i++,*temp_dpc++) 91         { 92             if (i!=currrent_pro_num) 93             { 94                 //传入一个cpu号就好 95                 KeInitializeDpc(temp_dpc,(PKDEFERRED_ROUTINE)ShowIDTinfo,(PVOID)i); 96                 KeSetTargetProcessorDpc(temp_dpc,i); 97                 KeInsertQueueDpc(temp_dpc,NULL,NULL); 98 99             } 
    100              
    101 
    102         } 
    103         //等待所有的dpc历程完事儿 
    104         while(InterlockedCompareExchange(&g_FinshedDPC,count,count) != count) 
    105         { 
    106             __asm nop 
    107         } 
    108         ExFreePoolWithTag(pdpc,'rm'); 
    109     } 
    110 
    111     return status; 
    112 } 
    113 
    114 VOID ShowIDTinfo( 
    115                  IN struct _KDPC  *Dpc, 
    116                  IN ULONG cpuNum, 
    117                  IN PVOID  SystemArgument1, 
    118                  IN PVOID  SystemArgument2) 
    119  { 
    120      IDTINFO idt_info; 
    121   
    122      __asm sidt  idt_info 
    123   
    124      PIDTENTRY pIDTen =( PIDTENTRY)MAKELONG(idt_info.LowIDTbase,idt_info.HiIDTbase); 
    125      PIDTENTRY pIDTtmp; 
    126      ULONG addr; 
    127   
    128      for (ULONG i=0;i<0xFF;i++) 
    129      { 
    130          pIDTtmp = &pIDTen[i]; 
    131          addr = MAKELONG(pIDTtmp->LowOffset,pIDTtmp->HiOffset); 
    132         DbgPrint("CPU:%d       Index:%d       Addr:0x%x   DPL:%d\n",cpuNum,i,addr,pIDTtmp->DPL);         
    133      } 
    134 
    135     InterlockedIncrement(&g_FinshedDPC); 
    136   
    137  }

    恩,就这样,利用dpc可以指定执行的cpu数目来搞。

这篇关于IDT检测(支持多核cpu,兼容xp vista)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/447462

相关文章

定价129元!支持双频 Wi-Fi 5的华为AX1路由器发布

《定价129元!支持双频Wi-Fi5的华为AX1路由器发布》华为上周推出了其最新的入门级Wi-Fi5路由器——华为路由AX1,建议零售价129元,这款路由器配置如何?详细请看下文介... 华为 Wi-Fi 5 路由 AX1 已正式开售,新品支持双频 1200 兆、配有四个千兆网口、提供可视化智能诊断功能,建

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

MySQL的cpu使用率100%的问题排查流程

《MySQL的cpu使用率100%的问题排查流程》线上mysql服务器经常性出现cpu使用率100%的告警,因此本文整理一下排查该问题的常规流程,文中通过代码示例讲解的非常详细,对大家的学习或工作有一... 目录1. 确认CPU占用来源2. 实时分析mysql活动3. 分析慢查询与执行计划4. 检查索引与表

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

使用Python检查CPU型号并弹出警告信息

《使用Python检查CPU型号并弹出警告信息》本教程将指导你如何编写一个Python程序,该程序能够在启动时检查计算机的CPU型号,如果检测到CPU型号包含“I3”,则会弹出一个警告窗口,感兴趣的小... 目录教程目标方法一所需库步骤一:安装所需库步骤二:编写python程序步骤三:运行程序注意事项方法二

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

zeroclipboard 粘贴板的应用示例, 兼容 Chrome、IE等多浏览器

zeroclipboard单个复制按钮和多个复制按钮的实现方法 最近网站改版想让复制代码功能在多个浏览器上都可以实现,最近看网上不少说我们的代码复制功能不好用的,我们最近将会增加代码高亮等功能,希望大家多多支持我们 zeroclipboard是一个跨浏览器的库类 它利用 Flash 进行复制,所以只要浏览器装有 Flash 就可以运行,而且比 IE 的