2

まず、DDK ビルド ユーティリティを使用して、次の main.c を正常にコンパイルできます。

#include <ntddk.h>

NTSTATUS DriverEntry(PDRIVER_OBJECT, PUNICODE_STRING)
{
    try
    {
        leave;
    }
    except (1)
    {
    }

    return 0;
}

ただし、次の点に注意してください。

「leave」と「except」はどちらも有効な C 言語のキーワードではありません。

__leave と __except (つまり、先頭にアンダースコアが 2 つ付いているもの) の両方が C 言語を拡張するための Microsoft 固有のキーワードであることは知っていますが、"leave" と "except" はそうではありません。

また、「leave」と「except」がマクロで定義されていないことも確認しました。MSDN はこれについて何も説明していません。

誰が説明してくれますか? 前もって感謝します。

4

1 に答える 1

3

Rohan が指摘したように、それらは のマクロによって定義されwarning.hます。定義は、アンダースコアのないバージョンを使用していた古いコードとの後方互換性のためにあります。

于 2012-09-07T17:39:44.450 に答える