Создание приложений с использованием SDK и DDK

Тема в разделе "LANGS.C", создана пользователем UTeX, 18 ноя 2007.

  1. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    Прошу меня извинить и не ругать особо, т к совсем новичек
    После предыдущего поста все вроде бы было хорошо, но не долго

    Код (Text):
    1. namespace NT
    2. {
    3.     extern "C"
    4.     {
    5.         #pragma warning(disable:4005)
    6.         #pragma warning(disable:4200)    
    7.         #include<ntdef.h>
    8.         #include<ntddk.h>    
    9.         #pragma warning(default:4005)
    10.         #pragma warning(default:4200)
    11.     }
    12. }
    13. using NT::NTSTATUS;
    14.  
    15. #pragma comment (linker, "/entry:main")
    16.  
    17. int main()
    18. {
    19.     return 0;
    20. }
    И вот эти ошибки так и не получилось убрать
    С чем это связано? Уже перепробовал, что мог (((
    Помогите пожалуйста

     
  2. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    Сменил DDK с 2k3 SP1 на XP

    не помогло

    работаю в среде MSVS2005
    c
    Platform SDK Win2k3 R2
     
  3. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    using NT::NTSTATUS - это относится к С++. Видимо нужно определить что используется с++ какой нибудь #define __cplusplus. Пиши на чистом Си.
     
  4. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    Ну как видишь по ошибкам - скорее всего нет. Не понимаю в чем проблема.

    Кто нибудь может попробовать и ответить?
     
  5. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    Попробуй
    Код (Text):
    1. #include <ntddk.h>
    2.  
    3. NTSTATUS DriverEntry (PDRIVER_OBJECT  pDriverObject,
    4.                       PUNICODE_STRING pusRegistryPath)
    5. {
    6.  
    7.     NTSTATUS Status = STATUS_SUCCESS;
    8.  
    9.     pDriverObject->DriverUnload = DriverUnload;
    10.  
    11.     return Status;
    12. }
    13.  
    14. // Выгрузка драйвера из памяти
    15.  
    16. VOID DriverUnload (PDRIVER_OBJECT pDriverObject)
    17. {
    18.     return;
    19. }
    А sources примерно такой

    Код (Text):
    1. TARGETNAME=Code
    2. TARGETPATH=..\BUILD\BIN
    3. TARGETTYPE=DRIVER
    4.  
    5. INCLUDES=$(DDK_INC_PATH)
    6.  
    7. SOURCES= code.c
    И при чем сдесь main в ядре ?

    собирать - скопируй makefile в каталог, а собирать build -csZ

    Или вот прикрепленный рабочий пример (кажется Great давал)
     
  6. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    PROFi
    Понимаешь
    Я знаю как собрать драйвер

    Но это юзермод приложение которое юзает и windows.h и ntddk.h
    вот именно это дело и нужно собрать, но как... черт его знает - какие-то тупые ошибки
     
  7. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Код (Text):
    1. #define  WIN32_LEAN_AND_MEAN
    2. #include <windows.h>
    3.  
    4. namespace NT
    5. {
    6.     extern "C"
    7.     {
    8.         #pragma warning(disable:4005)
    9.         #pragma warning(disable:4200)    
    10.         #include<ntdef.h>
    11.         #include<ntddk.h>    
    12.         #pragma warning(default:4005)
    13.         #pragma warning(default:4200)
    14.     }
    15. }
    16. using NT::NTSTATUS;
     
  8. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    Four-F
    увы это не помогло

    походу наверное так нельзя вообще делать

    #define WIN32_LEAN_AND_MEAN - эту вставил но она ведь никак не влияет
    #include <windows.h> - эта строка у меня была просто пропустил
     
  9. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    Может еще какие-то идеи есть?
     
  10. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    я нашел какой-то хеадер

    ntdll.h

    Алексей Коберниченко (C)

    кто нибудь с ним знаком? (с хеадером конечно)

    попробовал хеадер - все ок (нужно конечно добавлять чего нет - но уж лучше чем эти бока с ntddk.h)
     
  11. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Это из старой книжки по внутренностям NT4.

    Намного хуже. Устанешь добавлять чего нет - это мягко говоря. В ДДК всё уже определено - нужно только взять. Разбирай исходник, который я постил. Я этим способом уже лет 5-6 пользуюсь в куче проектов и простых и сложных. Всё решается пространством имен однозначно и без проблем. Набивать свои собственные ДДК хидеры безперспективно.
     
  12. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    Four-F

    Ты об исходнике выше?
    Тупо вставляю его - и нифига

    смотрю где обьявлена SINGLE_LIST_ENTRY
    в winbase.h хеадер и в ntddk.h - и это не поправить походу с помощью пространства имен

    ну это ведь в принципе верно? структура обьявлена в 2х библиотеках поэтому компилятор видит неоднозначность

    я не прав?
     
  13. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    Four-F
    Просто не понимаю как может быть иначе если winbase.h я инклюдю из windows.h
    а потом ntddk.h самостоятельно.

    вот определение из winbase.h
    Код (Text):
    1. WINBASEAPI
    2. PSLIST_ENTRY
    3. WINAPI
    4. InterlockedPushEntrySList (
    5.     __inout PSLIST_HEADER ListHead,
    6.     __inout PSLIST_ENTRY ListEntry
    7.     );
    а вот и определение из ntddk.h
    Код (Text):
    1. __inline
    2. VOID
    3. ExFreeToNPagedLookasideList(
    4.     IN PNPAGED_LOOKASIDE_LIST Lookaside,
    5.     IN PVOID Entry
    6.     )
    7.  
    8. /*++
    9.  
    10. Routine Description:
    11.  
    12.     This function inserts (pushes) the specified entry into the specified
    13.     nonpaged lookaside list.
    14.  
    15. Arguments:
    16.  
    17.     Lookaside - Supplies a pointer to a nonpaged lookaside list structure.
    18.  
    19.     Entry - Supples a pointer to the entry that is inserted in the
    20.         lookaside list.
    21.  
    22. Return Value:
    23.  
    24.     None.
    25.  
    26. --*/
    27.  
    28. {
    29.  
    30.     Lookaside->L.TotalFrees += 1;
    31.     if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) {
    32.         Lookaside->L.FreeMisses += 1;
    33.         (Lookaside->L.Free)(Entry);
    34.  
    35.     } else {
    36.  
    37. [b]#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)[/b]  // а это еще что такое?
    38.  
    39.         ExInterlockedPushEntrySList(&Lookaside->L.ListHead,
    40.                                     (PSLIST_ENTRY)Entry,
    41.                                     &Lookaside->Lock__ObsoleteButDoNotDelete);
    42.  
    43. #else
    44.  
    45.         InterlockedPushEntrySList(&Lookaside->L.ListHead,
    46.                                   [b](PSLIST_ENTRY)Entry[/b]);
    47.  
    48. #endif
    49.  
    50.     }
    51.     return;
    52. }
    Код (Text):
    1. [b]#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)[/b]// а это еще что такое? вот если эту херню определяю то все работает. но можно ли так?
    2.  
    3. NTKERNELAPI
    4. VOID
    5. ExFreeToPagedLookasideList(
    6.     IN PPAGED_LOOKASIDE_LIST Lookaside,
    7.     IN PVOID Entry
    8.     );
    9.  
    10. #else
    11.  
    12. __inline
    13. VOID
    14. ExFreeToPagedLookasideList(
    15.     IN PPAGED_LOOKASIDE_LIST Lookaside,
    16.     IN PVOID Entry
    17.     )
    18.  
    19. /*++
    20.  
    21. Routine Description:
    22.  
    23.     This function inserts (pushes) the specified entry into the specified
    24.     paged lookaside list.
    25.  
    26. Arguments:
    27.  
    28.     Lookaside - Supplies a pointer to a nonpaged lookaside list structure.
    29.  
    30.     Entry - Supples a pointer to the entry that is inserted in the
    31.         lookaside list.
    32.  
    33. Return Value:
    34.  
    35.     None.
    36.  
    37. --*/
    38.  
    39. {
    40.  
    41.     Lookaside->L.TotalFrees += 1;
    42.     if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) {
    43.         Lookaside->L.FreeMisses += 1;
    44.         (Lookaside->L.Free)(Entry);
    45.  
    46.     } else {
    47.         InterlockedPushEntrySList(&Lookaside->L.ListHead,
    48.                                   (PSLIST_ENTRY)Entry);
    49.     }
    50.  
    51.     return;
    52. }
    53.  
    54. #endif
    и тут в ntddk.h бока
     
  14. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    может быть из-за того ч то явное приведение типа?
     
  15. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    Получается код если определения есть вызывается передачей управления функции, а иначе макросом. это нормально если я объявляю _WIN2K_COMPAT_SLIST_USAGE && _X86_? может в ядре и юзер моде есть различия в вызове?
     
  16. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    у тебя вообще ошибка другая по смыслу и с PSDK никаким боком не свзана. Погугли, где-от попадалась инфа про эту ошибку.
     
  17. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    посмотрел windows.h
    в нем _X86_ определен сразу как для Win32 архитектуры _M_IX86

    а вот это вот дело нигде не определено

    _WIN2K_COMPAT_SLIST_USAGE

    погуглил - нарыл такую вот чушь

    Не понимаю в чем же тогда прикол? т е эту тягу желательно обьявлять?
    Плиз поправьте если не так.
     
  18. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    n0name
    Вобщем я не знаю, но в таком виде все сразу собирается безо всяких писков.
    Конечно скорее всего я не прав, но пока что работает.


    Помогите плиз
     
  19. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    Люди у кого собирается этот код без проблем

    Код (Text):
    1. #define  WIN32_LEAN_AND_MEAN
    2. #include <windows.h>
    3.  
    4. namespace NT
    5. {
    6.     extern "C"
    7.     {
    8.         #pragma warning(disable:4005)
    9.         #pragma warning(disable:4200)
    10.         #include<ntdef.h>
    11.         #include<ntddk.h>    
    12.         #pragma warning(default:4005)
    13.         #pragma warning(default:4200)
    14.     }
    15. }
    16. using NT::NTSTATUS;
    17.  
    18. #pragma comment (linker, "/entry:main")
    19.  
    20. int main()
    21. {
    22.     return 0;
    23. }
    попробуйте
    #undef _WIN2K_COMPAT_SLIST_USAGE вставить в этот код и собрать его, чтобы я точно понял что это у меня бока
     
  20. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Да. См. http://www.wasm.ru/forum/viewtopic.php?id=18794. Там только наоборот - не собирался драйвер из-за конфликта с юзермод хидерами.

    Вышеприведенный код у меня собирается без проблем на шестой студии с хидерами из IFS Kit Server 2003.