Aline
Гость
|
|
« : 13-12-2007 07:41 » |
|
Привет всем! Есть драйвер, надо написать библиотеку функций для работы с драйвером в VS C#. Я новичок в VS, поэтому даже не знаю за что браться. Есть примеры на Билдере, но описания, сделанные в Билдере в VS не проходят. Например, как это: #define FILE_DEVICE_UNKNOWN 0x00000022 #define METHOD_BUFFERED 0 #define FILE_ANY_ACCESS 0
#define CTL_CODE( DeviceType, Function, Method, Access ) ( \ ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) )
#define IOCTL_CHECK_DRV CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS) // RsRel48 #define IOCTL_READ_RSREL CTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS) // TrRel48 #define IOCTL_WRITE_TRREL CTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_READ_TRREL CTL_CODE(FILE_DEVICE_UNKNOWN, 0x802, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_SETRES_TRREL CTL_CODE(FILE_DEVICE_UNKNOWN, 0x803, METHOD_BUFFERED, FILE_ANY_ACCESS) // ITP #define IOCTL_ITP_WRITE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS) // GEN #define IOCTL_GEN_WRITE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS) #define IOCTL_GEN_BULBS CTL_CODE(FILE_DEVICE_UNKNOWN, 0x803, METHOD_BUFFERED, FILE_ANY_ACCESS) // IP #define IOCTL_IP_WRITE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS)
описать в VS, с чего начать? А потом же нужны будут ещё функции... Буду признательна за пример работы с драйвером
|
|
« Последнее редактирование: 13-12-2007 07:44 от Алексей1153++ »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #1 : 13-12-2007 07:45 » |
|
это же просто дефайны - один к одному можно вставить (именно этот кусок кода)
чувствую - вопрос не правильно задан )
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #2 : 13-12-2007 07:56 » |
|
Точно Алексей1153++, правильно поставленный вопрос - половина ответа...
|
|
|
Записан
|
while (8==8)
|
|
|
Aline
Гость
|
|
« Ответ #3 : 13-12-2007 08:00 » |
|
Просто этот кусок я не могу вставить. Если вы попробуете создать новый проект в Visual C# Class Library и вставить туда просто этот кусок кода (дефайны), вы поймете о чем речь
Возможно это надо делать как-то вообще иначе, но я думала создать библиотеку dll, которую потом и подключить к своему проекту...
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #4 : 13-12-2007 09:13 » |
|
Aline, кусок кода выше это только описание управляющих кодов, которые передаются в функцию DeviceIoControl. Советую начать с ее изучения.
|
|
|
Записан
|
while (8==8)
|
|
|
Aline
Гость
|
|
« Ответ #5 : 13-12-2007 10:20 » |
|
Я прекрасно понимаю, что это только описание. Но даже реализация этого описания в VS отличается от реализации описания в Билдере. DeviceIOControl я уже изучала, на примере Билдера. Там это делается всё гораздо проще...
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #6 : 14-12-2007 01:55 » |
|
Ну тогда, если в С# нет #define, я ничем помочь не смогу. Портирование кода возможно при наличии знания обоих языков, а я C# не знаю. Все равно не могу понять, почему в Builder проще? Потому что есть примеры? Если в С# нет макросов то эта проблема походит на ту же проблему в Delphi. Вот как я выходил из положения давным давно, когда писал в Delphi ... // ================================================================= // () Kernel Mode Driver. Константы для генерирования // кодов IOCTL (распознавание номеров функций) // ================================================================= const // Формат бит управляющего кода (32 bit) // 00 - 01 Метод // 02 - 13 Функция // 14 - 15 Права доступа для работы IOCTL // 0 - ANY 1 - R 2 - W 3 - R/W // 16 - 31 Тип устройства
// идентификатор типа устройства (16 bit). // 0x0000 - 0x7FFF - зарезервировано Microsoft FILE_DEVICE_SKMD = $08000;
// идентификатор функции устройства (12 bit). // 0x0000 - 0x07FF - зарезервировано Microsoft SKMD_IO_BASE = $0800;
// ================================================================= // () Kernel Mode Driver. Номера функций // ================================================================= type SKMD_IO_FUNCTION = record case byte of 0:( A: array [0..2] of byte); 1:( Numb: byte; fRead: boolean; fWrite: boolean;) end; const //номер функции получения версии SKMD_IO_VERSION_INFO: SKMD_IO_FUNCTION = (A:(0, 1, 0));
//номер функции получения дескриптора сегмента по селектору SKMD_IO_SEGMENT: SKMD_IO_FUNCTION = (A:(2, 1, 0));
//номер функции получения дескриптора шлюза SKMD_IO_INTERRUPT: SKMD_IO_FUNCTION = (A:(3, 1, 0));
//номер функции преобразования линейного // адреса в физический SKMD_IO_PHYSICAL: SKMD_IO_FUNCTION = (A:(4, 1, 0));
//номер функции получения регистров SKMD_IO_CPU_INFO: SKMD_IO_FUNCTION = (A:(5, 1, 0));
//номер функции получения массива каталога страниц (Page directory entry array) SKMD_IO_PDE_ARRAY: SKMD_IO_FUNCTION = (A:(6, 1, 0));
//номер функции получения записи страницы по линейному адресу SKMD_IO_PAGE_ENTRY: SKMD_IO_FUNCTION = (A:(7, 1, 0));
//номер функции чтения блока памяти SKMD_IO_MEMORY_DATA: SKMD_IO_FUNCTION = (A:(8, 1, 0));
//номер функции чтения блока памяти //возвращает false в случае если хотя бы один байт в блоке недоступен SKMD_IO_MEMORY_BLOCK: SKMD_IO_FUNCTION = (A:(9, 1, 0));
//номер функции чтения информации объекта по его хэндлу SKMD_IO_HANDLE_INFO: SKMD_IO_FUNCTION = (A:(10, 1, 0));
//номер функции получения PTE SKMD_IO_PTE_ENTRY: SKMD_IO_FUNCTION = (A:(98, 1, 0));
// Установить запись в PTE SKMD_IO_PTE_ENTRY_SET: SKMD_IO_FUNCTION = (A:(97, 1, 0));
|
|
|
Записан
|
while (8==8)
|
|
|
nikedeforest
|
|
« Ответ #7 : 16-12-2007 17:57 » |
|
Дефайны в .НЕТ есть, но они используются только для условно компиляции. Т.е. дефайн можно только юзать примрно так // preprocessor_define.cs // compile with: /define:xx // or uncomment the next line // #define xx
#define xx; using System; public class Test { public static void Main() { #if (xx) Console.WriteLine("xx defined"); #else Console.WriteLine("xx not defined"); #endif } }
|
|
|
Записан
|
ещё один вопрос ...
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #8 : 09-04-2008 13:02 » |
|
Есть драйвер, надо написать библиотеку функций для работы с драйвером в VS C#. Я новичок в VS, поэтому даже не знаю за что браться.
Что значит для работы с драйвером ? Через что ? Есть примеры на Билдере, но описания, сделанные в Билдере в VS не проходят.
Что за примери ? Что они делают ? Експортируют набор каких то функций из системних dll ? Если да, тогда тебе в сторону Platform Invoke. Смотри атрибут [DllImport] //Например код функции на unmanaged коде extern "C" __declspec(dllexport) __cdecl int sum(int a,int b);
//В C# выглядеть будет вот так [DllImport("TestDll.dll", EntryPoint="sum", ExactSpelling=false,CallingConvention=CallingConvention.Cdecl)] static extern int sum(int a,int b);
//Далее в C# коде юзаеш так int totalSum = sum(10, 15);
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #9 : 09-04-2008 14:19 » |
|
О! МОРОЗ нашёлся. Здорово! Сколько лет! Тема я думаю уже того... Так же как и автор. На самом деле всё было гораздо проще, в гугле спросить "C# DeviceIoControl" и была бы куча счастья. например: http://blogs.msdn.com/jeffrey_wall/archive/2004/09/13/229137.aspx
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
MOPO3
Ай да дэдушка! Вах...
Команда клуба
Offline
Пол:
Холадна аднака!
|
|
« Ответ #10 : 09-04-2008 14:45 » |
|
О! МОРОЗ нашёлся. Здорово! Сколько лет!
Здорово! И тебе не хворать! На самом деле всё было гораздо проще, в гугле спросить "C# DeviceIoControl" и была бы куча счастья. Гуглить почему то всегда ленится большинство
|
|
|
Записан
|
MCP, MCAD, MCTS:Win, MCTS:Web
|
|
|
|