Как собрать исходник из G.Nebbett.Windows 2000 Native API Reference

Тема в разделе "WASM.BEGINNERS", создана пользователем _sheva740, 14 ноя 2007.

  1. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Нашел книгу "G.Nebbett.Windows 2000 Native API Reference"
    Нашел примеры из книги
    Все примеры компилятся из makefile через nmake
    makefile
    Код (Text):
    1. !ifdef debug
    2. cdebug = -Od -Z7
    3. ldebug = -debug:full -debugtype:cv
    4. !else
    5. cdebug = -Ox
    6. ldebug = -release
    7. !endif
    8.  
    9. CPPFLAGS = -c -W3 -GX -MD -nologo $(cdebug) -D_X86_ -DSTRICT -DWIN32_LEAN_AND_MEAN
    10. lflags = -incremental:no -pdb:none -nologo $(ldebug)
    11.  
    12. llibs = ntdll.lib kernel32.lib advapi32.lib imagehlp.lib
    13.  
    14. !ifdef dll
    15. $(target).dll: $(target).obj ; link $(lflags) $(llibs) $** -dll
    16. !else
    17. $(target).exe: $(target).obj ; link $(lflags) $(llibs) $**
    18. !endif
    Помогите перевести этот make в обычные строки
    типа
    ML.EXE /Cp /nologo ...
    LINK.EXE /SUBSYSTEM:WINDOWS /DEBUG ...
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    не полный пример makefile'a. нет компиляции
     
  3. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    n0name
    ваша правда.
    ----> makefile
    Код (Text):
    1. !ifdef debug
    2. cdebug = -Od -Z7
    3. ldebug = -debug:full -debugtype:cv
    4. !else
    5. cdebug = -Ox
    6. ldebug = -release
    7. !endif
    8.  
    9. CPPFLAGS = -c -W3 -GX -MD -nologo $(cdebug) -D_X86_ -DSTRICT -DWIN32_LEAN_AND_MEAN
    10. lflags = -incremental:no -pdb:none -nologo $(ldebug)
    11.  
    12. llibs = ntdll.lib kernel32.lib advapi32.lib imagehlp.lib
    13.  
    14. !ifdef dll
    15. $(target).dll: $(target).obj ; link $(lflags) $(llibs) $** -dll
    16. !else
    17. $(target).exe: $(target).obj ; link $(lflags) $(llibs) $**
    18. !endif
    -----> makeall.bat
    Код (Text):
    1. @echo off
    2. nmake -nologo target=ex01_1 dll=1 | find /v "C6311"
    3. nmake -nologo target=ex01_2 | find /v "C6311"
    4. nmake -nologo target=ex01_3 | find /v "C6311"
    5. nmake -nologo target=ex01_4 | find /v "C6311"
    6. nmake -nologo target=ex02_1 | find /v "C6311"
    7. nmake -nologo target=ex06_1 | find /v "C6311"
    8. nmake -nologo target=ex06_2 | find /v "C6311"
    9. nmake -nologo target=ex06_3 dll=1 | find /v "C6311"
    10. nmake -nologo target=ex08_1 | find /v "C6311"
    11. nmake -nologo target=ex11_1 | find /v "C6311"
    12. nmake -nologo target=ex12_1 | find /v "C6311"
    13. nmake -nologo target=ex13_1 | find /v "C6311"
    14. nmake -nologo target=ex20_4 | find /v "C6311"
    15. nmake -nologo target=ex21_1 | find /v "C6311"
    16. nmake -nologo target=ex21_2 | find /v "C6311"
    Теперь точно все
    приведу пример одной небольшой его проги
    -----> ex01_4.cpp
    Код (Text):
    1. #include "ntdll.h"
    2. #include "windbgkd.h"
    3. #include <stdio.h>
    4.  
    5. BOOL EnablePrivilege(PCSTR name)
    6. {
    7.     TOKEN_PRIVILEGES priv = {1, {0, 0, SE_PRIVILEGE_ENABLED}};
    8.     LookupPrivilegeValue(0, name, &priv.Privileges[0].Luid);
    9.  
    10.     HANDLE hToken;
    11.     OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken);
    12.  
    13.     AdjustTokenPrivileges(hToken, FALSE, &priv, sizeof priv, 0, 0);
    14.     BOOL rv = GetLastError() == ERROR_SUCCESS;
    15.  
    16.     CloseHandle(hToken);
    17.     return rv;
    18. }
    19.  
    20. int main()
    21. {
    22.     DBGKD_GET_INTERNAL_BREAKPOINT bp[20];
    23.     ULONG n;
    24.  
    25.     EnablePrivilege(SE_DEBUG_NAME);
    26.  
    27.     NT::ZwSystemDebugControl(NT::DebugGetTraceInformation, 0, 0, bp, sizeof bp, &n);
    28.  
    29.     for (int i = 0; i * sizeof (DBGKD_GET_INTERNAL_BREAKPOINT) < n; i++)
    30.  
    31.         printf("%lx %lx %ld %ld %ld %ld %ld\n",
    32.                bp[i].BreakpointAddress, bp[i].Flags,
    33.                bp[i].Calls, bp[i].MaxCallsPerPeriod,
    34.                bp[i].MinInstructions, bp[i].MaxInstructions,
    35.                bp[i].TotalInstructions);
    36.  
    37.     return 0;
    38. }
    Помогите перевести этот make в обычные строки
    типа
    ML.EXE /Cp /nologo ...
    LINK.EXE /SUBSYSTEM:WINDOWS /DEBUG ...
     
  4. masharabinovich

    masharabinovich New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    3
    nmake /N запусти, оно напишит всё, что собираецца делать
     
  5. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Вот компилируемый проект (VS6.0). В настройках студии Tools -> Options -> Directories должны быть прописаны пути к DDK хидерам и либам. У меня так.

    Include Files
    X:\DDK\inc\w2k
    X:\DDK\inc\ddk\w2k

    Library Files
    X:\DDK\lib\w2k\i386
     
  6. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Four-F

    - Tools -> Options -> Directories ... прописаны как сказано
    - Все сделал как в Native.rar, и вот

    Код (Text):
    1. Compiling...
    2. SystemBasicInformation.cpp
    3. d:\winxpddk\inc\ddk\wxp\ntdef.h(1320) : error C2015: too many characters in constant
    4. d:\winxpddk\inc\ddk\wxp\ntdef.h(1320) : error C2006: #include expected a filename, found 'constant'
    5. d:\winxpddk\inc\ddk\wxp\ntddk.h(33) : fatal error C1083: Cannot open include file: 'bugcodes.h': No such file or directory
    6. Error executing cl.exe.
    7.  
    8. SystemBasicInformation.exe - 3 error(s), 0 warning(s)
    причем fatal error C1083: Cannot open include file: 'bugcodes.h': No such file or directory - файл на месте. Чего не так?
     
  7. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Это из-за того что у тебя нет второго пути к хидерам или они не в том порядке. В твоем случае Tools -> Options -> Directories -> Include Files должно быть так (порядок важен):

    d:\winxpddk\inc\wxp
    d:\winxpddk\inc\ddk\wxp
     
  8. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Four-F
    masharabinovich
    благодарен за внимание.
     
  9. defaultplayer

    defaultplayer New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    214
    статические пути это неесть хорошо, я налабался набивать опции и собирать один и тот же каркас драйвера в любой студии без сторонних средств с ДДКXP, 2003, ВДК6.0 буквально за пару-тройку минут , если кому интересно мог бы попытаться описать это в статейке или видео можно сделать
     
  10. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    defaultplayer
    будем ждать без терпения:)
     
  11. slavanap

    slavanap Вячеслав

    Публикаций:
    0
    Регистрация:
    10 сен 2008
    Сообщения:
    300
    Адрес:
    Смоленск, Россия
    defaultplayer
    будем ждать
    +1
     
  12. defaultplayer

    defaultplayer New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    214
    готово http://www.wasm.ru/forum/viewtopic.php?id=28942