Windows内核编程基础篇之系统线程

    在驱动中停止等待很容易是哼歌系统陷入"停顿",最后只能重启电脑,但是一个单独的线程长期等待,还不至于对系统造成致命的影响。有些任务是希望长期不断的执行,比如 不断的写入日志,为此,启动一个特殊的线程来执行他们是最好的办法,

     驱动中生成的线程一般是系统线程。系统线程所在的进程名:“System”,用到的内核API 函数原型如下:

NTSTATUS PsCreateSystemThread(
  _Out_     PHANDLE            ThreadHandle,
  _In_      ULONG              DesiredAccess,
  _In_opt_  POBJECT_ATTRIBUTES ObjectAttributes,
  _In_opt_  HANDLE             ProcessHandle,
  _Out_opt_ PCLIENT_ID         ClientId,
  _In_      PKSTART_ROUTINE    StartRoutine,
  _In_opt_  PVOID              StartContext
);  
       这个函数参数也是够多的, 但是参数传入很简单ThreadHandle 用来返回句柄,放入一个句柄指针即可; DesiredAddress 总是填写 0, 后面的3个参数都填写 NULL;最后的2个参数有一个用于该线程启动的时候去执行的函数,剩下的一个是用于传入该函数的参数。

      这个就是启动函数的原型:

VOID CustomThreadProc(IN PVOID context); 

    简单的不能再简单了。就一个参数, context 就是从 PsCreateSystemThread中的 StartContext。线程的结束应该在县城中自己调用 PsTerminateSystemThread 来完成,此外,得到的句柄也必须要用 ZwClose 关闭。

你可能感兴趣的:(Windows内核编程基础篇,系统线程)