今天调试一个驱动发现了一些平时没有考虑过的问题,在驱动当中使用__try和__finally时,在__try块直接使用return时会出现什么情况!
我用wdk里面的例子做为我的测试代码,通过逆向发现在__try块执行return不会被执行到__finally中,而是马上就返回了。因此在__try块中直接使用return会非常的危险,强烈建议不要这样做!我今天就吃了大苦头。
下面是我用来测试的代码,反汇编如下代码可看出一些端倪来:
NTSTATUS DriverEntry(__in PDRIVER_OBJECT DriverObject, __in PUNICODE_STRING RegistryPath)
{
PDEVICE_OBJECT deviceObject;
PDEVICE_EXTENSION deviceExtension;
UNICODE_STRING ntDeviceName;
UNICODE_STRING symbolicLinkName;
NTSTATUS status;
UNREFERENCED_PARAMETER(RegistryPath);
DebugPrint(("==>DriverEntry\n"));
__try
{
//
// Create the device object
//
RtlInitUnicodeString(&ntDeviceName, NTDEVICE_NAME_STRING);