Win2K下驱动程序的动态加载

瑞芯微RK3399K Android 10固件升级实战:从MaskRom模式到分区镜像烧写 本文详细介绍了瑞芯微RK3399K设备在Android 10固件升级过程中的实战操作,包括MaskRom模式救砖、工具链搭建、全盘与分区烧写技巧及常见错误解决方案。通过具体步骤和命令示例,帮助开发者高效完成固件升级,特别适合遇到设备变砖或需要定制分区的用户。 阅读详情

加载一个驱动程序,主要就是,在
SYSTEM/CurrentControlSet/Services 建一个键。
如:
SYSTEM/CurrentControlSet/Services/Twdm1
Type(1)
ErrorControl(0)
Start(3)

多数驱动程序都是通过设置 Start 的值为 0, 1, 2 。
在系统启动的过程中加载驱动程序。

在 win2k 下驱动程序的加载处理上述方式外,
还可以在应用程序里用 Service Api 实现,驱动程序的动态加载。
这时候的 Start 为 3 。

所用到的 Api 为:
OpenSCManager, CreateService, OpenService, StartService
ControlService, DeleteService, CloseServiceHandle

其中需要说明的是:
CreateService :他通过参数在注册表里自动创建驱动程序需要的键值。
DeleteService :他自动删除驱动程序在注册表里创的键值。

下面是一个,简单的例子:

应用程序:

#include "stdafx.h"
#include
#include
#include

void DelSvr( char * szSvrName ); //自动卸载驱动程序。

int main(int argc, char* argv[])
{
HANDLE hWdm;
printf("Hello World!/n");

SC_HANDLE hServiceMgr, hServiceTwdm;
BOOL bRtn;
DWORD dwRtn, dwSize = 256;
char szDir[256];

if( argc > 1 ) //加任一个参数表示卸载驱动程序。
{
DelSvr( "Twdm1" );
return 0;
}

GetCurrentDirectory( dwSize, szDir );//取当前目录
strcat( szDir, "//Twdm.sys" ); //取驱动程序的全路径

LPCTSTR lpszBinaryPathName = TEXT(szDir);
hServiceMgr = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS ); //打开服务控制管理器

if( hServiceMgr == NULL )
{
printf( "OpenSCManager() Faild %d ! /n", GetLastError() );
return 0;
}
else
{
printf( "OpenSCManager() ok ! /n" );
}

hServiceTwdm = CreateService( hServiceMgr,
TEXT("Twdm1"), //SYSTEM/CurrentControlSet/Services 驱动程序的在注册表中的名字
TEXT("Twdm1"), // 注册表驱动程序的 DisplayName 值
SERVICE_ALL_ACCESS, // 加载驱动程序的访问权限
SERVICE_KERNEL_DRIVER,// 表示加载的服务是驱动程序
SERVICE_DEMAND_START, // 注册表驱动程序的 Start 值
SERVICE_ERROR_IGNORE, // 注册表驱动程序的 ErrorControl 值
lpszBinaryPathName, // 注册表驱动程序的 ImagePath 值
NULL,
NULL,
NULL,
NULL,
NULL);

if( hServiceTwdm == NULL )
{
dwRtn = GetLastError();
if( dwRtn != ERROR_IO_PENDING && dwRtn != ERROR_SERVICE_EXISTS )
{
CloseServiceHandle( hServiceMgr );
printf( "CrateService() Faild %d ! /n", dwRtn );
return 0;
}
else
{
printf( "CrateService() Faild Service is ERROR_IO_PENDING or ERROR_SERVICE_EXISTS! /n" );
}

// 驱动程序已经加载,只需要打开
hServiceTwdm = OpenService( hServiceMgr, TEXT("Twdm1"), SERVICE_ALL_ACCESS );
if( hServiceTwdm == NULL )
{
dwRtn = GetLastError();
CloseServiceHandle( hServiceMgr );
printf( "OpenService() Faild %d ! /n", dwRtn );
return 0;
}
else
{
printf( "OpenService() ok ! /n" );
}
}
else
{
printf( "CrateService() ok ! /n" );
}

// 启动驱动程序,调用驱动程序的 DriverEntry 函数
bRtn = StartService( hServiceTwdm, NULL, NULL );
if( !bRtn )
{
dwRtn = GetLastError();
if( dwRtn != ERROR_IO_PENDING && dwRtn != ERROR_SERVICE_ALREADY_RUNNING )
{
printf( "StartService() Faild %d ! /n", dwRtn );
CloseServiceHandle( hServiceTwdm );
CloseServiceHandle( hServiceMgr );
return 0;
}
else
{
if( dwRtn != ERROR_IO_PENDING )
{
printf( "StartService() Faild ERROR_IO_PENDING ! /n");
}
else
{
printf( "StartService() Faild ERROR_SERVICE_ALREADY_RUNNING ! /n");
}
}
}

//测试驱动程序
hWdm = CreateFile("////.//Twdm1",
GENERIC_WRITE | GENERIC_READ,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
if( hWdm != INVALID_HANDLE_VALUE )
{
printf( "Open Driver Twdm ok ! /n" );
}
else
{
printf( "Open Driver Twdm faild %d ! /n", GetLastError() );
}
CloseHandle( hWdm );
CloseServiceHandle( hServiceTwdm );
CloseServiceHandle( hServiceMgr );

//这时候你可以通过注册表,或其他查看符号连接的软件验证。
printf( "按任意键 卸载驱动程序 !/n" );
getch();
//卸载驱动程序。
DelSvr( "Twdm1" );
return 0;
}

//卸载驱动程序。
void DelSvr( char * szSvrName )
{
SC_HANDLE hServiceMgr, hServiceTwdm;
SERVICE_STATUS SvrSta;
hServiceMgr = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );
if( hServiceMgr == NULL )
{
printf( "DelSvr::OpenSCManager() Faild %d ! /n", GetLastError() );
return;
}
else
{
printf( "DelSvr::OpenSCManager() ok ! /n" );
}
hServiceTwdm = OpenService( hServiceMgr, TEXT(szSvrName), SERVICE_ALL_ACCESS );

if( hServiceTwdm == NULL )
{
CloseServiceHandle( hServiceMgr );
printf( "DelSvr::OpenService() Faild %d ! /n", GetLastError() );
return;
}
else
{
printf( "DelSvr::OpenService() ok ! /n" );
}
//停止驱动程序,如果停止失败,只有重新启动才能,再动态加载。
if( !ControlService( hServiceTwdm, SERVICE_CONTROL_STOP , &SvrSta ) )
{
printf( "DelSvr::ControlService() Faild %d !/n", GetLastError() );
}
else
{
printf( "DelSvr::ControlService() ok !/n" );
}
//动态卸载驱动程序。
if( !DeleteService( hServiceTwdm ) )
{
printf( "DelSvr:eleteSrevice() Faild %d !/n", GetLastError() );
}
else
{
printf( "DelSvr:eleteSrevice() ok !/n" );
}
CloseServiceHandle( hServiceTwdm );
CloseServiceHandle( hServiceMgr );
return;
}

驱动程序:驱动程序很简单,
只有一个文件,实现了DriverEntry,DispatchCreate,DispatchClose,GpdUnload 四个函数。

#include

#define NT_DEVICE_NAME L"//Device//Twdm1"
#define DOS_DEVICE_NAME L"//DosDevices//Twdm1"

NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath );
NTSTATUS DispatchCreate(PDEVICE_OBJECT fdo, PIRP Irp);
NTSTATUS DispatchClose(PDEVICE_OBJECT fdo, PIRP Irp);
VOID GpdUnload(PDRIVER_OBJECT DriverObject);

//////////////////////
PDEVICE_OBJECT fdo;
BOOLEAN fSymbolicLink;


NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath )
{

//UNREFERENCED_PARAMETER (RegistryPath);
NTSTATUS status;
UNICODE_STRING ntDeviceName;
UNICODE_STRING win32DeviceName;

DbgPrint( "TWDM: DriverEntry for Twdm.sys ...... /n" );
fSymbolicLink = FALSE;

//
// Create dispatch points for the IRPs.
//

DriverObject->MajorFunction[IRP_MJ_CREATE] = DispatchCreate;
DriverObject->MajorFunction[IRP_MJ_CLOSE] = DispatchClose;
//DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = GpdDispatch;
DriverObject->DriverUnload = GpdUnload;
//DriverObject->MajorFunction[IRP_MJ_PNP] = GpdDispatchPnp;
//DriverObject->MajorFunction[IRP_MJ_POWER] = GpdDispatchPower;
//DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = GpdDispatchSystemControl;
//DriverObject->DriverExtension->AddDevice = GpdAddDevice;

RtlInitUnicodeString(&ntDeviceName, NT_DEVICE_NAME);

//创建设备
status = IoCreateDevice(DriverObject,
0,
&ntDeviceName,
FILE_DEVICE_UNKNOWN,
FILE_DEVICE_SECURE_OPEN,
FALSE,
&fdo);

if (!NT_SUCCESS (status))
{
DbgPrint( "TWDM: IoCreateDevice() faild ! /n" );
}
else
{
DbgPrint( "TWDM: IoCreateDevice() ok ! /n" );
RtlInitUnicodeString(&win32DeviceName, DOS_DEVICE_NAME);

//创建符号连接
status = IoCreateSymbolicLink( &win32DeviceName, &ntDeviceName );
if (!NT_SUCCESS(status))
{
DbgPrint( "TWDM: IoCreateSymbolicLink() faild ! /n" );
}
else
{
DbgPrint( "TWDM: IoCreateSymbolicLink() ok ! /n" );
fSymbolicLink = TRUE;
}
fdo->Flags &= ~DO_DEVICE_INITIALIZING;
}

if (!NT_SUCCESS(status))
{
if(fdo)
{
IoDeleteDevice(fdo);
}
if(fSymbolicLink)
{
IoDeleteSymbolicLink(&win32DeviceName);
}
}
return status;
}

NTSTATUS DispatchCreate(PDEVICE_OBJECT fdo, PIRP Irp)
{
NTSTATUS status;
DbgPrint( "TWDM: IRP_MJ_CREATE for Twdm.sys ...... /n" );
status = STATUS_SUCCESS;
return status;
} // DispatchCreate

NTSTATUS DispatchClose(PDEVICE_OBJECT fdo, PIRP Irp)
{ // DispatchClose
NTSTATUS status;
DbgPrint( "TWDM: IRP_MJ_CLOSE for Twdm.sys ...... /n" );
status = STATUS_SUCCESS;
return status;
} // DispatchClose

VOID GpdUnload(PDRIVER_OBJECT DriverObject)
{
UNICODE_STRING win32DeviceName;

DbgPrint( "TWDM: GpdUnload() for Twdm.sys ...... /n" );

RtlInitUnicodeString(&win32DeviceName, DOS_DEVICE_NAME);
if(fdo)
{
IoDeleteDevice(fdo);
}
if(fSymbolicLink)
{
IoDeleteSymbolicLink(&win32DeviceName);
}
}




2001-09-24_Test1.zip

Test1.zip 是源代码。

其中驱动程序部分的一个文件,修改以下就可以了。

Mk.cmd

@echo off
echo Aouther : Qian
echo Date : 2001.9.20
echo Function : Start DDK Environment And Build Driver
call c:/NTDDK/bin/setenv.bat c:/NTDDK checked //此处改为你的 2k ddk 的路径
rem call c:/NTDDK/bin/setenv.bat c:/NTDDK free
echo on

d: //此处改为你的编写驱动程序的驱动器
cd /work/qian/wdm/test1/sys ////此处改为你的编写驱动程序的目录


build -b -w -nmake /a 

 

LM Studio本地大模型入门:零命令行运行Q4_K_M量化模型 本地大模型(Local LLM)是指在个人设备上离线部署并推理的大型语言模型,其核心原理依托量化推理(如Q4_K_M)与跨平台GPU加速(DirectML/Metal/Vulkan),在保障数据隐私前提下实现毫秒级响应。相比云端API,本地方案规避了网络延迟、服务限流与敏感数据外泄风险,技术价值在于将AI能力下沉为知识工作者的日常办公插件。典型应用场景包括PDF技术文档摘要、教学习题生成、代码注释提炼及私有语料问答——所有处理全程不联网、不上传。LM Studio正是为此而生:它封装了模型加载、GPU层自动 阅读详情

相关推荐

Windows XP Mode技术解析:Win7时代的无缝虚拟化兼容方案

Windows XP Mode是微软在Windows 7时代推出的轻量级桌面虚拟化技术,本质并非传统虚拟机,而是基于Virtual PC引擎、融合API桥接与UI层集成的兼容性解决方案。其核心原理在于通过硬件辅助虚拟化(VT-x/AMD-V)支撑下的用户态虚拟化、共享内存剪贴板同步、SSPI身份透传及无缝窗口渲染机制,实现XP应用在Win7桌面的原生级体验。该技术凸显了‘最小侵入性兼容’的设计哲学,为后续WSL、AppContainer等现代兼容架构提供重要范式。适用于遗留工业软件、财务系统、医疗设备接口等

diaojin6880的博客 373

Win11下Ollama运行Qwen2.5的系统级适配指南

Ollama作为轻量级本地大模型运行时,其在Windows平台上的稳定性与性能高度依赖操作系统底层配置。本文从TLS握手兼容性、内存管理策略、WSL2 GPU直通机制等系统级原理切入,解析Ollama在Win11中常见的拉取卡顿、加载失败、API崩溃等现象的技术成因;强调Win11版本(尤其是23H2)、内存压缩禁用、registry镜像硬编码替换等关键实践价值;适用于需将Qwen2.5集成至RAG知识库、VSCode智能辅助或Node.js生产服务等对延迟、上下文窗口与长期稳定性有严苛要求的工程场景。

weixin_34353714的博客 444

Win11老旧硬件适配:GPT改造与内核级精简实战指南

Windows 11并非仅面向新设备的操作系统,其底层NT内核调度优化、内存压缩算法升级与服务启动策略收紧,使部分2010年代初的老硬件反而获得性能红利。实现稳定运行的关键在于突破官方兼容性限制——通过UEFI启动链路重建(GPT+ESP分区重写)、注册表级TPM/Secure Boot绕过、以及基于DISM与组件服务拓扑的内核级镜像重构。该方案兼顾系统完整性与资源效率,适用于i5-3210M、Core2 Duo等低功耗平台,在4GB内存+机械硬盘条件下支撑Chrome+微信+WPS多任务流畅运行,广泛应用

dicha7140的博客 675

驱动开发之 加载NT式驱动程序实例

下面是Driver.cpp #include "Driver.h" /************************************************************************ * 函数名称:DriverEntry * 功能描述:初始化驱动程序,定位和申请硬件资源,创建内核对象 * 参数列表: pDriverObject:从I/O管理器中传进来

Lydia的博客 1921

Z-TEK力特PL2303芯片USB转RS232驱动包(Win32/Win64双架构支持)

专为Z-TEK(力特)品牌搭载PL2303芯片的USB转RS232串口线提供即装即用的驱动支持,覆盖Windows 7/8/10/11全版本系统,兼容32位(x86/i386)与64位(x64/amd64)平台。包内含核心驱动文件ftdibus.sys、ftser2k.sys,设备安装信息文件ftdibus.inf、ftdiport.inf,数字签名CAT文件(ftdibus.cat、ftdiport.cat),以及开发所需ftd2xx.dll、ftbusui.dll、ftserui2.dll等动态库,配套

n2o3p4的博客 270

深入解析PCIe设备驱动:以CX23885视频采集卡驱动为例

PCIe(Peripheral Component Interconnect Express)总线是现代计算机系统中连接高速外设的核心技术,它通过高速串行点对点连接替代了传统的并行PCI总线,提供了更高的带宽和可扩展性。其工作原理基于分层协议栈,包括事务层、数据链路层和物理层,支持设备枚举、配置空间访问和高效的DMA数据传输。在Linux内核中,PCIe驱动遵循标准框架,通过pci_driver结构体注册,由内核在设备匹配时调用probe函数进行初始化。这一机制对于确保硬件与操作系统稳定通信至关重要,尤其在

chuange6363的博客 459

windows内核-加载、卸载驱动(四)

2、OpenService打开加载中的服务获取服务句柄 SC_HANDLE。5、清理工作,用CloseServiceHandle关闭释放句柄。3、如果驱动服务已经创建过,则用OpenService打开服务。二、卸载驱动1、获取服务控制管理器句柄 SC_HANDLE。1、用OpenSCManager打开服务控制管理器。4、用StartService加载启动驱动服务。2、用CreateService创建对应服务。3、ControlService 停止服务。通过MFC加载或卸载驱动。

rosykee的专栏 1210

保姆级教程:用STM8S207R6和FD6288T自制BLDC驱动板,从原理图到代码框架搭建

本文提供了一份详细的STM8S207R6和FD6288T自制BLDC驱动板教程,涵盖从原理图设计到代码框架搭建的全过程。通过硬件选型、电源电路设计、PWM定时器配置等关键步骤解析,帮助开发者快速掌握无刷直流电机驱动技术,实现高效稳定的电机控制方案。

weixin_28729205的博客 488

编写内核驱动加载工具

             编写内核驱动加载工具 一丶加载内核驱动的常用API介绍. 加载内核驱动,使用我们的ring3下的API即可完成. API分别是: OpenSCManager  打开设备(服务)管理器 CreateService  创建服务(或者设备,根据参数不同而不同) OpenService     打开设备或者服务. StartService           启动...

r0cky的博客 994

CosyVoice 本地部署详细教程 手把手小白教程

本文提供了详细的CosyVoice本地部署教程,强调了避免中文名称和空格的重要性,并列出了必要的软件安装步骤,包括CUDA、cuDNN、Git和Miniconda。教程涵盖了从检查CUDA版本到下载模型和运行模型的全过程,确保用户能够顺利部署并使用CosyVoice。

huazn612的博客 2万+

Python+OpenCV实战:5分钟搞定机械臂手眼标定(眼在手上模式)

本文详细介绍了使用Python和OpenCV在5分钟内完成机械臂手眼标定(眼在手上模式)的实战教程。通过解析相机坐标系与机械臂基坐标系的转换关系,提供从数据采集到标定矩阵计算的全流程代码实现,帮助开发者快速解决AX=XB问题,提升机械臂视觉引导精度。

weixin_33670786的博客 498

Windows内核编程(四)-服务的基本操作

服务的基本操作 驱动以Windows服务的方式存在,服务有不同的类型,驱动只是其中一种类型的服务。本小节把驱动等同于服务。 服务的基本操作有注册(创建)、启动、暂停、停止操作。但内核驱动类型的服务不支持暂停操作。 服务管理器 的主要工作是管理操作系统上的所有服务,其中包括跟踪、维护服务的各种状态,以及对服务发起具体的操作。开发者可以通过服务管理器来查询服务状态、修改服务配置、注册(创建)新服务、启动服务等。开发者通过API操作服务,API内部首先会通过一个称为"LPC(本地方法调用)"的方式,把请求发送给服

qq_40277608的博客 1460

Linux系统centos7安装网卡驱动

有时候我们装完Centos或Ubuntu系统会发现没有网卡信息,说明网卡驱动不配置,所以我们要重新安装。 首先去服务器主板官网下载网卡驱动,注意32位和64位。 先查看网卡型号 lspci | grep -i ethernet 我的网卡型号是 00:1f.6 Ethernet controller: Intel Corporation Device 0d55。 网上一找,压根没找到这型号的网卡,别说驱动了。怀着试一试的心态,就安装i219-v系的网卡驱动,还别说,成功了。 针对i21...

wshc18的博客 2万+

linux 动态加载驱动程序,Win2K 下驱动程序的动态加载 (转)

Win2K 下驱动程序的动态加载 (转)[@more@]加载一个,主要就是,在SYSTEMCurrentControlSetServices 建一个键。如:SYSTEMCurrentControlSetServicesTwdm1Type(1)ErrorControl(0)Start(3)多数驱动程序都是通过设置 Start 的值为 0, 1, 2 。在启动的过程中加载驱动程序。在 下驱动程序的加...

weixin_39738380的博客 184

Ubuntu 22.04 上 Mezzanine CMS 完整安装指南

CMS(内容管理系统)是构建博客、企业官网等静态与动态内容混合站点的核心技术栈;Django 作为 Python 生态中最成熟的 Web 框架,凭借其 ORM、Admin 和安全机制,成为 CMS 开发的首选基础。Mezzanine 是基于 Django 的轻量级 CMS,以开箱即用、零配置多语言和内置 SEO 工具为特色,特别适合中小项目快速落地。在 Ubuntu 这类强调稳定性的服务器操作系统上部署时,关键挑战并非代码逻辑,而是系统层依赖协同——如 Python 版本锁定、SQLite FTS5 支持、

weixin_33508411的博客 304

基于Simulink的永磁同步电机容错控制(缺相容错)

本文基于Simulink平台,详细介绍了永磁同步电机(PMSM)缺相容错控制的仿真实现方法。针对逆变器开路故障导致的缺相问题,提出"检测-重构-补偿"三阶段控制策略:采用电流阈值法快速检测故障(<5ms),重构αβ坐标系实现两相矢量控制,并通过谐波电流注入抑制转矩脉动(<8%)。仿真结果表明,该方法能有效维持故障后电机运行,转速波动<3%,满足电动汽车等关键应用的可靠性需求。文章包含完整的Simulink建模步骤、MATLAB函数代码及参数设置,为工程实践提供了可复现的

xiaoheshang_123的博客 146

Win2K 下驱动程序的动态加载 (转)

Win2K 下驱动程序的动态加载 (转)[@more@]加载一个驱动程序,主要就是,在 SYSTEMCurrentControlSetServices 建一个键。 如: SYSTEMCurrentControlSetServic...

csd3176的博客 119

GDB交叉编译与问题解决:从零到精通的深度指南

完成后,GDB会安装到/usr/local/gdb-aarch64/bin,可以用aarch64-linux-gnu-gdb --version检查。:得有支持目标架构的交叉编译工具链,比如gcc-arm-none-eabi(用于ARM裸机)或aarch64-linux-gnu-gcc(用于ARM Linux)。:在配置工具链时,运行aarch64-linux-gnu-gcc --version检查版本,确保工具链没问题。这种场景下用GDB调试,就像在荒野求生,但别慌,GDB依然是你的好伙伴。

大模型大数据攻城狮的专栏 1万+

在KVM上的Windows中安装Virtio驱动程序

在KVM上的Windows中安装Virtio驱动程序 2018年7月3日 Virtio驱动程序是KVM虚拟机的半虚拟化设备驱动程序。 半虚拟化驱动程序可提高机器性能,减少I / O延迟并将吞吐量提高到接近裸机水平。 对于完全虚拟化的计算机,建议使用半虚拟化驱动程序。 大多数Linux发行版都包含virtio驱动程序作为标准配置。本指南说明了如何在Windows中安装它们。 本指南是为Z...

allway2的博客 3万+

scratch绘制旋转彩球 2023年9月电子学会图形化编程scratch编程等级考试四级真题和答案解析

​ scratch绘制旋转彩球 2023年9月电子学会图形化编程Scratch等级考试四级真题 一、题目要求 1、准备工作 (1)删除小猫角色,从角色库选择Ball角色; (2)默认空白背景。 ​

青少年编程学习指导 1369

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Win2K服务详解

svchost.exe 文件对那些从动态链接库中运行的服务来说是一个普通的主机进程名;最基本的系统进程(也就是说,这些进程是系统运行的基本条件,有了这些进程,系统就能正常运行): smss.exe Session Manager csrss.exe 子系统服务器进程 winlogon.exe 管理用户登录 services.exe 包含很多系统服务 lsass.exe 管理 IP 安全策略以及启动

礷天設計 2061

STM32F407中文手册

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

WIN2K进程详解

svchost.exe   文件对那些从动态链接库中运行的服务来说是一个普通的主机进程名;最基本的系统进程(也就是说,这些进程是系统运行的基本条件,有了这些进程,系统就能正常运行):       smss.exe   session   manager       csrss.exe   子系统服务器进程       winlogon.exe   管理用户登录       services.exe

hanjiangxue的专栏 1025

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ssm框架搭建

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

virtio-win Windows虚拟化驱动深度解析:技术实现与兼容性优化实践

在现代化的虚拟化环境中,Windows作为主流的企业级操作系统,其性能表现直接影响到虚拟化平台的用户体验和业务效率。传统模拟设备的性能瓶颈催生了半虚拟化技术的快速发展,而virtio-win项目正是这一技术演进的核心产物。该项目为KVM/QEMU虚拟化平台提供了完整的Windows半虚拟化驱动套件,涵盖网络、存储、显示、输入输出等关键硬件组件。 然而,在实际部署过程中,技术团队经常面临驱动兼容性

gitblog_00094的博客 677

服务器虚拟光驱无法加载,Proxmox/创建PVE/安装windows 2012r2系统无法识别硬盘/如何添加virtio驱动/...

前面一遍文章写了proxmox如何创建centos7系统的小鸡儿,那proxmox如何创建windows系统的小鸡儿呢?尤其是当我们小鸡的硬盘设置成virtio SCSI的时候,这时候windows ISO如果不包含virtio驱动,是无法识别硬盘,是无法装机的。如上图,安装windows 2012R2到这一步了,无法识别硬盘,安装无法继续了,怎么办?两种办法,一种是找市面上集成好了virtio驱...

weixin_39783426的博客 5520

Win11本地AI写作助手搭建:Hermes+Ollama+llama.cpp全链路指南

本地大模型部署是内容创作者实现AI写作自主可控的关键路径,其核心在于构建不依赖云端API、数据不出本地、成本可持续的智能体运行环境。原理上需打通模型推理(llama.cpp)、服务封装(Ollama)、任务编排(Hermes Agent)与系统兼容(WSL2)四层技术栈,技术价值体现在隐私安全、长期零订阅费、可定制化工作流及离线可用性。典型应用场景覆盖自媒体批量成稿、电商文案生成与敏感内容创作,尤其适合关注‘ollama下载太慢’‘wsl2怎么安装’等实操门槛的中文用户。本文即围绕Win11平台,详解如何用

weixin_30945039的博客 559
上一篇: fsd hook里获取文件全路径
下一篇: 通过SSDT UnHOOK 函数HOOK
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值