【发布时间】:2014-06-16 11:16:43
【问题描述】:
我正在使用代码作为
NTSTATUS
Register (_In_ FLT_FILESYSTEM_TYPE VolumeFilesystemType)
{
NTSTATUS status = STATUS_FLT_DO_NOT_ATTACH;
try {
if (VolumeFilesystemType != FLT_FSTYPE_NTFS) {
status = STATUS_NOT_SUPPORTED;
leave;
}
...
}
finally {
if (!NT_SUCCESS(status)) {
KdPrintEx((DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "AAFileFilter!Failed to register with status: %x\n", status));
return STATUS_FLT_DO_NOT_ATTACH;
}
else
{
return STATUS_SUCCESS;
}
}
}
我为warning C4532 获得了C2220。如果我将代码更改为
...
finally {
if (!NT_SUCCESS(status)) {
KdPrintEx((DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "AAFileFilter!Failed to register with status: %x\n", status));
}
}
if (NT_SUCCESS(status))
{
return STATUS_SUCCESS;
}
else
{
return STATUS_FLT_DO_NOT_ATTACH;
}
}
- 警告消失了.. 不明白是什么原因?对我来说,这两种情况下的代码都应该完全一样。 (我在 C 中使用 VS2013 和 WindowsKernelModeDriver8.1 项目)
【问题讨论】:
-
嗯?这肯定不是 C 吗?
-
@unwind WindowsKernelModeDriver8.1 项目它只在c..
-
你没有告诉我们你收到什么警告......
-
@BransDs:对,所以“警告视为错误”告诉我们编译器将您的警告视为错误。现在警告是什么?
-
@JohnZwinck 我更新了帖子-“继续”:跳出 __finally/finally 块在终止处理期间具有未定义的行为
标签: c visual-studio compiler-warnings try-catch-finally