研究了1天这个。。。MSDN说的不是很清楚
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
);
该函数用于创建系统线程,ProcessHandle参数接收NULL, NtCurrentProcess() (-1) ,或指定进程句柄 三种情况 都可以用PsTerminateSystemThread结束掉
示例:
[C++] 纯文本查看 复制代码
01 |
VOID MyThread( PVOID StartContext) |
03 |
PEPROCESS pp=IoGetCurrentProcess(); |
04 |
NTSTATUS status=PsTerminateSystemThread(0); |
06 |
if (status == STATUS_INVALID_PARAMETER) |
08 |
KdPrint(( "not systemthread" )); |
12 |
HANDLE OpenProcess( HANDLE Processid) |
15 |
PEPROCESS Process = NULL; |
16 |
HANDLE hProcess = NULL; |
17 |
UNICODE_STRING Unicode; |
18 |
status = PsLookupProcessByProcessId(Processid, &Process); |
19 |
if (NT_SUCCESS(status)) //判断进程号是否存在 |
21 |
RtlInitUnicodeString(&Unicode, L "PsProcessType" ); |
22 |
//得到系统导出函数的地址和用户态的GetProcessAddress雷同 |
23 |
PsProcessType = (POBJECT_TYPE*)MmGetSystemRoutineAddress(&Unicode); |
26 |
status = ObOpenObjectByPointer(Process,0,NULL,PROCESS_ALL_ACCESS,(POBJECT_TYPE) * PsProcessType, |
27 |
KernelMode,&hProcess); |
28 |
if (NT_SUCCESS(status)) |
31 |
ObfDereferenceObject(Process); |
35 |
ObfDereferenceObject(Process); |
40 |
HANDLE outthread1,,outthread2,outthread3,outthread4,hproc; |
42 |
PsCreateSystemThread(&outthread1,THREAD_ALL_ACCESS,NULL,NULL,NULL,MyThread,NULL); |
43 |
PsCreateSystemThread(&outthread2,THREAD_ALL_ACCESS,NULL,NtCurrentProcess(),NULL,MyThread,NULL); |
46 |
CLIENT_ID ci={( HANDLE )1472,0}; //注意是进程ID! |
47 |
RtlZeroMemory(&oa, sizeof (oa)); |
49 |
ZwOpenProcess(&hproc,PROCESS_ALL_ACCESS,&oa,&ci); |
50 |
PsCreateSystemThread(&outthread3,THREAD_ALL_ACCESS,NULL,hproc,NULL,MyThread,NULL); |
52 |
hproc=OpenProcess(( HANDLE )1472); //注意是进程ID! |
53 |
PsCreateSystemThread(&outthread4,THREAD_ALL_ACCESS,NULL,hproc,NULL,MyThread,NULL); |
该函数创建的线程,其PETHRAD属性的CrossThreadFlags有PS_CROSS_THREAD_FLAGS_SYSTEM属性,不允许以挂起模式创建线程,,其他和普通的NtCreateThread差别不大!
然而在微软官方源码中,PS_CROSS_THREAD_FLAGS_SYSTEM属性即为SystemThread,尽管其所属进程可能是explorer.exe
https://www.0xaa55.com/forum.php?mod=viewthread&tid=1376&extra=page%3D6
最新文章
- nignx 启动,重启命令
- [bzoj3289]Mato的文件管理
- Jquery控制滚动显示欢迎字幕v2
- ThinkPHP之中的图片上传操作
- guake默认快捷键
- BZOJ 1567: [JSOI2008]Blue Mary的战役地图( 二分答案 + hash )
- LeetCodeOJ. Maximum Depth of Binary Tree
- 【次小生成树】bzoj1977 [BeiJing2010组队]次小生成树 Tree
- Splay伸展树入门(单点操作,区间维护)附例题模板
- SQL修改日期类型字段为字符串类型
- Redis详解与常见问题解决方案
- hive小文件合并设置参数
- 关于appium-doctor运行时提示不是内部或外部的命令
- yarn upgrade
- java-Redis集合
- python 如何把小数变成百分数格式
- Eureka 注册中心 简单搭建
- 020PHP基础知识——函数(三)
- HDU 2157 How many ways??(简单线性DP | | 矩阵快速幂)
- 巧妙的运用group,count,order有利于统计
热门文章
- 电感耦合非接触IC卡系统的EMI问题
- Delphi中的“委托”
- samba服务器上文件名大小写
- poj2486 Apple Tree【区间dp】
- 【Linux命令】Ubuntu14.04+QT5.2配置mysql
- BZOJ 1677: [Usaco2005 Jan]Sumsets 求和( dp )
- Servlet转发和重定向的区别
- .NET中DLL“没有可放置在工具箱的组件”—FreeTextBox
- HTTP协议一次上传多个文件的方法
- [LeetCode]题解(python):026-Remove Duplicates from Sorted Array