2010-05-31 3 views
1

В Windows Driver Kit (WDK) есть примеры кода драйвера, написанные на чистом C, но посыпанные некоторыми конструкциями try-catch-finally. Кто-то знает их семантику? Благодарим microsoft за отличные инструменты и соответствие стандартам.microsoft windows driver kit pure C попробуйте уловить синтаксис?

Код экстракт из some_file.c:

try { 
    ... 
    if (!NT_SUCCESS(status)) { 

     leave; // ??? 
    } 
    ... 
} finally { 
    ... 
} 

try { 
    ... 
} except(EXCEPTION_EXECUTE_HANDLER) { 
    ... 
} 
+5

-1 для неинформированы МС трепку - была необходима SEH и, кроме предшествующих исключений C++, реализует модель, которую некоторые находят выше C++. Конечно, для написания драйверов устройств и ядра, ваша реакция на него вызывает беспокойство. Желание использовать обработку исключений C++ в драйвере является подозрительным. –

+2

+1 для отмены -1, заданного MS fanboy – qrdl

+1

Каждая ОС имеет расширения для ISO C, например asprintf() и epoll(). Вам просто нужно открыть и привыкнуть к ним. Я уверен, что MS не имеет EXPORT_SYMBOL(). Каждое ядро ​​определяет свою собственную песочницу, может также привыкнуть к этому :) Работа в пространстве ядра или использование пространства с микроядрами драйверов имеет собственный набор правил. Никакое ядро, которое я знаю, не поддерживает стандартную библиотеку C. –

ответ

2

пробном/за исключением обработки в WDK следует модели SEH, используемую в окнах. Обратите внимание, что вы можете продолжить работу после обнаружения исключения.

Эта модель предшествовала C++, поэтому стандарт C++ не совпадает с моделью исключений, используемой Win32.

PS: С не имеет обработку исключений, поэтому SEH является нестандартным расширением C.

SEH exception handling in the MSDN

Introduction to SEH

+0

Вы знаете, где я могу прочитать об этой модели SEH? – clyfe

+0

http://msdn.microsoft.com/en-us/library/ms680657%28VS.85%29.aspx – evilpie

Смежные вопросы