Какие манипуляции нужно сделать с файлами для VS чтобы можно было использовать class. Просто объявление class вызывает ошибку но в тоже время есть dsw от проэкта He4HookInv в котором широко используются классы, а также driver wizard создает проэкты в виде классов
Какая именно ошибка? Вот простейший класс, который без проблем использую вместо RtlInitUnicodeString: Code (Text): class Counted_string { UNICODE_STRING str; public: __forceinline Counted_string(const wchar_t * s) { str.Buffer = (wchar_t *) s; str.Length = 0; while( *s++ ) str.Length += sizeof(wchar_t); str.MaximumLength = str.Length + sizeof(wchar_t); } UNICODE_STRING * operator &() { return &str; }; };
syntax error : identifier 'Counted_string' syntax error : ';' found '{' at file scope (missing function header?) error C2059: syntax error : '}' как у вас создан файл проэкта? проэкт создан из source тулзой srctodsp
Ребята, побойтесь бога. ООП в ядре и "Воин дзена" плохо коррелируют )) http://www.microsoft.com/whdc/driver/kernel/KMcode.mspx
SPath > У меня есть только студия 2005 beta2 и использование её компилятора для создания дров мне кажется опасным Компилирую всё батником: cl /O[тут опции оптимизации] /Gz /Fe%kmd_name% %kmd_resource%.res /Zc:wchar_t,forScope %kmd_source% /link /align:32 /driver /machine:x86 В исходнике должны быть такие строчки: Code (Text): #pragma comment(linker, "/entry:DriverEntry") // или как там у вас. #pragma comment(linker, "/subsystem:native") #pragma comment(lib, "ntoskrnl.lib") // другие либы, если нужны - аналогично #pragma intrinsic( memcpy ) // для всех crt a-ций, что бы не линковалось ничего Хидеры из DDK подключаю так: Code (Text): #define _X86_ #ifdef __INTEL_COMPILER // если нужно собирать Intel C Compiler #if _MSC_VER < 1300 #undef _MSC_VER #define _MSC_VER 1300 #endif #endif extern "C" { // нужно когда компилятор в режиме CPP #include <ntddk.h> } И ещё - использовать статические экземпляры классов нельзя, поскольку вызовом конструкторов\деструкторов занимается CRT. Противникам "ООП в драйверах" предлагаю ответить на 2 вопроса: - если в сорцах встречается слово "class", означает ли это, что используется ООП? - в чём разница между массивом MajorFunction в структуре DRIVER_OBJECT и таблицей виртуальных методов?