21.driverbase-多线程PsCreateSystemThread
2017-08-17 14:53
316 查看
NTKERNELAPI NTSTATUS PsCreateSystemThread( __out PHANDLE ThreadHandle,// 得到新创建的线程句柄 __in ULONG DesiredAccess,// 创建的权限 __in_opt POBJECT_ATTRIBUTES ObjectAttributes,// 线程属性,一般设为NULL __in_opt HANDLE ProcessHandle,//为NULL表示创建系统线程,为进程句柄,则新创建的线程属于这个指定的进程, __out_opt PCLIENT_ID ClientId, __in PKSTART_ROUTINE StartRoutine,// 新线程进行起始地址 __in_opt PVOID StartContext// 新线程接收的参数 );
如:
#pragma PAGEDCODE VOID SystemThread(IN PVOID pContext) { PEPROCESS pEProcess = IoGetCurrentProcess(); PTSTR ProcessName = (PTSTR)((ULONG)pEProcess+0x174); KdPrint(("This SystemThread run in %s process",ProcessName)); PsTerminateSystemThread(STATUS_SUCCESS); } #pragma PAGEDCODE VOID MyProcessThread(IN PVOID pContext) { PEPROCESS pEProcess = IoGetCurrentProcess(); PTSTR ProcessName = (PTSTR)((ULONG)pEProcess+0x174); KdPrint(("This MyProcessThread run in %s process",ProcessName)); PsTerminateSystemThread(STATUS_SUCCESS); } #pragma PAGEDCODE VOID CreateThread_Test() { HANDLE hSystemThread,hMyThread; NTSTATUS status = PsCreateSystemThread(&hSystemThread,0,NULL,NULL,NULL,SystemThread,NULL); status = PsCreateSystemThread(&hMyThread,0,NULL,NtCurrentProcess(),NULL,MyProcessThread,NULL); }
记得CreateThread_Test函数不要在DriverEntry中调用,可以放在IRP_MJ_DEVICE_CONTROL中来触发(NtCurrentProcess(),DriverEntry是属于System进程调用的)
相关文章推荐
- PsCreateSystemThread
- 驱动开发之 创建线程函数PsCreateSystemThread
- PsCreateSystemThread创建系统线程
- 驱动开发之 创建线程函数PsCreateSystemThread
- CreateThread,AfxBeginThread,PsCreateSystemThread
- PsCreateSystemThread函数说明
- Remote Thread Execution in System Process using NtCreateThreadEx for Vista & Windows7
- 进程防结束之PS_CROSS_THREAD_FLAGS_SYSTEM
- 进程防结束之PS_CROSS_THREAD_FLAGS_SYSTEM
- RHEL 6.2 Error: Cannot create GC thread. Out of system resources.
- Qt Tcp多线程下QObject:Can not create children that is in different thread 的解决方法
- OutOfMemoryError: Cannot create GC thread. Out of system resources
- java笔记(五):多线程--Thread和Runnable
- Android多线程:Looper和HandlerThread
- C# 多线程学习(六)线程池(ThreadPool)——线程资源的复用和自动管理
- Java多线程编程之Thread和Runnable的区别
- Java 多线程 BlockingQueue 实现 高并发邮件 代码 SystemEmailUtils
- RT-Thread多线程导致的临界区问题
- iOS多线程编程之NSThread的使用
- Java多线程—继承Thread类实现求和