PsCreateSystemThread

HANDLE hSystemThread,hMyThread;
PsCreateSystemThread(&hSystemThread,NULL,NULL,NULL,NULL,ThreadSystemStart,NULL);
PsCreateSystemThread(&hMyThread,NULL,NULL,NtCurrentProcess(),NULL,ThreadUserStart,NULL);
ZwClose(hSystemThread);
ZwClose(hMyThread);
//系统线程
VOID ThreadSystemStart( IN PVOID  StartContext)
{
#if DBG
	_asm int 3
#endif

	PEPROCESS pEProcess=IoGetCurrentProcess();
	PTSTR ProcessName=(PTSTR)((ULONG)pEProcess+0x164);
	DbgPrint("ThreadSystemStart run in %s process!\n",ProcessName);

	//结束线程
	PsTerminateSystemThread(STATUS_SUCCESS);
	return;
}

//用户线程
VOID ThreadUserStart( IN PVOID  StartContext )														
{
#if DBG
	_asm int 3
#endif

	PEPROCESS pEProcess=IoGetCurrentProcess();
	PTSTR ProcessName=(PTSTR)((ULONG)pEProcess+0x164);					//2003系统是这个
	DbgPrint("ThreadUserStart run in %s process!\n",ProcessName);

	//结束线程
	PsTerminateSystemThread(STATUS_SUCCESS);										//结束线程
	return;
}

 

NTSTATUS HelloDDKControl(IN PDEVICE_OBJECT pDevObj,IN PIRP pIrp)
{
#if DBG
	_asm int 3
#endif

	NTSTATUS status=STATUS_SUCCESS;
	//获取当前堆栈
	PIO_STACK_LOCATION stack=IoGetCurrentIrpStackLocation(pIrp);

	//得到IOCTL控制码
	ULONG code=stack->Parameters.DeviceIoControl.IoControlCode;
	switch (code)
	{
	case IOCTL_TEST1:	//缓冲区方式IOCTL
		{
				HANDLE hSystemThread,hMyThread;
				PsCreateSystemThread(&hSystemThread,NULL,NULL,NULL,NULL,ThreadSystemStart,NULL);
				PsCreateSystemThread(&hMyThread,NULL,NULL,NtCurrentProcess(),NULL,ThreadUserStart,NULL);
				ZwClose(hSystemThread);
				ZwClose(hMyThread);
		}
		break;
	default:
		status=STATUS_INVALID_VARIANT;
	}

	//设置IRP的完成状态
	pIrp->IoStatus.Status=status;
	pIrp->IoStatus.Information=0;
	IoCompleteRequest(pIrp,IO_NO_INCREMENT);
	return status;
}



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值