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

野性酷女 2022-08-04 14:58 261阅读 0赞

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

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

  1. NTSTATUS PsCreateSystemThread(
  2. _Out_ PHANDLE ThreadHandle,
  3. _In_ ULONG DesiredAccess,
  4. _In_opt_ POBJECT_ATTRIBUTES ObjectAttributes,
  5. _In_opt_ HANDLE ProcessHandle,
  6. _Out_opt_ PCLIENT_ID ClientId,
  7. _In_ PKSTART_ROUTINE StartRoutine,
  8. _In_opt_ PVOID StartContext
  9. );

这个函数参数也是够多的, 但是参数传入很简单: ThreadHandle 用来返回句柄,放入一个句柄指针即可; DesiredAddress 总是填写 0, 后面的3个参数都填写 NULL;最后的2个参数有一个用于该线程启动的时候去执行的函数,剩下的一个是用于传入该函数的参数。

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

  1. VOID CustomThreadProc(IN PVOID context);

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

发表评论

表情:
评论列表 (有 0 条评论,261人围观)

还没有评论,来说两句吧...

相关阅读