windows 内核中如何实现Sleep

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windows 内核中如何实现Sleep相关的知识,希望对你有一定的参考价值。

在 Windows 内核中,可以调用 KeDelayExecutionThread 函数来实现类似于 Sleep 的功能。该函数将让调用线程延迟执行一段时间,例如,让线程休眠 1 毫秒。

下面是一个示例程序,演示如何在 Windows 内核中使用 KeDelayExecutionThread 函数来实现 Sleep 功能:

```
#include

VOID DriverUnload(PDRIVER_OBJECT DriverObject)

UNREFERENCED_PARAMETER(DriverObject);


NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)

UNREFERENCED_PARAMETER(RegistryPath);
KdPrint(("DriverEntry called\n"));

// 延迟执行 1 秒钟,相当于 Sleep(100)
LARGE_INTEGER delayInterval;
delayInterval.QuadPart = -1 * 100 * 100 * 10;
KeDelayExecutionThread(KernelMode, FALSE, &delayInterval);

KdPrint(("Delay finished\n"));

DriverObject->DriverUnload = DriverUnload;
return STATUS_SUCCESS;

```

这个示例程序将延迟执行 1 秒钟,然后在调用完成后卸载驱动程序。在延迟执行的部分,我们创建了一个 `LARGE_INTEGER` 类型的变量 `delayInterval`,用它来表示需要延迟的时间。然后,我们将其设置为负数,相当于指定延迟的时间间隔,这里我们将其设为 1 秒钟的时间间隔。

最后,我们调用 KeDelayExecutionThread 函数,并传递给它 delayInterval 参数,指定需要延迟执行的时间间隔。

需要注意的是,该示例程序的环境为 Windows 内核,因此需要使用相应的开发工具来编译和测试驱动程序。如果你是想在用户模式下实现类似 Sleep 的功能,请使用标准 C/C++ 库中的 Sleep 函数。
参考技术A Windows 内核中实现 Sleep 的方式是通过 API 函数 Sleep() 来实现的。Sleep() 函数可以让操作系统在一段时间内停止执行当前正在执行的任务,并把 CPU 空闲出来,从而让其他任务能够得到执行。这个函数需要传入一个参数(单位为毫秒),用来控制 Sleep() 休眠的时长。因此,如果想要实现休眠 100 毫秒的话,就应当使用 Sleep(100) 这个函数来实现。 参考技术B void KeSleep (int milliSeconds)

PKTIMER timer = (PKTIMER) ExAllocatePoolWithTag( NonPagedPool, sizeof (KTIMER), 'HELO' );
LARGE_INTEGER duetime;

if (!timer)
return;

duetime.QuadPart = (__int64) milliSeconds * -10000;
KeInitializeTimerEx(timer, NotificationTimer);
KeSetTimerEx(timer, duetime, 0, NULL);

KeWaitForSingleObject (timer, Executive, KernelMode, FALSE, NULL);

ExFreePoolWithTag(timer, 'HELO');
本回答被提问者采纳

以上是关于windows 内核中如何实现Sleep的主要内容,如果未能解决你的问题,请参考以下文章

mail,at,batch,sleep小练习

linux C 当前进程运行10ms后挂起的功能如何实现.

模板执行后如何实现time.Sleep?

如何创建一个将在 Windows 内核级别运行的进程?

如何实现低于1ms的延迟?

Python中进度条如何实现