学习1下mj的驱动 整理1下部分代码

驱动编程-ssdt hook--系统服务表 整理下自己的驱动编程。 ssdt是系统服务表,每个window系统都会维护自己的系统服务表。我们可以使用kernel detective看下ssdt表。 以openProcess为例子: 开windbg kd> u nt!ZwOpenProcess nt!ZwOpenProcess: 804ff720 b87a000000      mov     eax,7Ah  //7A 8 阅读详情
 学习1下mj的驱动 整理1下部分代码
争取每天逆向几个函数 慢慢把他搞完
ARP的发包是处于相当底层的地方了 还要花点时间学习1下
#define DEVICE_NAME L"//Device//360AntiARP" //Driver Name
#define LINK_NAME L"//DosDevices//360AntiARP"  //Link Name

#define DEVICE_NAME1002 L"//Device//360AntiARP1002" //Driver Name
#define LINK_NAME1002 L"//DosDevices//360AntiARP1002"  //Link Name
驱动创建DriverEntry
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObj, PUNICODE_STRING pRegistryString)
{
    NTSTATUS status = STATUS_SUCCESS;
    UNICODE_STRING ustrLinkName;
    UNICODE_STRING ustrDevName;   
    PDEVICE_OBJECT pDevObj;
   
if (*InitSafeBootMode > 0)
{
    //系统处于 Safe Mode.
return  STATUS_UNSUCCESSFUL;
}

    // Create dispatch points for device control, create, close.
    pDriverObj->MajorFunction[IRP_MJ_CREATE] = AntiARPDispatchRoutine;
    pDriverObj->MajorFunction[IRP_MJ_CLOSE] = AntiARPDispatchRoutine;
    pDriverObj->MajorFunction[IRP_MJ_DEVICE_CONTROL] = AntiARPDispatchRoutine;
    pDriverObj->DriverUnload = DriverUnload;
    //
    dprintf("[360AntiARP] DriverEntry: %S/n",pRegistryString->Buffer);

    // Create dispatch points for device control, create, close.
    pDriverObj->MajorFunction[IRP_MJ_CREATE] = DispatchCreate;
    pDriverObj->MajorFunction[IRP_MJ_CLOSE] = DispatchClose;
    pDriverObj->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DispatchIoctl;
    pDriverObj->DriverUnload = DriverUnload;
    //

    RtlInitUnicodeString(&ustrDevName, DEVICE_NAME);
   
    status = IoCreateDevice(pDriverObj,
                0,
                &ustrDevName,
                FILE_DEVICE_UNKNOWN,
                0,
                FALSE,
                &pDevObj);

    dprintf("[360AntiARP] Device Name %S",ustrDevName.Buffer);

    if(!NT_SUCCESS(status))
    {
        dprintf("[360AntiARP] IoCreateDevice = 0x%x/n", status);
        return status;
    }

   
    RtlInitUnicodeString(&ustrLinkName, LINK_NAME);

    status = IoCreateSymbolicLink(&ustrLinkName, &ustrDevName); 
    if(!NT_SUCCESS(status))
    {
        dprintf("[360AntiARP] IoCreateSymbolicLink = 0x%x/n", status);
        IoDeleteDevice(pDevObj); 
        return status;
    }
   
    dprintf("[360AntiARP] SymbolicLink:%S",ustrLinkName.Buffer);

    RtlInitUnicodeString(&ustrDevName, DEVICE_NAME1002);
   
    status = IoCreateDevice(pDriverObj,
                0,
                &ustrDevName,
                FILE_DEVICE_UNKNOWN,
                0,
                FALSE,
                &pDevObj);

    dprintf("[360AntiARP] Device Name %S",ustrDevName.Buffer);

    if(!NT_SUCCESS(status))
    {
        dprintf("[360AntiARP] IoCreateDevice = 0x%x/n", status);
        return status;
    }

   
    RtlInitUnicodeString(&ustrLinkName, LINK_NAME1002);

    status = IoCreateSymbolicLink(&ustrLinkName, &ustrDevName); 
    if(!NT_SUCCESS(status))
    {
        dprintf("[360AntiARP] IoCreateSymbolicLink = 0x%x/n", status);
        IoDeleteDevice(pDevObj); 
        return status;
    }
   
    dprintf("[360AntiARP] SymbolicLink:%S",ustrLinkName.Buffer);

AllocatePool();
PsSetLoadImageNotifyRoutine(NotifyRoutine);
QuerySystemModuleSize();








    return STATUS_SUCCESS;
}

DriverUnload函数
VOID DriverUnload(PDRIVER_OBJECT pDriverObj)
{   
    UNICODE_STRING strLink;
    RtlInitUnicodeString(&strLink, LINK_NAME);
    //
    // Delete the symbolic link
    //
    IoDeleteSymbolicLink(&strLink);
    //
    // Delete the device object
    //
    IoDeleteDevice(pDriverObj->DeviceObject);
    dprintf("[360AntiARP] Unloaded/n");

    //    UNICODE_STRING strLink;
    RtlInitUnicodeString(&strLink, LINK_NAME1002);
    //
    // Delete the symbolic link
    //
    IoDeleteSymbolicLink(&strLink);
    //
    // Delete the device object
    //
    IoDeleteDevice(pDriverObj->DeviceObject);
    dprintf("[360AntiARP] Unloaded/n");
}

NTSTATUS
AntiARPDispatchRoutine(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    )
{
    NTSTATUS            ntStatus = STATUS_SUCCESS;
    PIO_STACK_LOCATION  irpSp;
    ULONG              CtlCode;
    PVOID              InputBuffer;
    PVOID              OutputBuffer;
    PIO_STATUS_BLOCK    ioStatus;

    ioStatus = &Irp->IoStatus;
    ioStatus->Status = ntStatus;
    ioStatus->Information = 0;

    irpSp = IoGetCurrentIrpStackLocation( Irp );
    CtlCode = irpSp->Parameters.DeviceIoControl.IoControlCode;
    if (irpSp->MajorFunction != IRP_MJ_DEVICE_CONTROL)
    {
        goto End;
    }

    InputBuffer = Irp->AssociatedIrp.SystemBuffer;
    if ((CtlCode & METHOD_NEITHER) == METHOD_NEITHER)
    {
        OutputBuffer = Irp->UserBuffer;
    }
    else
    {
        OutputBuffer = Irp->AssociatedIrp.SystemBuffer;
    }

    AntiARPIoControl(irpSp->FileObject,
        1,
        InputBuffer,
        irpSp->Parameters.DeviceIoControl.InputBufferLength,
        OutputBuffer,
        irpSp->Parameters.DeviceIoControl.OutputBufferLength,
        CtlCode,
        ioStatus,
        DeviceObject);

End:
    IoCompleteRequest(Irp, IO_NO_INCREMENT);
    return ntStatus;
}
VOID
DisableWriteProtect(
    VOID
    )
{
    __asm
    {
        push    eax
        mov    eax, cr0
        mov    OldCr0, eax
        and    eax, 0FFFEFFFFh
        mov    cr0, eax
        pop    eax
        cli
    }
}

__inline
VOID
EnableWriteProtect(
    VOID
    ) 
{
    __asm
    {
        sti
        push    eax
        mov    eax, OldCr0
        mov    cr0, eax
        pop    eax
    }
}

驱动安装的时候会建立2个设备 并且设置PsSetLoadImageNotifyRoutine监视
接下来hoo了 IoCreateDevice 首先使用1个RtlImageDirectoryEntryToData函数 当然在此之前先用MmGetSystemRoutineAddress获得了函数所在地址 这个函数作用

                            ; RtlImageDirectoryEntryToData
                            ; come form: http://bbs.pediy.com/showthread.php?p=254245
                            ; 反汇编的结果如下:
                            ; DWORD RtlImageDirectoryEntryToData(DWORD imagebase,BOOL bVA,DWORD dwDataDirectoryIndex, DWORD *size);
                            ;
                            ; 其中,imagebase 为模块基址, bVA为真表示函数返回一个VA, 否则函数返回一个PointerToRawData(减去基址就是在文件中的位置),
                            ; dwDataDirectoryIndex为索引值, 从0到f,如0表示导出表。
                            ; size为接受这项数据目录大小的指针。
                            ;
                            ; 如果该索引不存在, 那么函数返回0, 并且不改变size指针的值。

简单的说 就是获取IoCreateDevice 的所在地址不过mj是在模块中搜索的方式获取的
接下来 经过一些VA转换计算 获得真实地址
KeInitializeSpinLock + KfAcquireSpinLock+DisableWriteProtect
修改完毕以后EnableWriteProtect+KfReleaseSpinLock

相关说明 
-------------------------------------------- 
1.3.8同步

  如果驱动程序有可能在某时刻有多个部分在同时运行,比如有中断处理过程,或存在多个设备等,对公共数据或代码的访问就需要同步。方法有:

i)自旋锁(SpinLock)

  驱动程序可以在初始化时调用KeInitializeSpinLock创建该对象。在任何代码段访问被保护的数据之前,先调用 KeAcquireSpinLock试图获得该对象的所有权,如果成功,该段代码被系统提升至 DISPATCH_LEVEL,进行数据访问。访问完毕后须调用KeRelease SpinLock释放所有权,运行级别也被恢复。此方法只适用于同步运行级别小于等于DISP ATCH_LEVEL的代码,主要用于多CPU的情形。此外,还有一种中断自旋锁用于与中断处理过程同步,可以将较低级别的代码提升到需要与之同步的中断 DIRQL。

ii)控制器(Controller)

  该对象主要用于同步一个驱动程序中的多个设备,保证它们能顺序地访问特定的代码或数据。该对象在驱动程序初始化调用 IoCreateController被创建。设备在StartIo过程中调用IoAllocateController请求获得Controller对象的独占权。使用完后调用IoFreeController释放。驱动程序停止时调用IoDeleteController从内存删除该对象。该对象有一个指针ControllerExtension指向一块由驱动程序定义的结构,其中保存有此驱程序的公共数据。

iii)适配器(Adapter)

  该对象用于同步多个设备(不一定在一个驱动程序中)对DMA通道的使用。该对象在系统启动侦测硬件时自动被创建。驱动程序在初始化时调用 HalGetAdapter获得该对象的指针。设备在StartIo过程中调用IoAllocateAdapterChannel请求获得DMA通道的独占权,然后开始传输数据。使用完后调用IoFreeControllerChannel释放DMA通道。

iv)DPC

  由于DPC队列中的对象总是被系统顺序地处理,所以也可以将需要同步的代码做成Dpc过程,需要调用时将相应的DPC对象放到队列的末尾即可。

v)其他

  同用户模式的应用程序类似,驱动程序也可以使用多线程,也提供了一套用来同步的对象,如Event,Mutex,Semaphore,Timer,Thread。其中Event对象可以被命名,不同的驱动程序可以利用同名的Event对象同步对公共数据的访问。
PLECS栅极驱动建模:从理想源到参数化等效电路 在电力电子仿真中,功率开关器件的动态特性受栅极驱动回路影响显著,而理想脉冲源模型往往无法准确反映真实的开关过程。基于等效电路原理,将驱动芯片的传播延迟、输出阻抗、栅极电阻及寄生参数纳入建模,即可在系统级仿真中复现米勒平台、开关损耗和驱动振铃等关键现象。这一技术价值在于支持参数扫描与驱动电阻选型,显著提升损耗评估和热仿真的精度。应用场景覆盖功率变换器设计、死区时间验证以及SiC/GaN等宽禁带器件评估。本文以PLECS为例,介绍如何将栅极驱动从理想电压源替换为参数化子电路,并结合实际案例说明仿真结果对比与批量 阅读详情

相关推荐

基于MUJOCO与AUBO机械臂的强化学习路径规划实战解析

本文详细解析了如何利用MUJOCO物理引擎与AUBO机械臂进行强化学习路径规划的实战流程。内容涵盖从环境搭建、动作与观测空间设计、奖励函数构建,到选择SAC算法进行训练、处理逆运动学问题,并提供了关键的调优技巧与结果分析方法,为机器人智能控制提供了完整的实践指南。

weixin_29085865的博客 308

UsbStorage驱动开发

前段时间发现有网友在开发驱动的过程中遇到问题,所以今天我整理了一下我在写驱动中的一点心得。希望大家指导!    win2k的UsbStorage不需要驱动程序就能运行,但是如果我们的设备有特殊功能,像前几天有网友问的那种要显示自已的标号的。那么UsbStor.sys就不能满足我们的需求。当然如果要实现自己的功能,我们也只需要UsbStor.sys的基础上修改就行了!     USB磁盘驱动程序是一

Welcom to zougangx's blog 2651

REFACTOR-VLA:无监督学习构建类型化运动程序库,重构机器人行为学习

在具身智能领域,VLA(视觉-语言-动作)模型已成为连接感知、语言与机器人控制的主流范式,但端到端策略常面临数据标注成本高、行为不可解释、技能难以复用等工程挑战。无监督学习为从海量未标注轨迹中自动挖掘运动模式提供了新思路,它通过表示学习和时序分析发现技能边界,有效降低了对人工标签的依赖。当这些行为被进一步抽象为带显式约束和前置条件的“类型化运动程序库”时,机器人决策便从黑盒推理转变为可检查、可组合、可验证的程序化执行,显著提升了系统的可靠性与迁移能力。这种融合在工业分拣、家庭服务等长尾任务中极具应用前景,开

weixin_33946020的博客 1041

BigBlueButton 故障排查完全指南:从 bbb-conf --check 到 WebRTC 与 FreeSWITCH 的常见问题修复

本文是 BigBlueButton 管理员的系统性故障排查手册,基于官方 Troubleshooting Guide 并结合仓库源码深入展开。文章覆盖最核心的 `sudo bbb-conf --check` 诊断流程、bbb-webrtc-sfu/mediasoup 的媒体链路问题、FreeSWITCH 的 IPv6/调度/注册故障、安装与软件包问题、WebRTC 错误码(1001~1020)、网

gitblog_01036的博客 394

MJ-GE

MJ-GE

基于立创EDA的IP5389BZ+IP6829 100W有线15W无线带屏充电宝DIY全流程解析

本文详细解析了基于立创EDA平台,采用IP5389BZ和IP6829芯片DIY一款100W有线快充、15W无线充电并带显示屏的移动电源的全过程。内容涵盖核心功能规划、硬件选型、电路设计、PCB布局、焊接组装、分步调试以及软件逻辑,为电子爱好者提供了一份从原理到实践的完整指南,并重点强调了电池安全与IP6829供电电压等关键注意事项。

weixin_34374684的博客 307

航模舵机测试指南:以MJ911标舵为例解析中立点与回中精度标准

在固定翼、直升机与涡喷等模型动力系统中,舵机作为舵面控制的核心执行机构,其回中精度与中立点稳定性是影响飞行手感与安全的关键指标。PWM舵机通过脉宽信号映射输出角度,然而空载正常并不等于负载合格,电位器磨损或机械虚位往往在快速往复或振动后才暴露。以MJ911标舵为例,使用舵机测试仪、稳压电源与测温设备,按步骤检测中立点偏差、左右行程对称性、回中误差、堵转电流及温升,可帮助模友量化判断舵机健康度。同时,固定翼关注舵面联动一致性,直升机的斜盘舵机需匹配高刷新率,涡喷场景则对高温振动环境进行强化验证。本文提供了一套

weixin_34082854的博客 392

WRF后处理总结:wrf-python与NCL在WRF后处理中的基本应用——变量提取、计算与可视化

判断需要提取的变量与诊断量确定后,使用getvar函数进行提取。可使用ncdump-h命令查看wrfout中的变量,wrf中的诊断量分类也可从官方文档处查阅。判断绘图类型所需的可视化绘图类型,决定了你在WRF后处理中的计算步骤。1D点线图:ll_to_xy interpline2D填色图:interplevel3D剖面图:vinterp vertcross绘图、美化色标、XY轴、标签的设置等等。

weixin_43750300的博客 1万+

NT式驱动模版

llttllcc的专栏 719

Geant4学习一:写一个简单程序

1、 基本介绍

ccwwNUAA的博客 7697

海康/大华设备如何接入GB28181平台?最新2022版互联避坑指南

本文详细解析了海康/大华设备接入GB28181平台的最新2022版互联避坑指南,涵盖参数配置、实时视音频点播协议交互及典型故障排查。重点介绍了GB/T28181-2022标准下的设备编码规范、SIP服务器配置及媒体流保活机制,帮助工程团队高效解决设备离线和媒体流中断等问题。

weixin_30733003的博客 687

Windows 驱动开发笔记(一)

Windows 驱动开发笔记(一)Windows驱动开发较unix类的驱动开发要复杂一些。最近,在学windows开发。现在把学到的知识整理一下。做做笔记。1. 我使用的资料:《深入解析windows操作系统》《Programming the microsoft windows Driver Model》《Windows 2000/xp WDM 设备 驱动开发》武安河著《Linux 驱动开发》2.

bigbat的专栏 2808

Open3d (C++) RANSAC拟合圆柱(详细过程版)

实现了一种基于RANSAC算法的圆柱拟合方法。

点云侠的博客 239

事件程序驱动代码html,技术分享 - NT驱动程序与用户层程序基于事件EVENT实现同步通信...

背景之前我们在《NT驱动程序与用户层程序通信》这篇文章中讲了,用户层程序使用 DeviceIoControl 将 IOCTL 控制码、输入缓冲区、输出缓冲区传入到内核;内核响应 IRP_MJ_DEVICE_CONTRL 消息,并从 IRP 中获取传入的 IOCTL 控制码、输入缓冲区、输出缓冲区,以此实现数据的交互。但是,当内核层想主动传递数据到用户层,用户层又怎样才能知道呢?因为只有用户层知道内...

weixin_39828193的博客 324

基于遗传算法改进BP神经网络的电池容量SOC预测

,遗传算法BP神经网络能很好的实现对电池容量soc的训练和预测,BP神经网络是一种成熟的神经,相对于其他神经网络,拥有很多的训练函数,传递函数,可以调节的参数非常多,对各种问题都可以达到一个比较理想的效果,关键看如何调试参数,选择训练传递函数,遗传算法改进BP神经网络的初始权值阈值,达到改进BP神经网络的目的,从而更好的实现对电池容量SOC的预测

abc991835105的博客 768

Arcgis使用NDVI值遥感反演叶面积指数(LAI)

经验模型反演操作不难,主要是要多看文献,了解公式。本文中的公式我也不清楚是哪个作物的NDVI和LAI的关系(别人提供的),继续看文献整理吧。后续会在下面罗列更新一下主要公式。

所有专家都曾始于新手 8430

Windows驱动模型

Windows有两种驱动类型,一种是NT式驱动,另一种是WDM式驱动,两者最大不同是WDM式驱动支持即插即用(PNP)而NT式驱动则不支持。由于USB设备为即插即用设备,因此选择WDM为设计所用类型。   一、重要数据结构 Windows驱动中有两个重要的数据结构:DRIVER_OBJECT和DEVICE_OBJECT,两者结构中部分成员如下[19]:   typedef struct

日积月累 3283

光伏硅片瑕疵检测边缘计算方案:Java+YOLOv11n+GraalVM Native Image+树莓派5部署,工业级高可靠落地

本文提出了一种基于边缘计算的光伏硅片瑕疵检测方案,针对传统人工检测和云端AI方案的不足,采用Java+YOLOv11n+树莓派5的技术路线,实现了低延迟、高可靠的工业级检测。方案核心特点包括: 分层解耦的边缘架构,将感知、推理全链路下沉到树莓派5,端到端延迟<100ms; 创新性技术选型组合:Java 17+ONNX Runtime+GraalVM Native Image,内存占用<200MB; 安防级可靠性设计,支持断网缓存、看门狗守护、异常自动恢复等工业场景需求; 完全基于开源技术栈,硬件

2601_94871597的博客 474

米家XQG100MJ204超薄全嵌滚筒洗衣机实测:小户型安装避坑指南

在城市居住空间愈发紧凑的背景下,家电与定制柜体的整体融合已成为现代家装设计的高频需求。滚筒洗衣机作为大件电器,其安装深度、水电预留与柜体结构往往决定装修交付的顺畅度。传统10kg容量机型常因机身厚度过大而难以内嵌,致使许多具备全嵌条件的厨房或阳台空间被白白浪费。因此,在不牺牲容量的前提下压缩机身尺寸,形成超薄结构,同时兼顾进出水、通风与检修路径,是从工程层面破解嵌入式安装困局的关键。米家XQG100MJ204正是此类全嵌设计导向下的机型,以10kg容量适配统一板式柜体,更贴合小户型、旧房改造及精装空间的需求

weixin_34293141的博客 339

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

MJ vs SD:哪个是最好的 AI绘画工具?

AIGC技术的未来发展前景广阔,随着人工智能技术的不断发展,AIGC技术也将不断提高。未来,AIGC技术将在游戏和计算领域得到更广泛的应用,使游戏和计算系统具有更高效、更智能、更灵活的特性。同时,AIGC技术也将与人工智能技术紧密结合,在更多的领域得到广泛应用,对程序员来说影响至关重要。未来,AIGC技术将继续得到提高,同时也将与人工智能技术紧密结合,在更多的领域得到广泛应用。感兴趣的小伙伴,赠送全套AIGC学习资料和安装工具,包含AI绘画、AI人工智能等前沿科技教程,模型插件,具体看下方。

A2421417624的博客 1564

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Windows内核驱动开发实战:安装卸载、API图谱与安全防御

内核驱动是Windows系统底层运转的核心组件,其开发门槛不仅在于编写DriverEntry,更涉及驱动安装、系统API机制和安全防御体系的工程化思维。驱动以服务形式由SCM管理,理解INF文件与测试签名是部署前提;内核态开发需掌握UNICODE_STRING、LIST_ENTRY、ExAllocatePool2等基础API,并严格遵守IRQL层级,避免分页内存误用与死锁隐患。从安全视角看,64位系统的强制签名、PatchGuard等机制限制了传统Hook手法,开发者应善用进程、线程、注册表等受支持的回调接

weixin_29290379的博客 264

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

安装虚拟机(2024,被面试官问的网络安全-Framework难倒了

接着就可以通过【创建新的虚拟机】进行你所需要的操作系统的安装,安装的过程和在电脑硬件上安装操作系统基本一致,因为每个操作系统都有点不一样,所以这里就不写过程了(需要了解winXP,win7,win2003,win2008安装的同学,私信我),安装完成之后,需要进行以下几个操作:1,安装vmware tool,这一步就是安装操作系统的驱动程序。2,关闭防火墙,关闭自动更新。3,镜像快照,这是为了保留一份最佳的操作系统镜像,以便以后恢复系统使用。

m0_54816834的博客 430

MJ911标舵实测:从PWM信号到涡喷直升机固定翼的通用测试方法

舵机作为航模飞控系统的核心执行部件,其真实性能直接影响飞行安全与操控手感。很多爱好者仅凭型号与宣传参数判断舵机优劣,却忽略了批次差异、供电环境和负载状态带来的实际影响。要科学评估一只标准舵机,需要从PWM信号控制原理入手,掌握供电接线、行程扫描、回中精度检测、扭矩与电流实测等基础方法。通过固定翼线性度验证、直升机CCPM斜盘一致性测试、涡喷油门堵转耐力测试等场景化流程,可以全面暴露舵机潜在故障。本文以MJ911标舵为例,系统梳理一套可复用的地面测试标准,帮助飞手在装机前识别舵机卡顿、抖舵、回中偏差及供电波动

weixin_34127717的博客 453

【AIGC工作流】解构AI短剧生产管线:从手动调用DeepSeek+MJ,到Agent一站式自动化的演进

AI短剧Agent

linhx的专栏 1393

TRENCHSTOP Performance IGBT深度解析:从沟槽栅到栅极驱动的效率优化指南

IGBT作为电力电子变换器的核心功率器件,其导通损耗与开关损耗直接决定系统效率与热设计难度。在电机驱动、逆变电源等工业应用中,如何通过器件选型与驱动电路设计实现高效率与高可靠性,是工程师普遍关注的技术难题。TRENCHSTOP Performance系列采用沟槽栅+场截止层结构,在降低饱和压降VCE(sat)的同时显著抑制拖尾电流,并结合正温度系数特性简化并联均流设计。从栅极驱动电压选择、栅极电阻调优到米勒钳位保护,再到与SiC MOSFET的驱动差异对比,本文系统梳理了IGBT应用中的关键工程实践,为变频

weixin_33853827的博客 331
上一篇: 暴删文件之Xcb填充
下一篇: 安全搜索进程内存空间(一)
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值