Re: Компиляция драйвера
От: _nn_  
Дата: 26.10.11 12:54
Оценка: 6 (2)
Здравствуйте, Fredwriter, Вы писали:

Советую вам:
VisualDDK, в частности Driver Wizard.
Это позволит вам создавать отлаживать драйверы с невероятным удобством.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: Компиляция драйвера
От: okman Беларусь https://searchinform.ru/
Дата: 27.10.11 07:04
Оценка: 3 (1) +1
Здравствуйте, баг, Вы писали:

баг>Здравствуйте, Fredwriter, Вы писали:


F>>Здравствуйте, расскажите пожалуйста об утилите Build из пакета DDK

баг>А она точно нужна? Драйвер-то скомпилировать можно и прямо в студии.

Не всякий драйверный код можно скомпилировать из Студии.
Re[3]: Компиляция драйвера
От: okman Беларусь https://searchinform.ru/
Дата: 26.10.11 13:40
Оценка: 2 (1) +1
Здравствуйте, Fredwriter, Вы писали:

F>Еще пару глупых вопросов: Какое расширение должно быть у MakeFile, у меня .mak, а у source .src.


Никаких расширений у этих файлов быть не должно. Просто makefile, sources и dirs (опционально).

F>В чём может быть проблема, если файл драйвера не компилируется?


Начните с простого sources-файла:

TARGETNAME=MYDRIVER
TARGETTYPE=DRIVER
SOURCES=DriverEntry.c

Это должно собираться, если в коде нет ошибок и точка входа (функция DriverEntry) определена.

O>>В корне проекта должно быть два файла — makefile и sources.

F>Только они? Конечно нет или да.

Ну, еще исходники драйвера, конечно. Был не точен.
Re[7]: Компиляция драйвера
От: okman Беларусь https://searchinform.ru/
Дата: 27.10.11 08:33
Оценка: 2 (1) +1
Здравствуйте, Fredwriter, Вы писали:

F>Скачать с сайта Microsoft WinDDK 7.1.0.7600, установил, В Пуск -> Все программы его нет и нет ни одного Build Environment. Есть только в папке с WinDDK файл Build.exe? что делать?


Это не нормально, должны быть ярлыки в "Windows Driver Kits/WDK 7600.16385.1/Build Environments".
Но можно сделать их самому, либо написать bat-файл примерно такого содержания:

@echo off
C:\Windows\System32\cmd.exe /k C:\WinDDK\bin\setenv.bat C:\WinDDK\ fre x86 WIN7 no_oacr

C:\Windows\System32\cmd.exe — путь к программе cmd на вашем компьютере.
C:\WinDDK\bin\setenv.bat — найдите этот файл setenv.bat внутри папки с установленным WinDDK.
fre (или chk) — тип билда, Free или Checked соответственно.
x86 (или x64) — целевая архитектура.
WIN7 — целевая операционная система (Windows 7). Да-да, разработка драйверов в Windows
подразумевает разные исполняемые файлы для разных версий операционной системы.
Другие константы: WXP (Windows XP), WNET (Windows Server 2003) и WLH (Windows Vista).
no_oacr — оставьте эту опцию, если не хотите запускать OACR (анализатор кода).
Компиляция драйвера
От: Fredwriter  
Дата: 26.10.11 11:57
Оценка: 3 (1)
Здравствуйте, расскажите пожалуйста об утилите Build из пакета DDK, я пишу драйвер и не могу понять что она должна сделать. Если DDK установлен корректно, то нужно сделать так: Пуск -> Все программы -> Development Kits -> Windows DDK 2600 -> Build Environments -> или WinXP Free Build Environment или WinXP Checked Build Environment. Если есть MakeFile, то нужно перейти в рабочую директорию командой cd и написать заветное слово Build, запустится утилита Build.exe c установленными переменными окружения и произойдет КОМПИЛЯЦИЯ(сборка) файла драйвера. Вот такие пироги.
Вопрос у меня следующий: (первый раз пользуюсь этой утилитой и не было еще опыта успешного её использования) что должно произойти после использования этой утилиты? У меня только появился файл buildfre.log с одной строчкой:
BUILD: Computing Include file dependencies:.
Я думал, что должен был появится какие-то файлы Sys или еще что нибудь. Подскажите пожалуйста.
Re: Компиляция драйвера
От: okman Беларусь https://searchinform.ru/
Дата: 26.10.11 12:44
Оценка: 2 (1)
Здравствуйте, Fredwriter, Вы писали:

F>Здравствуйте, расскажите пожалуйста об утилите Build из пакета DDK, я пишу драйвер и не могу понять что она должна сделать. Если DDK установлен корректно, то нужно сделать так: Пуск -> Все программы -> Development Kits -> Windows DDK 2600 -> Build Environments -> или WinXP Free Build Environment или WinXP Checked Build Environment. Если есть MakeFile, то нужно перейти в рабочую директорию командой cd и написать заветное слово Build, запустится утилита Build.exe c установленными переменными окружения и произойдет КОМПИЛЯЦИЯ(сборка) файла драйвера. Вот такие пироги.

F>Вопрос у меня следующий: (первый раз пользуюсь этой утилитой и не было еще опыта успешного её использования) что должно произойти после использования этой утилиты? У меня только появился файл buildfre.log с одной строчкой:
F> BUILD: Computing Include file dependencies:.
F>Я думал, что должен был появится какие-то файлы Sys или еще что нибудь. Подскажите пожалуйста.

Значит, так.
В корне проекта должно быть два файла — makefile и sources.
Еще бывают файлы dirs, но мы их пока рассматривать не будем.

Файл makefile очень простой и всегда одинаковый:

!include $(NTMAKEENV)\Makefile.def

Вот и все содержимое.

В файле sources определяются исходники драйвера (файлы .c).
Плюс некоторые опции сборки (подробно это все расписано в WDK).
Например, один из моих файлов sources имеет такое содержание:

TARGETNAME=mock_tdi
TARGETTYPE=DRIVER
RCOPTIONS=$(RCOPTIONS) /d$(HAUBERK_OS_ID)
SOURCES=\
DriverEntry.c \
DispatchCreate.c \
DispatchDeviceControl.c \
DispatchInternalDeviceControl.c \
DispatchCleanup.c \
DispatchClose.c \
CompleteRequest.c \
IRP.c \
CancelSafeQueue.c


Сборка драйвера очень проста — нужно открыть build prompt для целевой системы (например,
WDK/Build Environment/Windows Server 2003/x64 Free Build Environment), затем зайти в
папку проекта и выполнить команду build (возможно, с дополнительными флагами).
После этого, если сборка пройдет успешно, в подпапке с именем типа objfre_wnet_amd64
появятся файлы .sys и .pdb и другие.

Более сложные сценарии включают использование inf-файлов и генерацию/подпись каталогов,
но это отдельная тема.
Re: Компиляция драйвера
От: okman Беларусь https://searchinform.ru/
Дата: 26.10.11 12:45
Оценка: 2 (1)
P.S.
Windows DDK 2600 — очень древний DDK.
На сайте Microsoft давно уже доступны для скачивания более свежие версии (у меня 7600.1).
Re[9]: Компиляция драйвера
От: okman Беларусь https://searchinform.ru/
Дата: 27.10.11 11:23
Оценка: 2 (1)
Здравствуйте, Fredwriter.

F>Тут немного, драйвер пробный из книги, там только функция GetMessage.


Скажи-ка, а эта "книга" — случайно не "программирование драйверов для Windows" некой В.Комиссаровой ?
Если так, то можешь смело выбрасывать ее на помойку.
Это худшее (и вредное), что я читал по разработке драйверов.
Re[11]: Компиляция драйвера
От: okman Беларусь https://searchinform.ru/
Дата: 27.10.11 11:35
Оценка: 2 (1)
Здравствуйте, Fredwriter, Вы писали:

F>Что вы мне посоветуете русского по разработке драйверов?


IMHO лучшая книга данной отрасли — "Программирование с использованием Windows Driver Model" (Уолтер Они).
Есть на русском языке. Очень толковая книга из серии подподушечной (в смысле, должна лежать под подушкой).
Еще можно (для разнообразия) почитать книгу Солдатова, хотя там почти ничего нет про обработку IRP (!).
Из полезных — "Windows 200 Device Driver Book, A Guide For Programmers" и туториалы CmdTutRu.
Все это легко найти в Гугле.
Много полезных материалов есть на MSDN и WHDC, а также на OsrOnline (там надо будет зарегистрироваться).

Теперь о компиляции.
Когда что-то не идет, нужно смотреть файлы .wrn и .err в папке проекта.
У меня написало "Cannot open include file: MyDriverMessages.h".
Re[7]: Компиляция драйвера
От: okman Беларусь https://searchinform.ru/
Дата: 27.10.11 08:35
Оценка: +1
Забыл добавить.

@echo off
C:\Windows\System32\cmd.exe /k C:\WinDDK\bin\setenv.bat C:\WinDDK\ fre x86 WIN7 no_oacr

C:\WinDDK\ — это путь к корневой папке, куда установлен WDK (по умолчанию вроде C:\WinDDK\7600.16385.1\).
Re[2]: Компиляция драйвера
От: Fredwriter  
Дата: 26.10.11 13:34
Оценка:
Здравствуйте, okman, Вы писали:

O>Значит, так.

O>В корне проекта должно быть два файла — makefile и sources.
O>Еще бывают файлы dirs, но мы их пока рассматривать не будем.

O>Файл makefile очень простой и всегда одинаковый:

O>

!include $(NTMAKEENV)\Makefile.def

O>Вот и все содержимое.

O>В файле sources определяются исходники драйвера (файлы .c).

O>Плюс некоторые опции сборки (подробно это все расписано в WDK).
O>Например, один из моих файлов sources имеет такое содержание:
O>

O>TARGETNAME=mock_tdi
O>TARGETTYPE=DRIVER
O>RCOPTIONS=$(RCOPTIONS) /d$(HAUBERK_OS_ID)
O>SOURCES=\
O> DriverEntry.c \
O> DispatchCreate.c \
O> DispatchDeviceControl.c \
O> DispatchInternalDeviceControl.c \
O> DispatchCleanup.c \
O> DispatchClose.c \
O> CompleteRequest.c \
O> IRP.c \
O> CancelSafeQueue.c


O>Сборка драйвера очень проста — нужно открыть build prompt для целевой системы (например,

O>WDK/Build Environment/Windows Server 2003/x64 Free Build Environment), затем зайти в
O>папку проекта и выполнить команду build (возможно, с дополнительными флагами).
O>После этого, если сборка пройдет успешно, в подпапке с именем типа objfre_wnet_amd64
O>появятся файлы .sys и .pdb и другие.

O>Более сложные сценарии включают использование inf-файлов и генерацию/подпись каталогов,

O>но это отдельная тема.
Спасибо огромное за информацию. Так как у меня не удачно откомпилировался драйвер у меня не появилось никаких файлов или наоборот.
Еще пару глупых вопросов: Какое расширение должно быть у MakeFile, у меня .mak, а у source .src.
Вот текст моего файла Source:
[g]TARGETNAME = MYDRIVER
TARGETTYPE = DRIVER
#DRIVERTYPE = WDM
TARGETPATH = obj
SOURCES = MyDriver.c MyDriverMessages.rc
C_DEFINES = -DUNICODE -DSTRICT
[/g]
В чём может быть проблема, если файл драйвера не компилируется?
O>В корне проекта должно быть два файла — makefile и sources.
Только они? Конечно нет или да.
Re[2]: Компиляция драйвера
От: Fredwriter  
Дата: 26.10.11 13:37
Оценка:
Здравствуйте, okman, Вы писали:

O>P.S.

O>Windows DDK 2600 — очень древний DDK.
O>На сайте Microsoft давно уже доступны для скачивания более свежие версии (у меня 7600.1).
Спасибо скачаю может быть, сначала хочу что-бы драйвер откомпилировался.
Re[3]: Компиляция драйвера
От: okman Беларусь https://searchinform.ru/
Дата: 26.10.11 13:53
Оценка:
Здравствуйте, Fredwriter.
Шпаргалка:
C:\
    MyProjects\
        MyDriver\
            makefile
            sources
            DriverEntry.c


makefile:

!include $(NTMAKEENV)\Makefile.def

sources:

TARGETNAME=MYDRIVER
TARGETTYPE=DRIVER
SOURCES=DriverEntry.c

DriverEntry.c:

#include <wdm.h>

NTSTATUS
DriverEntry(
__in DRIVER_OBJECT * pDriverObject,
__in UNICODE_STRING * pRegistryPath
)
{
return STATUS_SUCCESS;
}


Для сборки открыть нужную консоль (Build Environment), зайти в папку C:\MyProjects\MyDriver и выполнить build.
Re[4]: Компиляция драйвера
От: Fredwriter  
Дата: 26.10.11 13:58
Оценка:
Здравствуйте, okman, Вы писали:

O>Начните с простого sources-файла:

O>

O>TARGETNAME=MYDRIVER
O>TARGETTYPE=DRIVER
O>SOURCES=DriverEntry.c

O>Это должно собираться, если в коде нет ошибок и точка входа (функция DriverEntry) определена.

Спасибо, буду искать ошибки в коде.
O>Это должно собираться, если в коде нет ошибок и точка входа (функция DriverEntry) определена.
Всё определено, то есть функция DriverEntry есть в исходнике MyDriver.c.
Я использовал WinXP Checked Build Environment и WinXP Free Build Environment.
Re[4]: Компиляция драйвера
От: Fredwriter  
Дата: 26.10.11 14:01
Оценка:
Здравствуйте, okman, Вы писали:

O>Здравствуйте, Fredwriter.

O>Шпаргалка:
O>
O>C:\
O>    MyProjects\
O>        MyDriver\
O>            makefile
O>            sources
O>            DriverEntry.c
O>


O>makefile:

O>

O>!include $(NTMAKEENV)\Makefile.def

O>sources:
O>

O>TARGETNAME=MYDRIVER
O>TARGETTYPE=DRIVER
O>SOURCES=DriverEntry.c

O>DriverEntry.c:
O>

O>#include <wdm.h>

O>NTSTATUS
O>DriverEntry(
O> __in DRIVER_OBJECT * pDriverObject,
O> __in UNICODE_STRING * pRegistryPath
O> )
O>{
O> return STATUS_SUCCESS;
O>}


O>Для сборки открыть нужную консоль (Build Environment), зайти в папку C:\MyProjects\MyDriver и выполнить build.

Это всё я уже сделал много раз еще до того как создал здесь — на RSDN сообщение. Просто никаких файлов не появлялось поэтому я заволновался.
Re[4]: Компиляция драйвера
От: Fredwriter  
Дата: 26.10.11 14:19
Оценка:
Здравствуйте, okman, Вы писали:

O>Начните с простого sources-файла:

O>

O>TARGETNAME=MYDRIVER
O>TARGETTYPE=DRIVER
O>SOURCES=DriverEntry.c

O>Это должно собираться, если в коде нет ошибок и точка входа (функция DriverEntry) определена.

O>>>В корне проекта должно быть два файла — makefile и sources.


O>Ну, еще исходники драйвера, конечно. Был не точен.

Вот что пишет мой Build:
BUILD: Object root set to: ==> objchk
BUILD: Adding /Y to COPYCMD so xcopy ops won't hang.
BUILD: /i switch ignored
BUILD: Using 2 child processes
BUILD: Compile and Link for i386
BUILD: Loading C:\WINDDK\2600\build.dat...
BUILD: Computing Include file dependencies:
BUILD: Done
При этом ничего кроме .log файла не появляется.
Re[5]: Компиляция драйвера
От: okman Беларусь https://searchinform.ru/
Дата: 26.10.11 16:59
Оценка:
Здравствуйте, Fredwriter.

Мои рецепты предназначены только для WDK версии от 6000 и выше.
Может, поэтому что-то у Вас и не работает.
Но справедливости ради замечу, что DDK 2600 — это тулкит эпохи Windows 2000,
пора уже переходить на более новый инструментарий.
Re: Компиляция драйвера
От: баг  
Дата: 26.10.11 23:40
Оценка:
Здравствуйте, Fredwriter, Вы писали:

F>Здравствуйте, расскажите пожалуйста об утилите Build из пакета DDK

А она точно нужна? Драйвер-то скомпилировать можно и прямо в студии.
Re[6]: Компиляция драйвера
От: Fredwriter  
Дата: 27.10.11 08:05
Оценка:
Здравствуйте, okman, Вы писали:

O>Здравствуйте, Fredwriter.


O>Мои рецепты предназначены только для WDK версии от 6000 и выше.

O>Может, поэтому что-то у Вас и не работает.
O>Но справедливости ради замечу, что DDK 2600 — это тулкит эпохи Windows 2000,
O>пора уже переходить на более новый инструментарий.
Скачать с сайта Microsoft WinDDK 7.1.0.7600, установил, В Пуск -> Все программы его нет и нет ни одного Build Environment. Есть только в папке с WinDDK файл Build.exe? что делать?
Re[8]: Компиляция драйвера
От: Аноним  
Дата: 27.10.11 11:08
Оценка:
Здравствуйте, okman, Вы писали:

O>Это не нормально, должны быть ярлыки в "Windows Driver Kits/WDK 7600.16385.1/Build Environments".

O>Но можно сделать их самому, либо написать bat-файл примерно такого содержания:
O>

O>@echo off
O>C:\Windows\System32\cmd.exe /k C:\WinDDK\bin\setenv.bat C:\WinDDK\ fre x86 WIN7 no_oacr

O>C:\Windows\System32\cmd.exe — путь к программе cmd на вашем компьютере.
O>C:\WinDDK\bin\setenv.bat — найдите этот файл setenv.bat внутри папки с установленным WinDDK.
O>fre (или chk) — тип билда, Free или Checked соответственно.
O>x86 (или x64) — целевая архитектура.
O>WIN7 — целевая операционная система (Windows 7). Да-да, разработка драйверов в Windows
O>подразумевает разные исполняемые файлы для разных версий операционной системы.
O>Другие константы: WXP (Windows XP), WNET (Windows Server 2003) и WLH (Windows Vista).
O>no_oacr — оставьте эту опцию, если не хотите запускать OACR (анализатор кода).
Сделал как вы написали, консолька появилась, затем просмотрел все мои файлы, нашел несколько ошибок, затем попробовал скомпилировать, та же история. Может быть вы мне поможете?
Вот текст с кодом драйвера на Си:
Тут немного, драйвер пробный из книги, там только функция GetMessage. Для неё и писался. Вот скомпилить бы его.
#include <ntddk.h>
#include <MyDriverMessages.h>

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath);

NTSTATUS CreateMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);

NTSTATUS ReadMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);

NTSTATUS WriteMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);

NTSTATUS ShutdownMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);

NTSTATUS CleanupMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);

NTSTATUS IoCtlMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);

VOID MyDriverUnload (IN PDRIVER_OBJECT DeviceObject);

BOOLEAN GetMessage(IN NTSTATUS ErrorCode, IN PVOID IoObject, IN PIRP Irp);

#ifdef ALLOC_PRAGMA 
#pragma alloc_text(PAGE, GetMessage)
#endif

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)

{
         UNICODE_STRING nameString, linkString;
         
         PDEVICE_OBJECT deviceObject;
         
         NTSTATUS status;
         
         GetMessage(MSG_DRIVER_ENTRY, DriverObject, NULL);
         
         RtlInitUnicodeString(&nameString, L"\\Device\\MyDriver");
         
         status = IoCreateDevice(DriverObject, sizeof(65533), &nameString,
                                 0, 0, FALSE, &deviceObject);
         if (!NT_SUCCESS(status))
           return status;
         deviceObject->Flags |= DO_DIRECT_IO;
         deviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
         RtlInitUnicodeString(&linkString, L"\\DosDevices\\MyDriver");
         status = IoCreateSymbolicLink(&linkString, &nameString);
         if (!NT_SUCCESS(status))
         {
           IoDeleteDevice(DriverObject->DeviceObject);
           return status;
         }
         DriverObject->MajorFunction[IRP_MJ_CREATE] = CreateMyDriver;
         DriverObject->MajorFunction[IRP_MJ_READ] = ReadMyDriver;
         DriverObject->MajorFunction[IRP_MJ_WRITE] = WriteMyDriver;
         DriverObject->MajorFunction[IRP_MJ_SHUTDOWN] = ShutdownMyDriver;
         DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = IoCtlMyDriver;
         DriverObject->DriverUnload = MyDriverUnload;
         return STATUS_SUCCESS;
}


NTSTATUS CreateMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);         
{
         GetMessage(MSG_CREATE, (PVOID)DeviceObject, NULL);
         IoCompleteRequest(Irp, IO_NO_INCREMENT);
         
         Return STATUS_SUCCESS;
}


NTSTATUS ReadMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
{
         GetMessage(MSG_READ, DeviceObject, NULL);
         
         return STATUS_SUCCESS;
}
         
         
NTSTATUS WriteMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
{
         GetMessage(MSG_WRITE, DeviceObject, NULL);
         
         return STATUS_SUCCESS;    
};    
 
 
NTSTATUS ShutdownMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
{
         GetMessage(MSG_SHUTDOWN, DeviceObject, NULL);
         IoCompleteRequest(Irp, IO_NO_INCREMENT);
         return STATUS_SUCCESS;
}
                  
     
NTSTATUS IoCtlMyDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
{  
         GetMessage(MSG_IOCTL, DeviceObject, NULL);
         IoCompleteRequest(Irp, IO_NO_INCREMENT);
         return STATUS_SUCCESS;
}      
         
         
VOID MyDriverUnload (IN PDRIVER_OBJECT DriverObject);
{
     UNICODE_STRING linkString;
     GetMessage(MSG_DRIVERUNLLOAD, DriverObject, NULL);
     RtlInitUnicodeString(&linkString, L"\\DosDDevices\\MyDriver");
     IoDeleteSymbolicLink(&linkString);
     IoDeleteDevice(DriverObject->DeviceObject);
}


BOOLEAN GetMessage(IN NTSTATUS ErrorCode, IN PVOID IoObject, IN PIRP Irp);
{ 
        PIO_ERROR_LOG_PACKET Log_Packet;
        PIO_STACK_LOCATION IrpStackLocation;
        PWCHAR pInsertString; 
        STRING AnsiInsertString;
        UNICODE_STRING UniInsertString;
        UCHAR Size_of_Packet;
        Size_of_Packet = sizeof(IO_ERROR_LOG_PACKET);
        Log_Packet = IoAllocateErrorLogEntry(IoObject, Size_of_Packet);
        If (Log_Packet == NULL)
          return FALSE;
        Log_Packet->ErrorCode = ErrorCode;
        Log_Packet->UniqueErrorValue = 0;
        Log_Packet->RetryCount = 0;
        Log_Packet->SequenceNumber = 0;
        Log_Packet->IoControlCode = 0;
        Log_Packet->DumpDataSize = 0;
        if (Irp != NULL)
        {
                IrpStack = IoGetCurrentIrpStackLocation(Irp);
                Log_Packet->MajorFunctionCode = IrpStack->MajorFunction;
                Log_Packet->FinalStatus = Irp->IoStatus.Status;
        }
        else
        {
            Log_Packet->MajorFunctionCode = 0;
            Log_Packet->FinalStatus = 0;
        } 
        IoWriteErrorLogEntry(Log_Packet);
        return TRUE;
}
Re[8]: Компиляция драйвера
От: Fredwriter  
Дата: 27.10.11 11:10
Оценка:
Аноним это я
Re[10]: Компиляция драйвера
От: Fredwriter  
Дата: 27.10.11 11:31
Оценка:
Здравствуйте, okman, Вы писали:

O>Здравствуйте, Fredwriter.


F>>Тут немного, драйвер пробный из книги, там только функция GetMessage.


O>Скажи-ка, а эта "книга" — случайно не "программирование драйверов для Windows" некой В.Комиссаровой ?

O>Если так, то можешь смело выбрасывать ее на помойку.
O>Это худшее (и вредное), что я читал по разработке драйверов.
Что вы мне посоветуете русского по разработке драйверов?
Re[10]: Компиляция драйвера
От: Fredwriter  
Дата: 27.10.11 11:32
Оценка:
Здравствуйте, okman, Вы писали:

O>Здравствуйте, Fredwriter.


F>>Тут немного, драйвер пробный из книги, там только функция GetMessage.


O>Скажи-ка, а эта "книга" — случайно не "программирование драйверов для Windows" некой В.Комиссаровой ?

O>Если так, то можешь смело выбрасывать ее на помойку.
O>Это худшее (и вредное), что я читал по разработке драйверов.
Вы угадали это действительно В.Комиссарова
Re[12]: Компиляция драйвера
От: Fredwriter  
Дата: 27.10.11 11:41
Оценка:
Здравствуйте, okman, Вы писали:

O>Здравствуйте, Fredwriter, Вы писали:


F>>Что вы мне посоветуете русского по разработке драйверов?


O>IMHO лучшая книга данной отрасли — "Программирование с использованием Windows Driver Model" (Уолтер Они).

O>Есть на русском языке. Очень толковая книга из серии подподушечной (в смысле, должна лежать под подушкой).
O>Еще можно (для разнообразия) почитать книгу Солдатова, хотя там почти ничего нет про обработку IRP (!).
O>Из полезных — "Windows 200 Device Driver Book, A Guide For Programmers" и туториалы CmdTutRu.
O>Все это легко найти в Гугле.
O>Много полезных материалов есть на MSDN и WHDC, а также на OsrOnline (там надо будет зарегистрироваться).

O>Теперь о компиляции.

O>Когда что-то не идет, нужно смотреть файлы .wrn и .err в папке проекта.
O>У меня написало "Cannot open include file: MyDriverMessages.h".
Файл MyDriverMessages.h это файл, созданный утилитой mc из файла MyDriverMessages.mc. Вот текст файла MeDriverMessages.mc:
[g]
MessageID = 1
Severity = Informational
SymbolicName = MSG_DRIVER_ENTRY
Language = English
Driver Entry
.
MessageID = 2
Severity = Informational
SymbolicName = MSG_CREATE
Language = English
Create
.
MessageID = 3
Severity = Informational
SymbolicName = MSG_READ
Language = English
Read
.
MessageID = 4
Severity = Informational
SymbolicName = MSG_WRITE
Language = English
Write
.
MessageID = 5
Severity = Informational
SymbolicName = MSG_SHUTDOWN
Language = English
Shutdown
.
MessageID = 6
Severity = Informational
SymbolicName = MSG_IOCTL
Language = English
IoCtl
.
MessageID = 7
Severity = Informational
SymbolicName = MSG_DRIVERUNLOAD
Language = English
Unload
.
[/g]
Re[12]: Компиляция драйвера
От: Fredwriter  
Дата: 27.10.11 11:43
Оценка:
А за литературу спасибо большое.
Re[12]: Компиляция драйвера
От: Fredwriter  
Дата: 27.10.11 13:46
Оценка:
Здравствуйте, okman,
Компилятор Си выдаёт ошибку assignment from incompatible pointer type в этой строчке и ниже до 57 строчки в функции DriverEntry:

DriverObject->MajorFunction[IRP_MJ_CREATE] = CreateMyDriver;

Подскажите пожалуйста, что это значит? Некоторые другие ошибки я уже исправил.
Re[12]: Компиляция драйвера
От: Fredwriter  
Дата: 27.10.11 15:07
Оценка:
Здравствуйте, okman,
расскажите мне пожалуйста о структуре PDRIVER_OBJECT, непонятная какая-то ошибка в строках:

         DriverObject->MajorFunction[IRP_MJ_CREATE] = CreateMyDriver;
         DriverObject->MajorFunction[IRP_MJ_READ] = ReadMyDriver;
         DriverObject->MajorFunction[IRP_MJ_WRITE] = WriteMyDriver;
         DriverObject->MajorFunction[IRP_MJ_SHUTDOWN] = ShutdownMyDriver;
         DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = IoCtlMyDriver;
         DriverObject->DriverUnload = MyDriverUnload;

assignment from incompatible pointer type, я уже о ней спрашивал. Вроде не должно быть здесь такой ошибки
Re[13]: Компиляция драйвера
От: okman Беларусь https://searchinform.ru/
Дата: 27.10.11 16:32
Оценка:
Здравствуйте, Fredwriter.

К сожалению, не могу отвечать на все Ваши сообщения (после определенной черты это даже вредно).
Ответы на многие, если не все, вопросы есть в документации WDK, а также в синтаксисе языка C,
который, видимо, у Вас где-то нарушается. Если трудности возникают на стадии компиляции программы,
написанной на C, то лучше отложить драйверную разработку и освежить знания в этой области.
А вот с интересными и нетривиальными проблемами милости прошу.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.