欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Visual Studio 2013开发 mini-filter driver step by step 内核中使用线程(7)

发布时间:2025/3/21 编程问答 36 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Visual Studio 2013开发 mini-filter driver step by step 内核中使用线程(7) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

在内核中使用线程,其过程和在应用层中使用线程基本类似,创建线程的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 );

应用层创建线程的API为:

HANDLE WINAPI CreateThread(_In_opt_   LPSECURITY_ATTRIBUTES lpThreadAttributes,_In_       SIZE_T dwStackSize,_In_       LPTHREAD_START_ROUTINE lpStartAddress,_In_opt_   LPVOID lpParameter,_In_       DWORD dwCreationFlags,_Out_opt_  LPDWORD lpThreadId ); 其实还真有很多相似之处。 请看下面创建线程的代码: status = PsCreateSystemThread(&gThreadHandle,0,NULL,NULL,NULL,ThreadRoutine,NULL); 下面是ThreadToutine的代码: VOID ThreadRoutine(IN PVOID Context OPTIONAL) {UNREFERENCED_PARAMETER(Context);PT_DBG_PRINT(PTDBG_TRACE_ROUTINES, ("SSMF:Enter the thread routine\n"));NTSTATUS status = PsTerminateSystemThread(STATUS_SUCCESS);PT_DBG_PRINT(PTDBG_TRACE_ROUTINES, ("SSMF:Terminate the thread,the status is %d\n",status)); } 内核线程与应用层线程的区别还有一个就是,要结束内容线程,必须调用PsTerminateSystemThread API,而不是想应用层的线程函数,只要线程函数返回,线程就结束了。请看上面的ThreadRoutine代码,就用到了PsTerminateSystemThread来结束线程。 有意思的是在PsTerminateSystemThread后面还有一句代码 PT_DBG_PRINT(PTDBG_TRACE_ROUTINES, ("SSMF:Terminate the thread,the status is %d\n",status)); 这句代码会执行吗? 答案是不会的,因为线程函数在上一句已经执行完了,并且结束了。 

总结

以上是生活随笔为你收集整理的Visual Studio 2013开发 mini-filter driver step by step 内核中使用线程(7)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。