注意:部分文章发布时间较长,可能存在未知因素,购买时建议在本站搜索商家名称,先充分了解商家动态。
交流:唯一投稿邮箱:hostvps@88.com。
网友 李少龙 说:
*帖最后由 李少龙 于 2023-12-24 20:04 编辑
拦截Windows关机事件,直接抛弃
#include <ntddk.h>
// 你的PnP驱动的设备扩展
typedef struct _DEVICE_EXTENSION {
PDEVICE_OBJECT DeviceObject;
// 其他字段
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
NTSTATUS MyDeviceAdd (
IN PDRIVER_OBJECT D**verObject,
IN PDEVICE_OBJECT PhysicalDeviceObject
)
{
NTSTATUS status;
PDEVICE_OBJECT deviceObject;
PDEVICE_EXTENSION deviceExtension;
// 创建你的设备对象
status = IoCreateDevice(
D**verObject,
sizeof(DEVICE_EXTENSION),
NULL,
FILE_DEVICE_UNKNOWN,
FILE_DEVICE_SEC**E_OPEN,
FALSE,
&deviceObject
);
if (!NT_SUCCESS(status)) {
ret**n status;
}
deviceExtension = (PDEVICE_EXTENSION) deviceObject->DeviceExtension;
deviceExtension->DeviceObject = deviceObject;
// 添加类似以下代码来设置你的设备的电源相关函数
deviceObject->Flags |= DO_POWER_INRUSH;
// 设置你的设备以进行电源IRP处理
deviceObject->Flags |= DO_POWER_PAGABLE;
ret**n status;
}
NTSTATUS MyPower (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
)
{
PIO_STACK_LOCATION stack;
stack = IoGetC**rentIrpStackLocation(Irp);
if (stack->MinorFunction == IRP_MN_SET_POWER) {
if (stack->Parameters.Power.Type == ******PowerState) {
// **是否是要到关机状态
if (stack->Parameters.Power.State.******State == Power******Shutdown) {
// 你可以在这里编写代码来拒绝关机*作,比如直接返回 STATUS_SUCCESS。
ret**n STATUS_SUCCESS;
}
}
}
// 默认情况下,所有其他 IRPs 都会通过
ret**n IoPa**IrpDown(DeviceObject, Irp);
}
VOID D**verUnload (
IN PDRIVER_OBJECT D**verObject
)
{
PDEVICE_OBJECT deviceObject;
deviceObject = D**verObject->DeviceObject;
while (deviceObject)
{
PDEVICE_OBJECT nextDeviceObject;
nextDeviceObject = deviceObject->NextDevice;
IoDeleteDevice(deviceObject);
deviceObject = nextDeviceObject;
}
}
NTSTATUS D**verEntry (
IN PDRIVER_OBJECT D**verObject,
IN PUNICODE_STRING RegistryPath
)
{
NTSTATUS status;
D**verObject->D**verUnload = D**verUnload;
D**verObject->D**verExtension->AddDevice = MyDeviceAdd;
D**verObject->MajorFunction[IRP_MJ_POWER] = MyPower;
ret**n STATUS_SUCCESS;
}
网友 j5l6w5i90o 说:
666
网友 Eoyz369 说:
绑定
网友 lanse8899 说:
怎么用啊MJJ
网友 似毛非毛 说:
**666
网友 xwang 说:
哈哈
网友 李少龙 说:
lanse8899 发表于 2023-12-24 19:56
怎么用啊MJJ
网友 lanse8899 说:
李少龙 发表于 2023-12-24 20:05
编译 安装到 Windows
网友 genexis 说:
怎么用啊MJJ
网友 2716534027 说:
网友 Lenz 说:
小白表示只能看看
网友 zzr 说:
kvm不是可以断开电源形式的强制关机。。。不是通过软件层能解决的吧。
网友 盖亚奥特曼 说:
你提供的代码看起来是一个用于处理 Windows 内核模式电源**的驱动程序框架。要运行这个代码,你需要按照以下一般步骤进行: 1. **设置内核模式调试环境:** – 在运行内核模式驱动程序之前,必须建立一个内核模式调试环境。 – 使用 WinDbg 或 Visual Studio 进行内核调试。 2. **编译驱动程序:** – 使用 Windows 驱动程序开发工具包 (WDK) 和相应的编译器构建你的驱动程序。 – 确保项目设置正确配置。 3. **安装驱动程序:** – 一旦编译完成,需要在目标**上安装驱动程序。 – 使用 `sc` (Service Cont**l) 命令或其他方法安装驱动程序。 4. **加载驱动程序:** – 安装完成后,使用 `sc start` 命令或其他方式加载驱动程序。 – ****日志以查看加载过程中是否有任何错误。 5. ****驱动程序:** – 通过与相关设备交互或触发与电源相关的事件来**驱动程序的功能。 6. **调试:** – 使用内核调试器设置断点、**变量,并诊断任何问题。 – 分析调试输出和日志以进行故障排除。 7. **卸载驱动程序:** – 在修改或重新编译驱动程序之前,使用 `sc stop` 命令卸载驱动程序。 8. **修改并重复:** – 根据需求进行必要的代码修改。 – 重新编译和安装驱动程序。 – 重复**过程。 请记住,开发和**内核模式驱动程序可能对**稳定性产生重大影响。请谨慎行事,并确保你熟悉内核调试技术以及相关风险。 此外,在开发和**内核模式驱动程序时,请遵守法律和**规定。内核模式开发通常在受控制的环境中进行,不建议用于普通用户**。
网友 ****!Tencent 说:
出个成品把
网友 李少龙 说:
zzr 发表于 2023-12-24 20:19
kvm不是可以断开电源形式的强制关机。。。不是通过软件层能解决的吧。
网友 李少龙 说:
****!Tencent 发表于 2023-12-24 20:38
出个成品把