__try异常处理

#ifdef __cplusplus
extern "C" 
{

#endif
#include <ntddk.h>
#ifdef __cplusplus
}
#endif

void helloxpUnload(IN PDRIVER_OBJECT DriverObject);
void Test(void);

#ifdef __cplusplus
extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING  RegistryPath);
#endif

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING  RegistryPath)
{


	DbgPrint("Hello from hello2003!\n");
	DriverObject->DriverUnload = helloxpUnload;

	PEPROCESS pEprocess=PsGetCurrentProcess();
	PTSTR ProcessName=(PTSTR)((ULONG)pEprocess+0x174);
	DbgPrint(TEXT("%s"),ProcessName);

	int* P=NULL;
	__try
	{
		//判断指针是否可读
		ProbeForRead(P,100,4);
		*P=1234;

	}
	__except(EXCEPTION_EXECUTE_HANDLER)
	{
		DbgPrint(TEXT("异常产生\n"));
	}

	Test();


	return STATUS_SUCCESS;
}

void helloxpUnload(IN PDRIVER_OBJECT DriverObject)
{
	DbgPrint("Goodbye from hello2003!\n");
}


void Test(void)
{
	__try
	{
		//做一些事哈
		DbgPrint(TEXT("我是你的大皇冠\n"));
		return;
	}
	__finally
	{
		//程序退出前必须执行到这里,比如释放资源等等
		DbgPrint(TEXT("打我PG我不乖\n"));

	}

	return;
}
 


 

EXCEPTION_EXECUTE_HANDLE
该数值为1,进入到__except进行错误处理,处理完后不再回到__try{}块中,转而继续执行。

EXCEPTION_CONTINUE_SEARCH
该数值为0,不使用__excep块中的异常处理,转而向上一层回卷。如果已经是最外层,则向操作系统请求异常处理函数。

EXCEPTION_CONTINUE_EXECUTION
该数值为-1,重复先前错误的指令

回卷:程序执行到某个地方出现异常错误时,系统会寻找出错误点是否处于一个try{}块中,并进入try块提供的异常出来代码。如果当前try块没有提供异常处理,则会向更外一层的try块,寻找异常处理代码。直到最外层try{}快也没有提供异常处理代码,则交由操作系统处理。
这种向外一层寻找异常处理的机制,被称为回卷。一般处理异常,是通过try-except块来处理的。
ExRaiseStatus   用指定状态代码出发异常
ExRaiseAccessViolation  触发STATUS_ACCESS_VIOLATION异常
ExRaiseDattypeMisaligment 触发STATUS_DATATYPE_MISALIGNMENT异常


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值