Доброе время суток!!!! Вопрос: У меня есть Виртуальный диск... возможно ли как то отображать в нём дерево фолдеров которое находится на сервере... допустим я через какую то там прогу узнаю что сейчас находится в даной деректории.... как можно отобразить это в Виртуальном диске... тоесть что б при просмотре свойств файла отображался ихний реальный розмер как на сервере ????? и вобще как можно осуществить общение драйвера KMDF с Application ???? Общение будет осуществлятся через службу ???? или как... если можно кинте ссылочку где об этом возможно почитать....
прога загоняет данные в драйвер через DeviceIOControl, ReadFile, WriteFile. В kernel mode это всё превращается в IRP. В DDK море примеров.
s0larian я знаю что KMDF это просто framework для kernel mode. Смотри, а что б связыватся с драйвером ненадо там создавать какую либо службу.... Если можешь вкратце набросать как происходит обращение к драйверу(вернее описание CreateFile(), что допустим делает DeviceIOControl) Зарание благодарен!!!
Flenger, в user mode вызываешь CreateFile(твоё_имя): http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx а потом DeviceIoControl(handle): http://msdn.microsoft.com/en-us/library/aa363216.aspx В ядре, можешь напрямую прописать обработчики: Код (Text): DispatchTable[IRP_MJ_CREATE] = MyDispatch; DispatchTable[IRP_MJ_CLEANUP] = MyDispatch; DispatchTable[IRP_MJ_CLOSE] = MyDispatch; DispatchTable[IRP_MJ_DEVICE_CONTROL] = MyDeviceIoControl; и потом вызвать IoCreateDevice() и IoCreateSymbolicLink(): http://msdn.microsoft.com/en-us/library/aa490468.aspx http://msdn.microsoft.com/en-us/library/aa490622.aspx Примеров, как я уже упоминал, полно в DDK. Ты что, разбираться ленишься?
s0larian сенкс. Всё то что ты написал я тоже уже знаю...... потому как розбиратся я неленюсь.... кста, IoCreateSymbolicLink() какраз необизателен...... просто так типа удобнее....
s0larian у меня возник вопрос: второй параметр функцыи DeviceIoControl (dwIocontrolCode - это значение, котоpое указывает опеpацию, котоpую должен выполнить VxD. Вы должны каким-то обpазом достать список допустимых значений dwIoControlCode для данного VxD, пpежде, чем вы узнаете, какую опеpацию вам нужно совеpшить) каким образом мне достать этот список операцый ????
Я так понял второй параметр это грубо говоря имя моей функцыи.... потом при обработке IOCTL запроса в драйвере я смогу отфильтровать по имени мою функцыю и принять какие либо действия...... Я правильно понял или нет ????
Flenger, DeviceIOControl() это, грубо говоря, call gate. То есть програмеру все запросы надо прогнать через него. Поэтому OS тебе даёт первый уровень абстракции - "функция". User mode посылает, например, IOCTL_ENABLE, IOCTL_DISABLE, IOCTL_SET_SOMETHING, IOCTL_GET_SOMETHING. А драйвер их обслуживает. То есть, это спецификация интерфейса.
s0larian сенкс!!! Подскажите если знаете как мне на С# реализовать свой(типа как в примерах DeviceIoControl(hDevice, IOCTL_TEST_SMTH, - тоесть надо реализовать свой IOCTL_TEST_SMTH) ControleCode. я думаю мне надо походу что то типа #define IOCTL_TEST_SMTH CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 300, METHOD_NEITHER, FILE_ANY_ACCESS) // READ_USN_JOURNAL_DATA, USN если нет то поправте..... + неподскажете почему в Висте неработает Dbgview(у меня последняя версия, мой драйвер выдаёт макрос KdPrint но ничего невидно....) я МСДН читал что он(KdPrint) типа в Висте как то нетак работает или вобще ничего невыдаёт уже непомню, или выдаёт но при определённых настройках.... подскажите плизз, а то в ХР всё работает.... + ах да ещё есть ли аналог KmdManager.exe а то он на Висте походу неработает валидно
Как на C# не знаю. Точно работает вот что - пишешь на C/C++, линкуешь в DLL и вызываешь из C#. В Vista вызывай DbgPrintEx() и будет видно.
Столкнулся с такой проблемой..... компилю пример с WDK\src\kmdf\toaster\func\simple в XP SP2. раньше он у меня запускался через KmdManager а сейчас регестрируется, но нестартует, пишет "неудаётся найти указаный файл"...... что это может быть ????? и почему когда я хоткл скомпилить пример с папки на Рабочем столе писало ошибки, что то типа немогло подключить каких то там хидеров WDF..... скопировал исходники на диск с:\ (там у меня и WDK находится) - всё скомпилилось валидно..... Плиз подскажите как называется аналог проги типа KmdManager..... желательно что б под Вистой тоже работала.....
up!!!! ну что никто с моими проблемами несталкивался.... я аналог KmdManager уже нашёл - OSR Load Driver
Flenger Код (Text): [DllImport("kernel32.dll")] public static extern bool DeviceIoControl(IntPtr hDevice, uint dwIoControlCode, IntPtr lpInBuffer, uint nInBufferSize, out IntPtr lpOutBuffer, uint nOutBufferSize, out IntPtr lpBytesReturned, IntPtr lpOverlapped);
Вопрос как мне организовать в драйвере приём IOCTL запроса ??? тоесть у мя есть Код (Text): WDF_IO_QUEUE_CONFIG_INIT_DEFAULT_QUEUE(&queueConfig, WdfIoQueueDispatchSequential); queueConfig.EvtIoDeviceControl = DriverEvtIoDeviceControl; потом в функцыи DriverEvtIoDeviceControl я switch буду обрабатывать запрос.... Код (Text): switch(IoControlCode) { case IOCTL_MY_TESTH: мне непонятно как именно обрабатывать сам запрос... допустим мне нужно с User Mode передать строчку..... что должно быть в обработчике IOCTL_MY_TESTH. мне нужно как то извлечь(буфер ввода.вывода).... они походу извлекаются методами семейства Wdf RequestRetrieve ???? Если можна киньте плиз примерчик.......
Кароче траблу я решил........... запрос посылается нормально, даже фильтруется на выборке Код (Text): switch (IoControlCode) { case IOCTL_WDFDIO_OUTPUT: KdPrint(("1111111ToasterEvtIoDeviceControl called\n")); break; default: KdPrint(("ToasterEvtIoDeviceControl called\n")); status = STATUS_INVALID_DEVICE_REQUEST; } вопрос такой: немогу скомпилить по Vista_x64 and Windows Server 2008..... вот что вываливает в логе Код (Text): errors in directory c:\develope\test - copy\func\simple c:\winddk\6001.18001\bin\makefile.new(7040) : error U1087: cannot have : and :: dependents for same target errors in directory c:\develope\test - copy\func\simple nmake.exe /nologo BUILDMSG=Stop. -i BUILD_PASS=PASS1 NOLINK=1 MAKEDIR_RELATIVE_TO_BASEDIR= failed - rc = 2 c:\winddk\6001.18001\bin\makefile.new(7040) : error U1087: cannot have : and :: dependents for same target errors in directory c:\develope\test - copy\func\simple nmake.exe /nologo BUILDMSG=Stop. -i BUILD_PASS=PASS2 LINKONLY=1 NOPASS0=1 MAKEDIR_RELATIVE_TO_BASEDIR= failed - rc = 2 в чём может быть проблема и ещё киньте мне плиз пример .inx файла для x_64 (лучше если это Vista_x64 and Windows Server 2008).... зарание благодарен!!
а что это за makefile.new? Тебе надо иметь файл sources и потом запустить build из под Vista/64 environment.
я с траблом роздуплился...... там оказывается просто файла dirs нехватало..... и в sources поправил INCLUDES = $(INCLUDES);..\inc;..\shared плиз розкажите про то как драйвер будет слать запрос приложению........(я про это буду искать в книге, но всё же лучше будет ваш ответ)