|
Извини Kernel рядом не нашел, но нашел WinDriver. Давай посмотрим что там есть :-)
Если выдрать кое-что из контекста получаем
......
#define WD_Open WD_OpenLocal
......
#elif defined(WIN32)
#define WD_OpenLocal()\
CreateFile(\
TEXT("\\\\.\\WINDRVR"),\
GENERIC_READ,\
FILE_SHARE_READ | FILE_SHARE_WRITE,\
NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL)
static DWORD WD_FUNCTI
.........
Обратил внимание куда смотрит CreateFile ???
Ето и есть их стандартный драйвер (в Kernele по-моему такой же) который и делает всю черную работу. :-)
Ето в ответ на вопрос что же возвращает WD_OPEN.
Второй вопрос: ...WriteFile....
Немного теории :-)
Как ты знаешь (ну или догадываешься :-)) в результате вызова WriteFile и ReadFile драйверу посылается IRP-ы, соответственно IRP_MJ_WRITE и IRP_MJ_READ. Чтобы ты смог юзать WriteFile надо чтобы драйвер их обрабатывал, типа так
pDriverObject->MajorFunction[IRP_MJ_WRITE] = Usb_Write;
pDriverObject->MajorFunction[IRP_MJ_READ] = Usb_Read;
где Usb_Write и Usb_Read функции твои, которые и будут обрабатывать запрос.
А теперь суть - посмотри обрабатывает ли твой драйвер пакет IRP_MJ_WRITE и если нет - добавь что надо (подробнее см DDK 2k)
Прототипы такие:
NTSTATUS
Usb_Write(
IN PDEVICE_OBJECT pDeviceObject,
IN PIRP Irp
)
есть гемор с передачей буффера размером большим чем размер USB пакета - то есть прийдется разбивать на несколько. Ето так - предупреждение.
З.Ы.
А вообще ты знаешь разница между Windriver и Kernel по-моему небольшая. Они обе всего лишь навсего предоставляют интерфейс для работы со своим драйвером который судя по всему сделан так, что может работать со всем и подходить ко всему (ты наверно заметил когда проекты создавал)
З.З.Ы.
Пасибо за ссылки, обязательно посмотрю...
З.З.Ы. To HELL
Так конторка наша при институте... денег немного... вылезаем за счет себя же :-) Мда... мне бы в Intel махнуть - хочешь пироженого... хочешь мороженного ... хочешь импульсный стабилизатор с кофемолкой и GSM трансивером. :-)) Да кто меня туда возьмет. А тут слишком много не купишь.
|