恢复2k xp得win32k.sys得KeServiceDescriptorTableShadow

使用WinDbg Preview解析Dump文件:操作指南详解 深入讲解如何使用WinDbg Preview打开和分析Dump文件,涵盖调试环境搭建、命令使用与故障排查技巧,帮助开发者高效定位系统崩溃问题。熟练掌握windbg preview工具将成为调试利器。 阅读详情
 

/**
* @file sdtreset.cpp
*
* @brief sdtreset.cpp, v 1.0.0 2005/10/25 11:48:42 sunwang
*
* details here.
* 草稿代码,命名混乱,重构时候使用java风格,getKiServiceTableAddrMM
* 其实找到了KeServiceDescriptorTable/Shadow的真实entry地址,直接调用就是了,没有必要去restore,
* restore的好处是禁止这个hooker干坏事如cnnic禁止别人的hooker
*
* @author sunwang <sunwangme@hotmail.com>
*/
#include "oshack.h"       //common header
#include "krnlio.h"       //krnl file io
#include "fsdreset.h"      //pe analysis and fsd restore routine

PBYTE getKiServiceTableAddrMM()
{
return KeServiceDescriptorTable[0].ServiceTable;
}

//xp是KeServiceDescriptorTableShadow=KeServiceDescriptorTable-40h
//2k是KeServiceDescriptorTableShadow=KeServiceDescriptorTable+E0h
PBYTE getW32pServiceTableAddrMM()
{
PSERVICE_DESCRIPTOR_TABLE KeServiceDescriptorTableShadow;

//for xp
if(gKernelVersion==WINXP)
   KeServiceDescriptorTableShadow=(PCHAR)KeServiceDescriptorTable-0x40;
//for 2k
else if(gKernelVersion==WIN2K)
   KeServiceDescriptorTableShadow=(PCHAR)KeServiceDescriptorTable+0xE0;
//noway here now,maybe WIN2K3
else
   return NULL;

return KeServiceDescriptorTableShadow[1].ServiceTable;
}

PBYTE getW32kBaseAddrMM()
{
return MyGetModuleBaseAddress("win32k.sys");
}

PBYTE getKernalBaseAddrMM()
{
return MyGetModuleBaseAddress("ntoskrnl.exe");
}

//xp下win32k并不是长驻内存的,直接用它的内存镜像分析PE有问题
//ntoskrnl.exe是长驻内存的,直接用它的内存镜像分析PE没问题
//问题不是这个,见下面老长的注释,读文件也可以,读内存也可以
//只要不读win32k
/*
Bug Check 0x50: PAGE_FAULT_IN_NONPAGED_AREA
The PAGE_FAULT_IN_NONPAGED_AREA bug check has a value of 0x00000050.
This indicates that invalid system memory has been referenced.
*/
/*
直接读硬盘文件算了,SizeOfHeaders<=0x380,我读个4k出来总可以了吧,4k=0x1000
然后分析头
*/
PBYTE getW32kBaseAddrHD(PBYTE imageRawAddrMM)
{
return GetDriverBaseAddrHD(imageRawAddrMM);
}

PBYTE getKernalBaseAddrHD(PBYTE imageRawAddrMM)
{
return GetDriverBaseAddrHD(imageRawAddrMM);
}

//id = *(导出函数的地址+1)
//内部函数的话,就只能手动填了,如NtUserSetWindowsHookEx,2k:1212,xp:1225
ULONG getServiceEntryAddrReal(ULONG id)
{
char imagePath[256];
int handle;
ULONG rawoffset,value,rva;
PBYTE imageBaseAddrMM,imageBaseAddrHD,serviceTableAddrMM,imageRawAddrMM;

//init
value=0;
RtlZeroMemory(imagePath,256);

//win32k
if((id&0x3fff)>>12 == 1)
{
   DebugPrint(("getAPIAddrReal of win32k/n"));

   //reloc后的baseAddr
   imageBaseAddrMM=getW32kBaseAddrMM();
   DebugPrint(("imageBaseAddrMM:0x%08x/n",imageBaseAddrMM));

   //reloc后的W32pServiceTable
   serviceTableAddrMM=getW32pServiceTableAddrMM(); //va,should change to raw-addr
   DebugPrint(("serviceTableAddrMM:0x%08x/n",serviceTableAddrMM));

   //reloc后的entry的rva,注意不是函数本身的rva
   rva=serviceTableAddrMM+(id&0xfff)*4-imageBaseAddrMM;//rva
   DebugPrint(("rva:0x%08x/n",rva));

   //读取文件头
   //MyGetModuleImageName("win32k.sys",imagePath);
   strcpy(imagePath,gSystemRoot);
   strcat(imagePath,"//system32//win32k.sys");
   DebugPrint(("imagePath:%s/n",imagePath));
   imageRawAddrMM=ExAllocatePool(NonPagedPool,0x1000);
   handle = krnl_open(imagePath,0,KernelMode);
   if(handle)
   {
    DebugPrint(("krnl_open ok/n"));
    krnl_read_offset(handle,imageRawAddrMM,0x1000,0);//va (related to imageBaseAddrHD)
    krnl_close(handle);
   }
   DebugPrint(("imageRawAddrMM:0x%08x/n",imageRawAddrMM));

   //下面遍历所有的section,看rva在哪个section,然后根据section的RVA-VirtualAddress(RVA)+PointerToRawData就
   //得到了rawoffset
   rawoffset=RVA2RawOffset(imageRawAddrMM,rva);
   DebugPrint(("rawoffset:0x%08x/n",rawoffset));

   //读取value,这是reloc前的va
   handle = krnl_open(imagePath,0,KernelMode);
   if(handle)
   {
    DebugPrint(("krnl_open ok/n"));
    krnl_read_offset(handle,&value,4,rawoffset);//va (related to imageBaseAddrHD)
    krnl_close(handle);
   }
   DebugPrint(("value va (related to imageBaseAddrHD):0x%08x/n",value));

   //reloc前的baseAddr
   imageBaseAddrHD=getW32kBaseAddrHD(imageRawAddrMM);
   DebugPrint(("imageBaseAddrHD:0x%08x/n",imageBaseAddrHD));

   //reloc后的地址
   value=value-(ULONG)imageBaseAddrHD;//rva
   DebugPrint(("value rva:0x%08x/n",value));
   value=value+(ULONG)imageBaseAddrMM;//va (relate to iamgeBaseAddrMM)
   DebugPrint(("value va (related to iamgeBaseAddrMM real):0x%08x/n",value));

   //下面这句有问题,直接读了serviceTableAddrMM的entry地址,真他妈妈的要命,why???
   //其实不用读什么硬盘文件,直接使用内存的文件头就是了
   //就是不能引用KeServiceDescriptorTableShadow中win32k的地址,我日
  
   /*
   Hello:

   I have a problem related to the theme you have been speaking of. I hook
   both KeServiceDescriptorTable and KeServiceDescriptorTableShadow because I
   need to monitorize some ntoskrnl and user/gdi services. The driver works
   fine until I tested it in WXP. The problem es that the second entry in
   KeServiceDescriptorTableShadow (that for NtUserxxx services for example)
   has an address (some similar to B79Fxxxx) and when I try to access this
   for patching the shadow service table, I get a Bug Check 0x50:
   PAGE_FAULT_IN_NONPAGED_AREA.

   I have disassembled Mark Russinovich's RegMon and I have tried to map that
   memory through and MDL and then MmBuildMdlForNonPagedPool and
   MmMapLockedPages as he does but I get the same bug check in
   MmBuildMdlForNonPagedPool. Does anybody how to acomplish this task? I have
   not the same problem when I map the index 0 table (NtXxxx services)... it
   works fine.

   Thanks in advance,
   Jose Vicente.
   */

   /*
   Try not mapping it in System process context, or any process context which does
   not use GDI/user interface. I believe the address is part of the session space.
   If you try mapping it in the process context of an app or service which uses
   user32 or gdi calls it works fine. Hope this helps you.
   */

   /*
   Thank you very much, Srin

   The only problem is that I don't know how to do that inside a driver. How
   can I ensure that I'm running within the context of a given application?

   Best regards,
   Jose Vicente.
   */

   /*
   Jose,
   I believe you have a service or app along with the driver in your
   product. When either of these is starting send an IOCTL to your driver and in
   the dispatch routine of this IOCTL do the required. As you are sending the
   IOCTL directly to your driver/device object, in the driver's dispatch routine
   you can be sure that you are executing in the process context which sent you
   the IOCTL.
  
   Have fun,
   Srin.
   */

   /*
   Srin,

   Thank you very much for your answer but I have found an alternative
   solution (in any case actually I haven't a helper application since my
   driver reads the configuration from system registry and that information is
   updated through domain policies). I have exploited the fact that I'm
   monitorizing the process creation/destruction and image loading to hook the
   loading of CSRSS process and thus touching the system services table at that
   moment.

   Best regards,
   Jose Vicente.
   */
   //PsSetCreateProcessNotifyRoutine / PsSetCreateThreadNotifyRoutine / PsSetLoadImageNotifyRoutine
   //并不需要映射,只要在上下文就可以了,奶奶的。
   {
    PCHAR tempEntry=serviceTableAddrMM+(id&0xfff)*4;
    if(MmIsAddressValid(tempEntry))
    {
     DebugPrint(("value va (related to iamgeBaseAddrMM now):0x%08x/n",*(ULONG*)tempEntry));
    }
    //并不需要映射,只要在上下文就可以了,奶奶的。
    else
    {
//     ULONG attachedGDIProcessID=1144;
//     EPROCESS attachedGDIProcess;
     PMDL mdl;
     PCHAR kernelVA;

     DebugPrint(("fuck,a page fault will occur for a read or write operation at a given virtual address"
      ":0x%08x/n",tempEntry));

     //AttachProcess这个方法可以,但是在DriverEntry里面不好测试,faint
/*
     if(NT_SUCCESS(PsLookupProcessByProcessId((PVOID)attachedGDIProcessID,&attachedGDIProcess)))
     {
      KeAttachProcess(&attachedGDIProcess);
      //
      // map
      //

      mdl=IoAllocateMdl(tempEntry,4,0,0,0);
      if(mdl)
      {
       DebugPrint(("IoAllocateMdl ok/n"));
       MmBuildMdlForNonPagedPool(mdl);
       kernelVA=MmMapLockedPages(mdl,KernelMode);
       if(kernelVA)
       {
        if(MmIsAddressValid(kernelVA))
        {
         DebugPrint(("value va (related to iamgeBaseAddrMM now):0x%08x/n",*(ULONG*)kernelVA));
        }
        else
        {
         DebugPrint(("fuck,a page fault will occur for a read or write operation at a given virtual address"
         ":0x%08x/n",kernelVA));
        }
        MmUnmapLockedPages(kernelVA,mdl);
       }
      }

      KeDetachProcess();
     }
*/
     //procmon,希望能成,测试成功.
     mdl=IoAllocateMdl(tempEntry,4,0,0,0);
     if(mdl)
     {
      DebugPrint(("IoAllocateMdl ok/n"));
      //如果不是gdi进程空间,一样死,fuck
      MmBuildMdlForNonPagedPool(mdl);
      kernelVA=MmMapLockedPages(mdl,KernelMode);
      if(kernelVA)
      {
       if(MmIsAddressValid(kernelVA))
       {
        DebugPrint(("value va (related to iamgeBaseAddrMM now):0x%08x/n",*(ULONG*)kernelVA));
       }
       else
       {
        DebugPrint(("fuck,a page fault will occur for a read or write operation at a given virtual address"
         ":0x%08x/n",kernelVA));
       }
       MmUnmapLockedPages(kernelVA,mdl);
      }
     }
    }
   }

   ExFreePool(imageRawAddrMM);
}
//ntoskrnl
else if((id&0x3fff)>>12 == 0)
{
   DebugPrint(("getAPIAddrReal of ntoskrnl/n"));

   //reloc后的baseAddr
   imageBaseAddrMM=getKernalBaseAddrMM();
   DebugPrint(("imageBaseAddrMM:0x%08x/n",imageBaseAddrMM));

   //reloc后的W32pServiceTable
   serviceTableAddrMM=getKiServiceTableAddrMM(); //va,should change to raw-addr
   DebugPrint(("serviceTableAddrMM:0x%08x/n",serviceTableAddrMM));

   //reloc后的entry的rva,注意不是函数本身的rva
   rva=serviceTableAddrMM+(id&0xfff)*4-imageBaseAddrMM;//rva
   DebugPrint(("rva:0x%08x/n",rva));

   //读取文件头
   strcpy(imagePath,gSystemRoot);
   strcat(imagePath,"//system32//ntoskrnl.exe");
   DebugPrint(("imagePath:%s/n",imagePath));
   imageRawAddrMM=ExAllocatePool(NonPagedPool,0x1000);
   handle = krnl_open(imagePath,0,KernelMode);
   if(handle)
   {
    DebugPrint(("krnl_open ok/n"));
    krnl_read_offset(handle,imageRawAddrMM,0x1000,0);//va (related to imageBaseAddrHD)
    krnl_close(handle);
   }
   DebugPrint(("imageRawAddrMM:0x%08x/n",imageRawAddrMM));

   //下面遍历所有的section,看rva在哪个section,然后根据section的RVA-VirtualAddress(RVA)+PointerToRawData就
   //得到了rawoffset
   rawoffset=RVA2RawOffset(imageRawAddrMM,rva);
   DebugPrint(("rawoffset:0x%08x/n",rawoffset));

   //读取value,这是reloc前的va
   handle = krnl_open(imagePath,0,KernelMode);
   if(handle)
   {
    DebugPrint(("krnl_open ok/n"));
    krnl_read_offset(handle,&value,4,rawoffset);//va (related to imageBaseAddrHD)
    krnl_close(handle);
   }
   DebugPrint(("value va (related to imageBaseAddrHD):0x%08x/n",value));

   //reloc前的baseAddr
   imageBaseAddrHD=getKernalBaseAddrHD(imageRawAddrMM);
   DebugPrint(("imageBaseAddrHD:0x%08x/n",imageBaseAddrHD));

   //reloc后的地址
   value=value-(ULONG)imageBaseAddrHD;//rva
   DebugPrint(("value rva:0x%08x/n",value));
   value=value+(ULONG)imageBaseAddrMM;//va (relate to iamgeBaseAddrMM)
   DebugPrint(("value va (related to iamgeBaseAddrMM real):0x%08x/n",value));
   //下面这句有问题,直接读了serviceTableAddrMM的entry地址,真他妈妈的要命,why???
   //其实不用读什么硬盘文件,直接使用内存的文件头就是了
   //就是不能引用KeServiceDescriptorTableShadow中win32k的地址,我日
   {
    PCHAR tempEntry=serviceTableAddrMM+(id&0xfff)*4;
    if(MmIsAddressValid(tempEntry))
    {
     DebugPrint(("value va (related to iamgeBaseAddrMM now):0x%08x/n",*(ULONG*)tempEntry));
    }
    else
    {
     DebugPrint(("fuck,a page fault will occur for a read or write operation at a given virtual address"
      ":%0x%08x/n",tempEntry));
    }
   }

   ExFreePool(imageRawAddrMM);
}

return value;
}

Win64 驱动内核编程-22.SHADOW SSDT HOOK(宋孖健) SHADOWSSDTHOOK HOOK和UNHOOKSHADOWSSDT跟之前的HOOK/UNHOOKSSDT类似,区别是查找SSSDT的特征码,以及根据索引计算函数地址的公式,还有一个就是吧跳转函数写在什么位置,SSDT的时候是写在蓝屏函数里了。 一、获得wKeServiceDescriptorTableShadow的地址 这个跟获得KeServi... 阅读详情

相关推荐

硬盘测试修复工具-HDD SCAN FOT WIN2K-XP-v27

硬盘测试修复工具-HDD SCAN FOT WIN2K-XP-v27 XP下超级好用的HDD硬盘测试软件,测试数据精准。

蓝屏 Dump文件分析方法

WinDbg使用有点麻烦,还要符号表什么的。试了下,感觉显示很乱,分析的也不够全面。。。 试试其他的吧!今天电脑蓝屏了,就使用其dump文件测试,如下: 1、首先,最详细的,要属Osr Online这个在线分析网站了: 打开其分析地址:http://www.osronline.com/page.cfm?name=analyze 下拉,找到上传按钮(上图),将需要分析的dump文件浏览上...

weixin_30622181的博客 1791

VLOOKUP_fixed.py

VLOOKUP_fixed.py

win11遇到win32kbase.sys蓝屏解决方法;(超级详细,不懂的请私信up主)

win11win32kbase.sys蓝屏解决方法

私信up主,有惊喜 12万+

YOLO26算法心电图十二导联目标检测+训练好的模型+368张数据集+pyqt可视化界面.zip

附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[导联I(I), 导联II(II), 导联III(III), 胸导联V1(V1), 胸导联V2(V2), 胸导联V3(V3), 胸导联V4(V4), 胸导联V5(V5), 胸导联V6(V6), 加压肢体导联aVF(aVF), 加压肢体导联aVL(aVL), 加压肢体导联aVR(aVR)] · 训练集:313 张 · 验证集:37 张 · 测试集:18 张 · 总计:368 张 该数据集聚焦于临床心电图信号的精准识别与定位,其核心检测目标为标准12导联心电图中的各个独立导联波形区域,涵盖肢体导联(I、II、III)与加压肢体导联(aVR、aVL、aVF),以及胸前导联(V1至V6),适用于心电图自动分析系统中对各导联位置的快速准确标注与分类。数据采集场景真实还原了医院心电图室或急诊监护环境下的标准心电图记录纸,波形清晰、基线稳定,具有高度临床参考价值。... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 57 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9708** mAP50-95 | 0.6344 Precision | 0.8990 Recall | 0.9191 train/box_loss | 1.2231 train/cls_loss | 0.9703 val/box_loss | 1.2779 val/cls_loss | 0.... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。

企业级AI助手平台 开箱即用的全栈AI平台,支持多智能体协同、Supervisor模式编排、多种决策模式、RAG技术和流程编排能力 支持多厂商大模型统一接入与管理,安全可控的企业知识库与高精度检索优化

企业级AI应用开发框架,支持多厂商大模型统一接入与管理,安全可控的企业知识库与高精度检索优化能力,提供可视化流程编排、自主决策智能体与多智能体协同调度,兼容主流 Agent Skill 协议,帮助企业与开发者零门槛快速构建安全、高效、可落地的AI智能体应用与行业解决方案。

蓝屏报错:win32kbase

似乎没有问题,接下来看具体报错原因nt!先尝试sfc /scannow扫描电脑看看有无什么问题。尝试检查C盘系统盘有无错误,下次启动再更新。

m0_61134493的博客 552

基于动态窗口法DWA的机器人路径规划研究(Matlab代码实现)

内容概要:本文系统研究了基于动态窗口法(DWA)的机器人局部路径规划算法,深入剖析其在动态环境中实现自主避障与实时轨迹优化的核心机制。文章详细阐述了DWA算法的速度空间采样策略、轨迹预测模型、动力学约束处理及多目标代价函数的设计原理,并通过构建完整的Matlab仿真框架验证算法有效性。结合典型场景的仿真实验,展示了机器人在复杂障碍物环境下如何实时生成安全、平滑且符合运动学约束的最优路径,充分体现了DWA在移动机器人导航中的实用性与鲁棒性。; 适合人群:具备机器人运动规划基础知识和Matlab编程能力,从事智能移动机器人、自动驾驶或服务机器人研发的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入理解DWA算法的理论基础与实现细节;②掌握机器人局部路径规划的仿真实现方法;③为实际机器人系统的导航模块开发提供可复用的算法原型与代码参考;④作为进一步研究高级导航算法(如TEB、MPC)的技术基础。; 阅读建议:建议结合提供的Matlab代码逐模块分析与调试,重点关注速度采样、轨迹积分、障碍物距离计算及代价评估等关键环节,通过调整参数在不同地图环境中进行对比实验,以深刻把握算法性能与参数之间的关系,进而提升对实时路径规划系统设计的理解与应用能力。

SSDT hook技术中KeServiceDescriptorTable 结构及获取

KeServiceDescriptorTable 结构  KeServiceDescriptorTable:是由内核(Ntoskrnl.exe)导出的一个表,这个表是访问SSDT的关键,具体结构是    typedef struct ServiceDescriptorTable {    PVOID ServiceTableBase;    PVOID ServiceCounterTabl

namelcx的专栏 2302

超详细!思岚S2激光雷达hector_mapping建图

使用思岚S2激光雷达,在ros平台上利用hector_mapping功能包实现建图功能

m0_50965539的博客 5591

光栅衍射有入射角时_偏振光栅的衍射角度及衍射效率测量

偏振光栅是一种基于入射光的偏振态实现选择性分光的衍射光学元件,衍射角度取决于光栅线数。通过控制入射光的偏振态,偏振光栅能够调控正一阶和负一阶之间的能量分布。当入射光束偏振态不同时,偏振光栅具有不同的衍射特性。理想的偏振光栅:当入射光为右旋圆偏振光时,只有+1级衍射光,衍射光为左旋圆偏振光。当入射光为左旋圆偏振光时,只有-1级衍射光,衍射光为右旋圆偏振光。当入射光为非圆偏振光时,偏振光栅同...

weixin_39552768的博客 6003

【Python】No module named ‘win32com‘解决方法

在pycharm中运行某py,提示 E:\Python\python.exe F:/浏览器下载/ReplaceDocxAndXlsxAndTxt/ReplaceDocxAndXlsxAndTxt/replaceDocxAndXlsxAndTxt.py Traceback (most recent call last): File "F:\浏览器下载\ReplaceDocxAndXlsxAndTxt\ReplaceDocxAndXlsxAndTxt\replaceDocxAndXlsxAndTxt.p

wwwcaifeng的博客 3万+

手把手教你:在联想/戴尔笔记本上安装华为电脑管家,实现多屏协同(附详细避坑步骤)

本文详细指导如何在联想、戴尔等非华为笔记本上安装华为电脑管家,实现多屏协同功能。从硬件兼容性检查到定制化安装流程,再到功能调优与异常处理,提供了一套完整的解决方案,帮助用户突破品牌限制,享受华为生态的高效办公体验。

weixin_30251829的博客 842

研究心得-恢复2k xp得win32k.sys得KeServiceDescriptorTableShadow

/** * @file sdtreset.cpp  * * @brief sdtreset.cpp, v 1.0.0 2005/10/25 11:48:42 sunwang * * details here. * 草稿代码,命名混乱,重构时候使用java风格,getKiServiceTableAddrMM * 其实找到了KeServiceDescriptorTable/Shadow的真实entry

明日帝国的专栏-技术改进生活 5636

GEE——土地利用分类之监督分类

利用GEE做监督分类,以武汉市为例。 训练器我们选择随机森林;数据选择Landsat-8;训练样本使用的是GEE提供的一种,它把地表分为三类:水体、植被和城市用地。 选择训练样本 用要素集来标记训练样本。每个要素都有一个landcover 的属性,0表示城市用地,1表示植被,2表示水体。 对影像进行分类 其中一部分进行分类器的训练,还有一部分留下来做精度验证。 输出影像及混淆矩阵 print(LABEL_DATA); var wuhan = ee.FeatureCollection('users/

qq_41600680的博客 1万+

《Zephyr OS 入门与实战》第5章:内存管理策略

【代码】《Zephyr OS 入门与实战》第5章:内存管理策略。

2301_79143213的博客 349

SSDT

2、系统服务调度表SSDT及SSSDT Shadow 系统服务:由操作系统提供的一组函数(内核函数),API可以间接或者直接的调用系统服务。操作系统以动态链接库(DLL)的形式提供API。 SSDT:系统服务调度表(System  Service  Dispatch Table),该表可以基于系统服务编号进行索引,来定位函数内存地址。 SSPT:系统服务参数表(System  Service

3557

中国国家级地面气象站基本气象要素日值数据集(V3.0)

气温数据TEM, 包括站点编号(sid), 纬度(lat), 经度(long), 高程(elev), 年(year), 月(month),日(day), 平均气温(tmean), 最高气温(tmax), 最低气温(tmin)气压数据PRS, 包括站点编号(sid), 纬度(lat), 经度(long), 高程(elev), 年(year), 月(month),日(day), 平均气压(pmean), 最高气压(pmax), 最低气压(pmin)中国国家级地面气象站基本气象要素日值数据集(V3.0)

J_Giser的博客 3891

windows10 No module named ‘win32con‘ 亲测解决

问题描述  在windows安装好detectron2之后跑程序,结果报错,错误信息如下: ModuleNotFoundError: No module named 'win32con' 截图: 在网上百度、谷歌了好久,都是说pip install pywin32 和pip install pypiwin32就能解决问题。而我也发现我的环境中是存在这两模块的,截图如下: 网上的这些方法都不能解决我的问题,在找寻很久之后终于找到一个解决办法 解决办法  在pywin32的Github官网下载pywin3

weixin_43937959的博客 6926

FPGA实现PID算法

PID 控制器表达式如下(引用某硕士论文 《基于FPGA的PID控制器研究与实现》): 其中,Kp为比例增益,Ti为积分时间常数,Td为微分时间常数,u(t)为控制量,e(t)为偏差。 在数字控制系统中,PID控制规律的实现必须用数值逼近的方法。当采样周期相当短时,用求和代替积分、用后向差分代替微分,使模拟PID离散化变为差分方程。 本文使用并行结构来实现。具有延时小,计算速度快的特点,但需要资源比较多。 利用图3.2所示并行结构实现方法 ,进一步将3.8式分解: ...

nxin168的博客 1万+

Spring Boot 集成 Spring AI:实现可被大模型调用的 MCP Server

本文介绍了如何利用Spring AI框架构建MCP Server,使大模型能够调用业务系统的接口。主要内容包括:1)MCP协议简介,分为MCP Server和Client两部分;2)环境配置要求,需Java 17+和Spring Boot 3.5.0+;3)实现步骤,通过@McpTool注解将Service方法暴露给大模型调用;4)使用Cherry Studio作为MCP Client测试效果,成功实现订单查询和下单功能。本文仅实现MCP Server部分,后续将介绍如何开发MCP Client。

iioSnail的博客 2125

三次蓝屏对内核崩溃日志的分析记录

下面的所有内容都是WinDBG的输出内容 //后跟的所有内容都是针对下一行具体项的具体解释 Microsoft ® Windows Debugger Version 6.12.0002.633 AMD64 Copyright © Microsoft Corporation. All rights reserved. Loading Dump File [C:\Windows\Minidump\103021-8359-01.dmp] Mini Kernel Dump File: Only register

无情的搬砖人的Blog 1万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

关于windbg不能正确显示KeServiceDescriptorTableShadow的问题

参考了一下网上的文档,其实就是符号的问题 可以在symbol path里加入 srv*E:\WinDDK*http://msdl.microsoft.com/download/symbols E:\\WinDDK 是你的符号表要保存的硬盘路径 在windbg命令行下输入: kd>  !sym noisy          //命令希望WinDBG在获得符号的时候取得更多的信息 kd> 

u011019337的专栏 1062

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

上一篇: ring3 hide file reg service
下一篇: vbs编程点滴
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值