我正在使用代码
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;
}
}
}
我为C2220获得warning C4532 。如果我将代码更改为
...
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;
}
}
答案 0 :(得分:2)
使用return语句或longjmp运行时函数退出try-finally语句被视为异常终止。您可能会收到有关此问题的警告,警告将被视为错误。
PS。微软的C支持是废话。
答案 1 :(得分:1)
您收到编译器错误的最可能原因是因为这不是有效的C。
try
(但在C ++,Java,C#中)。finally
(但在Java,C#中)。leave;
无效C,除非这是您尚未发布的宏。您可能必须启用非标准语言扩展,否则切换到严格符合C编译器。 Visual Studio因其标准合规性差而臭名昭着。