Прошу меня извинить и не ругать особо, т к совсем новичек После предыдущего поста все вроде бы было хорошо, но не долго Код (Text): namespace NT { extern "C" { #pragma warning(disable:4005) #pragma warning(disable:4200) #include<ntdef.h> #include<ntddk.h> #pragma warning(default:4005) #pragma warning(default:4200) } } using NT::NTSTATUS; #pragma comment (linker, "/entry:main") int main() { return 0; } И вот эти ошибки так и не получилось убрать С чем это связано? Уже перепробовал, что мог ((( Помогите пожалуйста
using NT::NTSTATUS - это относится к С++. Видимо нужно определить что используется с++ какой нибудь #define __cplusplus. Пиши на чистом Си.
Ну как видишь по ошибкам - скорее всего нет. Не понимаю в чем проблема. Кто нибудь может попробовать и ответить?
Попробуй Код (Text): #include <ntddk.h> NTSTATUS DriverEntry (PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pusRegistryPath) { NTSTATUS Status = STATUS_SUCCESS; pDriverObject->DriverUnload = DriverUnload; return Status; } // Выгрузка драйвера из памяти VOID DriverUnload (PDRIVER_OBJECT pDriverObject) { return; } А sources примерно такой Код (Text): TARGETNAME=Code TARGETPATH=..\BUILD\BIN TARGETTYPE=DRIVER INCLUDES=$(DDK_INC_PATH) SOURCES= code.c И при чем сдесь main в ядре ? собирать - скопируй makefile в каталог, а собирать build -csZ Или вот прикрепленный рабочий пример (кажется Great давал)
PROFi Понимаешь Я знаю как собрать драйвер Но это юзермод приложение которое юзает и windows.h и ntddk.h вот именно это дело и нужно собрать, но как... черт его знает - какие-то тупые ошибки
Код (Text): #define WIN32_LEAN_AND_MEAN #include <windows.h> namespace NT { extern "C" { #pragma warning(disable:4005) #pragma warning(disable:4200) #include<ntdef.h> #include<ntddk.h> #pragma warning(default:4005) #pragma warning(default:4200) } } using NT::NTSTATUS;
Four-F увы это не помогло походу наверное так нельзя вообще делать #define WIN32_LEAN_AND_MEAN - эту вставил но она ведь никак не влияет #include <windows.h> - эта строка у меня была просто пропустил
я нашел какой-то хеадер ntdll.h Алексей Коберниченко (C) кто нибудь с ним знаком? (с хеадером конечно) попробовал хеадер - все ок (нужно конечно добавлять чего нет - но уж лучше чем эти бока с ntddk.h)
Это из старой книжки по внутренностям NT4. Намного хуже. Устанешь добавлять чего нет - это мягко говоря. В ДДК всё уже определено - нужно только взять. Разбирай исходник, который я постил. Я этим способом уже лет 5-6 пользуюсь в куче проектов и простых и сложных. Всё решается пространством имен однозначно и без проблем. Набивать свои собственные ДДК хидеры безперспективно.
Four-F Ты об исходнике выше? Тупо вставляю его - и нифига смотрю где обьявлена SINGLE_LIST_ENTRY в winbase.h хеадер и в ntddk.h - и это не поправить походу с помощью пространства имен ну это ведь в принципе верно? структура обьявлена в 2х библиотеках поэтому компилятор видит неоднозначность я не прав?
Four-F Просто не понимаю как может быть иначе если winbase.h я инклюдю из windows.h а потом ntddk.h самостоятельно. вот определение из winbase.h Код (Text): WINBASEAPI PSLIST_ENTRY WINAPI InterlockedPushEntrySList ( __inout PSLIST_HEADER ListHead, __inout PSLIST_ENTRY ListEntry ); а вот и определение из ntddk.h Код (Text): __inline VOID ExFreeToNPagedLookasideList( IN PNPAGED_LOOKASIDE_LIST Lookaside, IN PVOID Entry ) /*++ Routine Description: This function inserts (pushes) the specified entry into the specified nonpaged lookaside list. Arguments: Lookaside - Supplies a pointer to a nonpaged lookaside list structure. Entry - Supples a pointer to the entry that is inserted in the lookaside list. Return Value: None. --*/ { Lookaside->L.TotalFrees += 1; if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) { Lookaside->L.FreeMisses += 1; (Lookaside->L.Free)(Entry); } else { [b]#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)[/b] // а это еще что такое? ExInterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry, &Lookaside->Lock__ObsoleteButDoNotDelete); #else InterlockedPushEntrySList(&Lookaside->L.ListHead, [b](PSLIST_ENTRY)Entry[/b]); #endif } return; } Код (Text): [b]#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)[/b]// а это еще что такое? вот если эту херню определяю то все работает. но можно ли так? NTKERNELAPI VOID ExFreeToPagedLookasideList( IN PPAGED_LOOKASIDE_LIST Lookaside, IN PVOID Entry ); #else __inline VOID ExFreeToPagedLookasideList( IN PPAGED_LOOKASIDE_LIST Lookaside, IN PVOID Entry ) /*++ Routine Description: This function inserts (pushes) the specified entry into the specified paged lookaside list. Arguments: Lookaside - Supplies a pointer to a nonpaged lookaside list structure. Entry - Supples a pointer to the entry that is inserted in the lookaside list. Return Value: None. --*/ { Lookaside->L.TotalFrees += 1; if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) { Lookaside->L.FreeMisses += 1; (Lookaside->L.Free)(Entry); } else { InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry); } return; } #endif и тут в ntddk.h бока
Получается код если определения есть вызывается передачей управления функции, а иначе макросом. это нормально если я объявляю _WIN2K_COMPAT_SLIST_USAGE && _X86_? может в ядре и юзер моде есть различия в вызове?
у тебя вообще ошибка другая по смыслу и с PSDK никаким боком не свзана. Погугли, где-от попадалась инфа про эту ошибку.
посмотрел windows.h в нем _X86_ определен сразу как для Win32 архитектуры _M_IX86 а вот это вот дело нигде не определено _WIN2K_COMPAT_SLIST_USAGE погуглил - нарыл такую вот чушь Не понимаю в чем же тогда прикол? т е эту тягу желательно обьявлять? Плиз поправьте если не так.
n0name Вобщем я не знаю, но в таком виде все сразу собирается безо всяких писков. Конечно скорее всего я не прав, но пока что работает. Помогите плиз
Люди у кого собирается этот код без проблем Код (Text): #define WIN32_LEAN_AND_MEAN #include <windows.h> namespace NT { extern "C" { #pragma warning(disable:4005) #pragma warning(disable:4200) #include<ntdef.h> #include<ntddk.h> #pragma warning(default:4005) #pragma warning(default:4200) } } using NT::NTSTATUS; #pragma comment (linker, "/entry:main") int main() { return 0; } попробуйте #undef _WIN2K_COMPAT_SLIST_USAGE вставить в этот код и собрать его, чтобы я точно понял что это у меня бока
Да. См. http://www.wasm.ru/forum/viewtopic.php?id=18794. Там только наоборот - не собирался драйвер из-за конфликта с юзермод хидерами. Вышеприведенный код у меня собирается без проблем на шестой студии с хидерами из IFS Kit Server 2003.