Visual Studio 2013开发 mini-filter driver step by step 内核中使用线程(7)
生活随笔
收集整理的这篇文章主要介绍了
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)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: ADSL宽带为什么下载和上传速度差别如此
- 下一篇: Visual Studio 2013开发