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 关闭。
还没有评论,来说两句吧...