看流星社区

 找回密码
 注册账号
查看: 1862|回复: 4

求助驱动中如何sleep?

[复制链接]

该用户从未签到

发表于 2013-4-23 10:00:13 | 显示全部楼层 |阅读模式
根据天书夜读上的代码,照葫芦画瓢写了一段。运行后没效果啊。

太菜了,不解。不知大牛们能否指点一二?


代码:
#include "ntddk.h"

#define DELAY_ONE_MICROSECOND (-10)
#define DELAY_ONE_MILLISECOND (DELAY_ONE_MICROSECOND*1000)

static KEVENT s_event;

void  MyThreadProc(PVOID context)
{
  LARGE_INTEGER My_interval;
  My_interval.QuadPart = DELAY_ONE_MILLISECOND;
  // 睡眠12秒
  My_interval.QuadPart *= 12;
  KeDelayExecutionThread(KernelMode, 0, &My_interval);
  
  KdPrint(("fuck you"));
  
  KeSetEvent(&s_event);
  PsTerminateSystemThread(STATUS_SUCCESS);
}


NTSTATUS  DriverEntry (
      IN PDRIVER_OBJECT pDriverObject,
      IN PUNICODE_STRING pRegistryPath  )
{
  
  HANDLE thread = NULL;
  NTSTATUS status;
  status = PsCreateSystemThread(&thread,0L,NULL,NULL,NULL,MyThreadProc,NULL);
  
  ZwClose(thread);
  KeWaitForSingleObject(&s_event,Executive,KernelMode,0,0);
  
  return status;
}

该用户从未签到

发表于 2013-4-23 10:00:22 | 显示全部楼层
#define DELAY_ONE_MICROSECOND ( -10 )
#define DELAY_ONE_MILLISECOND ( DELAY_ONE_MICROSECOND * 1000 )

// 使得当前线程睡眠
VOID KeSleep( IN LONG lSeccond )
{
LARGE_INTEGER my_interval;
my_interval.QuadPart = DELAY_ONE_MILLISECOND;
my_interval.QuadPart *= lSeccond;
KeDelayExecutionThread( KernelMode, 0, &my_interval );
}

该用户从未签到

发表于 2013-4-23 17:54:21 | 显示全部楼层
时间太短,肯定没效果。100000表示一秒.你才10,你能看出效果就有才了

该用户从未签到

发表于 2013-4-24 09:15:49 | 显示全部楼层
看帖就回加成长!!

该用户从未签到

发表于 2013-9-23 13:12:37 | 显示全部楼层
好东西啊,真是好东西,感谢楼主分享!谢谢!
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-5-18 21:29

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表