Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Клуб профессиональных программистов :: Выпуск #88


Клуб профессиональных программистов "Весельчак У"
Информационная рассылка сайта и форума.  Выпуск No88 (2010-01-25).

Здравствуйте, уважаемые читатели!

Политика безопасности предприятия может требовать ограничений по использованию USB-устройств. Копание в Интернете и чтение различных форумов привело к такому сборнику советов.


Глобально.


Запретить все USB-устройства. «Управление компьютером→диспетчер устройств→контроллеры универсальной последовательной шины USB→(корневые USB концентраторы)→применение устройства»: «отключено». Например, если принтер подключен к какому-либо концентратору, то его можно не отключать.


Примечание 1.

Диспетчер устройств можно запустить из командной строки:


start devmgmt.msc


Примечание 2.

Интересное свойство диспетчера устройств из консоли выполнить две команды:


set devmgr_show_nonpresent_devices=1
start devmgmt.msc

Тогда в «Диспетчере устройств» отобразятся скрытые устройства.


Быстрый и простой способ.


Остановка службы «Съемные ЗУ». Если не требуется USB — отключение контролеров USB. Запретить использование всем, кроме избранных через «Управление компьютером→Запоминающие устройства→СъемныеЗУ→Свойства→Безопасность».


...

Целиком статью вы можете прочесть на нашем сайте в разделе «Администрирование ОС::Windows». В ней рассматриваются также следующие способы:


  • USB-устройство еще ни разу не подключалось к компьютеру;
  • Запрет записи на USB-устройство;
  • Групповые политики.
  • Программирование :: Общий
  •   Я хочу написать собственную биллинговую систему для Linux шлюза. Поскольку на C++ я не пишу, а пишу на FreeBasic... Есть ли у кого нить из вас модуль который бы перехватывал заголовки IP пакетов и транслировал бы клиенту на TCP порт или локльный сокет.
      Примерно в таком формате: "Куда, откуда, размер пакета"
      То что будет накодено выложу в сеть под лицензией GNU.

    Жду советов и консультаций.
  • Программирование :: Общий :: Алгоритмы и математические задачи.
  • Задача о заявках (расширенная)
    Удовлетворит все заявки в наименьшее количество аудиторий.
    Алгоритм написан, реализован
    Состоит в том, что заявки сортируются не как при обычном Greedy Activity Selector по окончании, а по количеству совместных с ними (по возрастающей)

    Проблема в доказательстве
    Нужно доказать правильность работы алгоритма Обосновать. Прошу помощи. Сама уже не справляюсь  :insane:
    Надо будет код, вставлю
  • Программирование :: Технологии разработки программных систем
  • В ходе решения предыдущей проблемы пришёл к тому, что надо реализовывать визард. До этого всегда приходилось делать визарды только в винформах и, как правило, всё решал доволько тупо - но не буду углубляться...
    Сейчас хочу сделать по-умному (н-да...) и вот сделал такую диаграмму для определения логики работы мастера:

    (http://savepic.ru/205269.jpg)

    класс Order это вроде как и есть визард.
    предполагается, что Caller умеет на основании ReqParameters спросить у юзера всё, что надо и это "что надо" передать назад визарду при выполнении CompleteStep (в принципе и при CancelStep тоже, потому как часть параметров юзер может заполнить, а потом захотеть вернуться на предыдущий шаг "просто посмотреть").
    в основном интересовало как разорвать поток выполнения внутри визарда и как хранить (когда сохранять и когда читать) данные в xml. Поэтому сосредоточился на этих моментах (их вроде удалось понятно отразить на схеме или нет?), но сам workflow здесь уже как-то некуда воткнуть.
    Т.е. предполагаю, что визард будет ветвлистым и свой путь будет хранить в связном списке, к примеру. следовательно, перед шагом switch to next step на основании имеющихся в xml данных будет как-то приниматься решение о том, какой Step-класс создавать и ставить следующим в списке. Также, где-то должна быть логика того, как, при возвращении назад и изменении ранее выставленных параметров, будут изменяться последующие ранее совершённые шаги (некоторые шаги могут уничтожиться, в некоторых могут сброситься параметры.
    И вот куда эту дополнительную логику включать, что-то не пойму. Может, стоило использовать диаграмму кооперации?

    И вообще, в рамках задачи - схема получилась г..но или пойдёт?
    Спасибо!
  • Добрый день

    У меня возникло желание отойти от agile методик и попробовать облегченный uml на небольшом (2-3 человека, 1-3 мес, 5-10 час\нед) тестовом проекте

    Подскажите:
    Какими uml тулзами вы пользовались (сколько времени, какие остались впечатления)?

    Что есть из бесплатного ПО с поддержкой реверс и форвард инженеринга uml class diagram?

  • Программирование :: С/С++
  • Доброго всем времени суток!
    Хотелось поговорить с вами по поводу производительности методов на C++:
    1) советы по повышению производительности из личного опыта;
    2) наиболее продуктивные операции над переменными, и
        возможные ошибки провоцирующие понижение эффективности;
    3) наиболее эффективные способы использования функций (или классов),
        от которых зависит вся производительность приложения (на C++);
    4) ну и т. д. и т. п.
    если кто что-нибудь знает как "выжать" максимальную скорость и эффективность, отзовитесь!  :)
    спасибо всем за участие!
  • Получил задание: сделать (простую) программу, которая может работать на машинах 32/64-bit с ОС Windows XP/Vista/7 (да и просто - такое знать полезно, а мне - и интересно). Ничего подобного раньше не встречал. Подскажите пожалуйста, что для этого надо знать? Может есть какие-то книги по этому делу? Или ссылки? Буду очень благодарен всему!  :)

    P.S. Заинтересовала тема http://forum.shelek.ru/index.php/topic,5267.0.html... Но то для Delphi... Больше ничего на этом форуме не нашел.
  • Привет! Как програмно создавать массивы, например, по событию, чтоб они были необходимого мне, на момент срабатывания события, объема?
  • Сабж. Как можно сделать?
    По заданию нужно использовать регулярные выражения. Нашел хороший код на http://msdn.microsoft.com/ru-ru/library/a9z6549f.aspx. Но там используется String^. А у меня все строки, грубо говоря, в char*. Код
    Код:
    char * cstr = 0; // Ноль для наглядности
    ...
    String^ str;
    str = cstr;
    не пляшет. На http://msdn.microsoft.com/en-us/library/system.string.aspx прочитал, что это (String) строка символов Юникода. wchar_t* тоже не подходит.
    Помогите, пожалуйста.
  • Программирование :: С/С++ :: ANSI С/С++
  • Не знает ли  кто-нибудь, толковой документации по STL, где было бы чётко написано какие методы должен содержать класс, который мы используем для шаблона.

    Например, у нас есть структура, я хочу запихнуть её в список.
    Код:
    enum Gender {male, female};
    struct Member {string name, Gender gender, int age};

    list <Member> members;

    При компиляции происходят ошибки. Как я понял, потому что в Member должны наличествовать некоторые операторы, в частности *, <, ==...

    Вот и хочется узнать, что нужно конкретно для каждого из контейнеров STL.
  • Программирование :: С/С++ :: WinAPI & Visual C++
  • Привет!

    Мы постоянно сталкиваемся с ошибками в программах. Иногда их сравнительно легко найти, а иногда бьешься, как рыба об лед, и ни фига... Бывает, что ошибка (как у меня: хендл устройства ввода звука уже удален, а в триде к нему продолжают поступать обращения. И ведь работает программа! В библиотеке WINMM.dll, видать, свой хандлер имеется, вот она и ликвидирует exeption'ы.) выявляется через годы...

    Хотелось бы спросить: как грамотно отлавливать ошибки в программе? Имею ввиду те, что порождают предложение послать фирму Микрософт...

    Поясню. Моя программа довольно громоздкая. Она использует десятки DLL'ок. Во всех потенциально опасных местах ставить __try/__except/__finally?

    Как вообще кошерно обрабатывать исключения? Некоторые из них не опасны, можно просто проигнорировать загрузку данных из "левого" адреса и продолжать работу. А иногда следует программу закрыть, но с обязательным завершением критических тридов. (Иначе при повторном запуске получим сообщение, что программа, типа, уже работает и все, каюк. Только перезагрузка системы...)

    Давайте поговорим об этом!

    Спасибо!

    P.S. Поискал по форуму на тему exeption'ов, но ничего не нашел. (Может плохо искал? Тогда, пожалуйста, направьте.)
  • Задача стоит такая,требуется подключить Vpn соединение и контролировать его состояние.
    Народ, подскажите, пожалуйста, функции Win Api.
  • Программирование :: С/С++ :: Borland C/C++
  • Доброго времени суток! Хочу задать вот какие вопросы:

    1) Как в компоненте TRichEdit отключить звуковой сигнал, когда в пустом текстовом поле с помощью стрелок на клаве определяются, я так понимаю, границы заполненного или пустого поля??

    2) Можно-ли как-нибудь отключить возможность удаления загруженного текста в TRichEdit'e с помощью клавиши BackSpace, тобишь проше говоря - как отключить клавишу BackSpace только для компонента TRichEdit??
  • Программирование :: Delphi
  • Как можно с помощью Delphi из pdf файла удалить страницы?
  • Программирование :: VisualBasic :: Visual Basic for Applications
  • Уважаемые форумчане!

    Мы исследуем реакцию растений в зависимости от определенных климатических параметров. В прошлом месяце мы получили данные из Гидрометеоцентра с сети метеостанций (температура воздуха, осадки, и т.п.). Для обработки этих данных мы используем специальную программу для расчета средних, максимумов, минимумов, корреляций, трендов и т.п.

    Проблема в том, что программа работает только со средними дневными значениями (например, 01.01.1991 -12С), но часть данных (с новых метеостанций) представлена в т.н. "часовом формате", т.е. для каждого дня у меня есть 24 измерения с интервалом в 1 час. Перед обработкой мне нужно все данные привести в один среднедневной формат, т.е. рассчитать среднедневные значения на основе часовых.

    Решением данной проблемы, по-моему мнению, может быть макрос. Честно говоря, до вчерашнего дня я даже и не подозревал о их существовании, но через некоторое время у меня получился такой макрос:

    Sub Average()
    '
    ' Average Макрос
    ' Макрос записан 23.01.2010
    '
    ' Сочетание клавиш: Ctrl+q
    '
    Range("D23").Select
    ActiveCell.FormulaR1C1 = "Average"
    Range("D24").Select
    ActiveCell.FormulaR1C1 = "=AVERAGE(R[-23]C[-1]:RC[-1])"
    Range("D23 : D24").Select
    Selection.Copy
    ActiveWindow.SmallScroll Down:=24
    Range("D47").Select
    ActiveSheet.Paste
    ActiveWindow.SmallScroll Down:=30
    Range("D71").Select
    ActiveSheet.Paste
    ActiveWindow.SmallScroll Down:=18
    Range("D95").Select
    ActiveSheet.Paste
    End Sub

    Вопрос в том, как "зациклить" макрос, т.е. сдвигать расчет среднеарифметической постоянно на 24 шага вниз до конца массива данных и не делать это вручную?
    К сожалению, четкого объяснения для "чайников" я не нашел, а существующие примеры мне не подходят...Надеюсь на Ваш совет!

    С уважением,
    Сергей
  • В таблице екселя, значения первых ячеек колонок должны стать в Label формы, но количество колонок всегда разное...
  • ub olg()
        Dim i As Long: Application.ScreenUpdating = False
    On Error GoTo ErrorHandler
        For i = 1 To Cells(Rows.Count, 6).End(xlUp).Row
                              
                           ' ячейка: путь к файлу        ячейка: название файла    нужная ячейка в файле
    h1 = ExecuteExcel4Macro("'" & Range("a1").Text & "[" & Cells(i, 6) & "]57'!" & Range("j36").Address(, , xlR1C1))
    k1 = k1 + h1
    ActiveWorkbook.Worksheets("57").Range("B1").Value = k1 'ячейка в моем экселе

                           ' ячейка: путь к файлу        ячейка: название файла    нужная ячейка в файле
    h2 = ExecuteExcel4Macro("'" & Range("a1").Text & "[" & Cells(i, 6) & "]57'!" & Range("j37").Address(, , xlR1C1))
    k2 = k2 + h2
    ActiveWorkbook.Worksheets("57").Range("B2").Value = k2 'ячейка в моем экселе

                           ' ячейка: путь к файлу        ячейка: название файла    нужная ячейка в файле
    h3 = ExecuteExcel4Macro("'" & Range("a1").Text & "[" & Cells(i, 6) & "]57'!" & Range("j38").Address(, , xlR1C1))
    k3 = k3 + h3
    ActiveWorkbook.Worksheets("57").Range("B3").Value = k3 'ячейка в моем экселе

        Next
    ErrorHandler:
    End Sub


    Подскажите, пожалуйста, как можно упростить код, потому что таких файлов у меня много.
  • Всем привет! Помогите разобраться с проблемкой. Есть папка с файлами (названия разные и регулярно меняющиеся), но расположение папки и её наименование постоянно. Макрос находится в отдельном файле, в другой папке. Как прописать последовательное открытие файлов для их обработки? Или, как вариант (не такой удобный, но все же приемлемый) - как макросом перенести список названий файлов из папки на страницу основного файла?
  • Программирование :: Программирование 1С :: 1С 7.x
  • Добрый день.
    Помогите пожалуйста, как можно зафиксировать область просмотра,  например, у справочника контрагентов, чтобы при просмотре  других колонок наименование ( или еще код) контрагента было неподвижным на экране.

    Заранее благодарен.
  • Программирование :: Программирование 1С :: 1С 8.x
  • Помогите пожалуйста с Конфигурацие "Управление торговлей", редакция 10.3 (10.3.1.17)!
    Возникла проблемма с "СуммаПрописью"! Пишется в счетах цифрамы...

    // Вывести Сумму прописью
       ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописью");
       СуммаКПрописи = Сумма + ?(Шапка.СуммаВключаетНДС, 0, СуммаНДС);
       ОбластьМакета.Параметры.ИтоговаяСтрока ="Всего наименований " + НумераторСтрок
       + ", на сумму " + ОбщегоНазначения.ФорматСумм(СуммаКПрописи, Шапка.ВалютаДокумента);
       ОбластьМакета.Параметры.СуммаПрописью = ОбщегоНазначения.СформироватьСуммуПрописью(СуммаКПрописи, Шапка.ВалютаДокумента);
       ТабДокумент.Вывести(ОбластьМакета);

    В макете все правильно <СуммаПрописью> - параметр!!!

    Вот только я еще думаю - это, по-моему, возникло после редактирования макета документа, я там удалил строку "ИтогоНП", потом вставил. Зависит ли <СуммаПрописью> от "ИтогоНП" и от чего вообще зависит???

    С уважением к программистам,
    ArbeR
  • Программирование :: Авторское ПО
  • Цитата: Предыстория
    Один мой знакомый попросил написать маленькую программку, которая бы размещалась на флешке и при открытии ее, копировала некоторые файлы на эту флешку. За один субботний вечер была написана эта программка.
    На все мои вопросы, "зачем тебе это надо" и "помогла ли тебе, в твоих шпионских делах, программа" он упорно молчит. :)

    Программа предназначена для скрытого копирования файлов и поддержания их в синхронизированном состоянии с оригиналом. Запуск программы обеспечивается "autorun.inf" файлом размешенном в корневой директории сменного накопителя или подключаемого жесткого диска. Таким образом, если в системе отключена функция "AutoRun" ([HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]"NoDriveTypeAutoRun"=dword:000000ff), запуск программы не будет выполняться.

    Код: ("Возможности")
    #
    Файл конфигурации должен находиться в одной директории с программой и
    # иметь название 'duplicate.lst'. Хорошей идеей использовать в качестве
    # файла конфигурации этот файл, продолжив его списком копируемых файлов и
    # сканируемых директорий. Все строки в файле 'duplicate.lst' начинающиеся
    # с символа '#' являются комментариями и игнорируются при разборе файла
    # конфигурации.
    #
    # Список параметров передаваемых через командную строку:
    # --enable-log         - записывать информацию о ходе своей работы.
    #                        Log-файл создается в одной директории с
    #                        программой под именем 'duplicate.log'.
    # --disable-explorer   - не запускать 'explorer'. В основном используется
    #                        для отладки приложения через отладчик.
    #
    # Список поддерживаемых модификаторов:
    # c= - копировать
    # C= - копировать рекурсивно
    # l= - отправить в log список файлов
    # L= - отправить в log рекурсивный список файлов
    # d= - отправить в log список дисков установленных в системе
    # если модификатора нет то подразумевается 'c='.
    #
    # Так же в конце имени файла можно использовать два символа подстановки:
    # * - соответствует любой строке символов а так же пустой строке
    # ? - соответствует любому одиночному символу
    #
    # Примеры:
    # d:\dir\*.doc         - копировать все документы Word
    # d:\dir2\file?.tx?    - копировать файлы по шаблону (например 'file2.txt', 'file_.tx9')
    # d:\dir\file.txt      - копировать файл 'file.txt'
    # c=d:\dir\file.txt    - копировать файл 'file.txt'
    # C=c:\dir             - копировать рекурсивно каталог 'dir'
    # C=c:\dir\            - копировать рекурсивно каталог 'dir'
    # l=c:\катал1          - отправить в log содержимое каталога 'катал1'
    # l=c:\катал1\         - отправить в log содержимое каталога 'катал1'
    # L=c:\катал1          - отправить в log содержимое каталога 'катал1' и его подкаталогов
    # d=                   - отправить в log список дисков установленных в системе
    #

    Программа может быть полезна в качестве примера рекурсивного обхода каталога и его подкаталогов, а так же в способе определения достоверности копии файла на основе временных меток.
  • Операционные системы :: Windows
  • Windows XP SP3 профессионал, лицензионная с последними обновлениями.
    Однажды заметил, что в окне "Выключить компьютер" пропали буквы "Выключить компьютер", остались только пустые квадратики вместо букв.
    Как восстановить эту надпись в окне?
    Знатоки, помогите, пожалуйста.
    Все остальное работает, на вирус проверен.
  • Столкнулась с проблемой, отнявшей у меня два дня.
    Имеется сеть из 12 компов. Часть с Windows XP, часть с Vista, часть с семеркой (английской и русской). В один прекрасный понедельник Vista потерял Инет. Просто отказался выходить в Сеть и все тут. Локальную сеть он видит, шлюз пингует, а на остальное не реагирует.
    Пока я с ним возилась, пришло время идти домой. А дома обнаружилось, что мой собственный ноут этот самый Инет тоже видеть отказался (это уже семерка).
    В общем, два дня мучений результатом имели вот что:
    0. Никакие видимые глазу настройки нигде не сбились. Всякие там прокси и надстройки в ИЕ я проверила первым делом.
    1. CureIt от Dr.Web ничего не нашла.
    2. Virus Removal Tool от Касперского тоже ничего не нашел.
    3. Malicious Software Removal от MS и WinsockfixXP тоже.
    4. Пробы установить IP и DNS вручную или автоматом результатов не принесли.
    5. Отключение и вновь подключение соединения реакции компов не вызвали.
    6. Проверка файла WINDOWS\system32\drivers\etc\hosts показала, что в нем все красиво и прилично, как и должно быть.
    7. Команда netsh int ip reset тоже не помогла.
    8. На Vista имелись точки восстановления. Откатила на 5 дней. Потом на 7. Потом на 2 недели. Запускаю IE или Mozilla - Инет есть. Через 5 минут - уже нет. Короче, тоже не прокатило.

    В общем, совсем я собралась паниковать и переустанавливать ОСы, но последний шанс сработал. Умные люди подсказали команду netsh winsock reset. Наверное, я ее в жизни не забуду, т.к. именно она-то и вернула в Инет мою семерку. :)
    Vista опробую завтра.

    С чем был связан сбой, я так и не поняла...
  • Операционные системы :: Unix и другие :: BSD
  • На FreeBSD 7.1 используется ppp для поддержки соединения с провайдером через PPPoE.

    Суть в том, что на 100 Мбит/с сетке без ограничений по скорости предельная скорость колеблется лишь около 1,5 Мб/с при теоретическом потолке около 10-12 Мб/с. top показывает, что в процессе передачи данных со скоростью 1,5 Мб/с idle системы 0%, остальное всё уходит на system, interrupt (в основном и примерно поровну того и другого) и user (мало); время CPU целиком уходит на ppp.

    Машина старая и хилая (PII, 266 МГц), RAM много.

    Вопрос: кто занимался подобными вещами и знает, какие опции ppp можно отключать/включить, чтобы повысить производительность? (Экономией трафика можно пренебречь.)
  • Операционные системы :: Embedded systems
  • Здравствуйте уважаемые!
    Хочу спросить, может кто собирал и ставил U-boot для каких-либо архитертур?
    Если есть такие, то теперь более конкретно.
    Есть одноплатный компьютер Colibri PXA320 (806 MHz), архитертура ARM. Кому интресно то вот:
    http://www.toradex.com/En/Products/Colibri_XScale_Computer_Modules_Overview_PXA255_PXA270_PXA270M_PXA300_PXA310_PXA320_ARM.
    Для загрузки ОС Линукс очень рекомендуют в роли загрузчика использовать U-boot.
    Что я и сделал, но сетевая подсистема убута никак не хочет работать. А она нужна хотя бы для загрузки по TFTP.
    Для работы с сетью на плате есть ethernet контроллер ax88796BLF компании ASIX.
    Общался с разработчиками (компания Toradex), писал в майллисты разработчиков убута, все говорят, что поддержка этих плат (PXA320) в загрузчике реализована! Но у меня никак это не работает.

    В конфигурационном файле загрузчика есть такое определение
    #define AX88796B_BASE   0x08000000.
    Думаю что дело именно в этом адресе, т.к. обращение к регистрам сетевого контроллера основывается именно на этом базовом адресе + смещение.
    Вот очень бы хотелось знать откуда берется этот адрес? Это в даташите написано?

    Спасибо!
  • Направления программирования :: Drivers
  • Привет всем, я новичок в этой области, и вот у меня возникли такие вопросы:
    Я должен симулировать виртуальный HDD типа TrueCrypt : вот фрагмент из кода

    Код:
    #include <ntddk.h>

    NTSTATUS DriverEntry  (IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING UniRegistryPath);
    NTSTATUS VDskAddDevice(IN PDRIVER_OBJECT DriverObject,IN PDEVICE_OBJECT PhysicalDeviceObject);
    VOID     VDskUnload   (IN PDRIVER_OBJECT DriverObject);

    NTSTATUS VDskCreateCreate  (IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp);
    NTSTATUS VDskCreateClose  (IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp);
    NTSTATUS VDskReadWrite  (IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp);
    NTSTATUS VDskDispatchPnp  (IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp);
    NTSTATUS VDskDispatchPower  (IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp);
    NTSTATUS VDskIOCtl  (IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp);
    NTSTATUS VDskDispatchSystemControl  (IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp);

    NTSTATUS CreateMainDeviceObject (PDRIVER_OBJECT DriverObject);

    const WCHAR NT_DEVICE_NAME   [] = L"\\Device\\VDevice";
    const WCHAR DOS_DEVICE_NAME[] = L"\\DosDevices\\VDeviceLink";

    PDRIVER_OBJECT gDriverObject;

    NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING UniRegistryPath)
    {
    NTSTATUS  Status = STATUS_SUCCESS;

    DbgPrint("Driver is loaded\nDriverEntry\n");

    DriverObject->MajorFunction[IRP_MJ_CREATE] = VDskCreateCreate;
    DriverObject->MajorFunction[IRP_MJ_CLOSE  ] = VDskCreateClose;
    DriverObject->MajorFunction[IRP_MJ_READ    ] = VDskReadWrite;
    DriverObject->MajorFunction[IRP_MJ_WRITE  ] = VDskReadWrite;
    DriverObject->MajorFunction[IRP_MJ_PNP ] = VDskDispatchPnp;
    DriverObject->MajorFunction[IRP_MJ_POWER ] = VDskDispatchPower;
    DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = VDskIOCtl;
    DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = VDskDispatchSystemControl;

    DriverObject->DriverExtension->AddDevice = VDskAddDevice;
    DriverObject->DriverUnload = VDskUnload;

    return CreateMainDeviceObject(DriverObject);
    }


    NTSTATUS VDskAddDevice(IN PDRIVER_OBJECT DriverObject,IN PDEVICE_OBJECT PhysicalDeviceObject)
    {
    NTSTATUS   Status = STATUS_SUCCESS;
    UNICODE_STRING uniNtNameString, uniWin32NameString;

    DbgPrint("VDskAddDevice\n");

    RtlInitUnicodeString(&uniNtNameString, NT_DEVICE_NAME );

    Status = IoCreateDevice (
    DriverObject,
    0,
    &uniNtNameString,
    FILE_DEVICE_UNKNOWN,
    0,
    FALSE,
    &PhysicalDeviceObject
    );
    if( !NT_SUCCESS(Status) ){
    DbgPrint("Can't create device\n");
    return Status;
    }

    RtlInitUnicodeString(&uniWin32NameString, DOS_DEVICE_NAME);
    Status = IoCreateSymbolicLink(&uniWin32NameString, &uniNtNameString);
    if (!NT_SUCCESS(Status))
    {
    DbgPrint("Can't create symbol link\n");
    IoDeleteDevice( DriverObject->DeviceObject );
    }

    DbgPrint("Device created success\n");
    return Status;
    }

    NTSTATUS CreateMainDeviceObject (PDRIVER_OBJECT DriverObject)
    {
    UNICODE_STRING Win32NameString, ntUnicodeString;

    PDEVICE_OBJECT DeviceObject;
    NTSTATUS ntStatus;

    RtlInitUnicodeString (&ntUnicodeString, NT_DEVICE_NAME);
    RtlInitUnicodeString (&Win32NameString, DOS_DEVICE_NAME);

    ntStatus = IoCreateDevice (
    DriverObject,
    0,
    &ntUnicodeString,
    FILE_DEVICE_UNKNOWN,
    0,
    FALSE,
    &DeviceObject);

    if (!NT_SUCCESS (ntStatus))
    {

    return ntStatus;/* Failed to create DeviceObject */
    }

    ntStatus = IoCreateSymbolicLink (&Win32NameString, &ntUnicodeString);

    if (!NT_SUCCESS (ntStatus))
    {
    IoDeleteDevice (DeviceObject);
    return ntStatus;
    }

    IoRegisterShutdownNotification (DeviceObject);

    return STATUS_SUCCESS;
    }

    VOID VDskUnload(IN PDRIVER_OBJECT DriverObject)
    {
                PDEVICE_OBJECT pDeviceObject;
    UNICODE_STRING uniWin32NameString;

    DbgPrint("VDskUnload\n");

    pDeviceObject = pDriverObject->DeviceObject;

    RtlInitUnicodeString( &uniWin32NameString, DOS_DEVICE_NAME );
    IoDeleteDevice( pDriverObject->DeviceObject );

    DbgPrint("Unload is success\n");
    }
    Драйвер динамически не выгружается.
    Заранее благодарен.
  • Начал изучать тему драйверов, хочу написать фильтр для файловой системы, чтобы при открытии файла 123.txt для примера выходило окно доступ запрещен.
    За основу взял пример из WDK (7600.16385.0)  scanner, в нем изменил функцию, и при запуске вылетает в бсод,
    Код:
    FLT_PREOP_CALLBACK_STATUS
    ScannerPreCreate (
        __inout PFLT_CALLBACK_DATA Data,
        __in PCFLT_RELATED_OBJECTS FltObjects,
        __deref_out_opt PVOID *CompletionContext
        )
    {
        PFLT_FILE_NAME_INFORMATION nameInfo;
        NTSTATUS status;
        BOOLEAN scanFile;
        const UNICODE_STRING *filename;
        UNREFERENCED_PARAMETER( FltObjects );
        UNREFERENCED_PARAMETER( CompletionContext );

        PAGED_CODE();

       
        status = FltGetFileNameInformation( Data,
                                            FLT_FILE_NAME_NORMALIZED |FLT_FILE_NAME_QUERY_DEFAULT,
                                            &nameInfo );
        FltParseFileNameInformation( nameInfo );
       
        if (!NT_SUCCESS( status )) {

            return FLT_PREOP_SUCCESS_WITH_CALLBACK;
        }

        FltParseFileNameInformation( nameInfo ); // если эту стр. за комментировать то в nameInfo->Name будет мусор, с ней вылетает в бсод
        filename = (L"123.txt\0");
        DbgPrint("FileCreate %wS \n",nameInfo->Name);
        DbgPrint("Our file %wS \n",filename);
        scanFile = RtlCompareUnicodeString(&nameInfo->Name,&filename,TRUE);
       
        if(scanFile)
        {
            DbgPrint("FileCreate STATUS_ACCESS_DENIED\n");
            Data->IoStatus.Status=STATUS_ACCESS_DENIED;
        }

        if (IoThreadToProcess( Data->Thread ) == ScannerData.UserProcess) {

            DbgPrint( "!!! scanner.sys -- allowing create for trusted process \n" );

            return FLT_PREOP_SUCCESS_NO_CALLBACK;
        }

        return FLT_PREOP_SUCCESS_WITH_CALLBACK;
    }
    Подскажите, где проблема?
  • У кого есть исходники к этой книге??  

    В теме "Литература о драйверах" http://forum.shelek.ru/index.php/topic,14645.0.html  даны неправильные ссылки на примеры. =(   Там только сервис-паки, которые устанавливаются поверх оригинальных исходников из книги...  

    Если у кого-нибудь есть, скиньте пожалуйста на onio.by@gmail.com или дайте ссылку скачать ...  :shuffle:
  • Всем здравствуйте!

    Товарищи, сам я в драйверах новичок и только начал заниматься, оттого хочу посоветоваться со знающими.
    Пишу простой контент-фильтр, перехват решил производить через NDIS IM.

    Вопрос:
    На вход в драйвер льется трафик, судьбу содержимого каждого пакета решает юзермодное приложение.
    Как лучше организовать их (драйвера и приложения) сотрудничество?
    Стоит ли делать ожидание в драйвере, или следует отдать пакет приложению, не передавая его дальше по цепочке, а завершить его, но приложение само при необходимости "даст ему ход"? Чувствутю, второй вариант гораздо лучше.
    Может какие еще есть варианты, более корректные?


    Заранее очень благодарен!
  • Направления программирования :: Web :: Клиентские скрипты
  • возникла такая необходимость: яваскриптом изменить маргин у всех элементов с определённым классом.
    в яваскрипте, к сожалению, нет штатной функции getElementByClass().
    задача решилась так:
    Код:
    function getElementsByClass(searchClass,node,tag) {
    var classElements = new Array();
    if ( node == null )
    node = document;
    if ( tag == null )
    tag = '*';
    var els = node.getElementsByTagName(tag);
    var elsLen = els.length;

    var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
    for (i = 0, j = 0; i < elsLen; i++) {
    if ( pattern.test(els[i].className) ) {
    classElements[j] = els[i];
    j++;
    }
    }
    return classElements;
    }

    пример использования:
    Код:
     var obj = getElementsByClass('menu_2',null,'div');
    for(i=0;i<obj.length;i++){
    obj[i].style.marginLeft = pdstr;
    }
  • Практические разделы :: Железо
  • Переучиваю данный ноут с висты на XP professional (SP3), всё по привычной схеме нашлось, кроме звуковой карты, а её вообще в списке неизвестных нет. )) Как всегда HP отличился, то ли дело асеры устанавливать...
    Осмотрел очень много сайтов, включая и HP-родной сайт (на последнем - только мусор, ничего полезного)
    Кое-где встречались предложения установить патчи - но один из них в SP3 уже встроен, а другой результата не дал.

    Кто знает, как найди девайс (а сам драйвер есть, только винда не знает, куда его воткнуть - ведь устройства не видно)
  • Практические разделы :: Программы
  • Подскажите,можно ли восстановить файлы после очистки корзины? И если да, то как?
  • Практические разделы :: Безопасность PC
  • Всем привет. В университете дали семестровку, преподаватель сказал только несколько слов: capicom, javascript, клиент, сервер.
    На компе поднял IIS.
    Скачал библиотеку capicom по следующей ссылке http://www.microsoft.com/downloads/details.aspx?FamilyID=860EE43A-A843-462F-ABB5-FF88EA5896F6&displayLang=ru.
    Нашел программу makecert.exe для создания сертивикатов.

    Помогите связать все это вместе... :-/
  • Учимся программировать :: Начинающим
  • Задача:

    Цитировать
    Дана последовательность целых чисел. Путем удаления некоторых элементов (не переставляя элементы), получить неубывающую последовательность максимальной длины.

    Какие будут идеи?

    Автор рекомендует студентам включить эврику для решения. Предлагаются языки Дельфи, ОбъектПаскаль и просто Паскаль, не по наслышке знакома только с последним, но думаю, может и не нужны будут всякие объектно-ориентированные прибамбасы?
  • Необходимо реализовать функцию запуска и параллельного выполнения нескольких программ. Задаётся количество выполняемых программ и набор их имён (пути к исполняемым образам). Исходный процесс завершается сразу после их порождения.
    Написать тестовую программу для проверки работоспособности разработанной функции.

    вот что получилось:
    main.cpp
    Код: (cpp)
    #include <iostream>
    #include <vector>
    #include <unistd.h>
    #include <string>
    #include <process.h>

    using namespace std;

    int main(int argc, char *argv[])
    {

        cout << "Vvedite kollichestvo programm:"<<endl;
        unsigned n;
        cin>>n;
        std::vector <string> v;
        v.resize(n);
        if(n<=0) return 0;
        cout << "Vvedite imena programm:"<<endl;
        for (int i =0; i<n; ++i)
        {
            cin>>v[i];
        }

    f(n,v);
    cout<<"end"<<endl;
        return EXIT_SUCCESS;
    }

    proc.h

    Код: (cpp)
    #ifndef PROCESS_H
    #define PROCESS_H
    #include<unistd.h>
    #include<iostream>
    #include <vector>
    #include<string>
    class Process
    {
    public:
        Process();
        ~Process() {}
        operator bool() const;
        pid_t id() const;
        bool run(std::string a);
        
    protected:
        int action(std::string a);
    private:
        Process(pid_t id);
    private:
        pid_t pid;
    };
    inline Process::operator bool() const
    {
        return pid != 0;
    }
    inline pid_t Process::id() const
    {
        return pid;
    }
    void f(int n, std::vector <std::string> v);
    #endif

    proc.cpp

    Код: (cpp)
    #include "process.h"
    #include <cstdlib>
    #include <string>
    #include <vector>
    #include <signal.h>
    #include <sys/wait.h>
    using namespace std;

    Process::Process()
            : pid(0)
    {
    }
    Process::Process(pid_t id)
            : pid(id)
    {
    }
    bool Process::run(std::string a)
    {
        if ( pid )
            return false;
        pid = fork();
        switch ( pid )
        {
        case -1:
            pid = 0;
            return false;
        case 0:
            pid = getpid();
            exit(action(a));
        }
        return true;
    }

    int Process::action(string a)
    {
    system(a.c_str());
    return 0;
    }

    void f(int n, vector <string> v)
    {
    vector <Process> p(n);
    for(int i=0; i<n;++i)
    {
    p[i].run(v[i]);
    }
    return;
    }

    Всё работает
    Но значительную часть этого  взял из методички - вроде понимаю что здесь происходит - но препод придирается
    Не могли бы рассписать - что здесь к чему?
    Особенно интересуют это :
    Код: (cpp)
    class Process
    {
    public:
        Process();
        ~Process() {}
        operator bool() const;
        pid_t id() const;
        bool run(std::string a);
        
    protected:
        int action(std::string a);
    private:
        Process(pid_t id);
    private:
        pid_t pid;
    };
    inline Process::operator bool() const
    {
        return pid != 0;
    }
    inline pid_t Process::id() const
    {
        return pid;
    }
    void f(int n, std::vector <std::string> v);
    #endif
    и
    Код: (cpp)
    Process::Process()
            : pid(0)
    {
    }
    Process::Process(pid_t id)
            : pid(id)
    {
    }
    ..................
    void f(int n, vector <string> v)
    {
    vector <Process> p(n);
    for(int i=0; i<n;++i)
    {
    p[i].run(v[i]);
    }
  • Клубное :: English forum
  • There exist such things both in Russian and in English. Try to say this as quickly as you can:

    If one doctor doctors another doctor, does the doctor
    who doctors the doctor doctor the doctor the way the
    doctor he is doctoring doctors? Or does he doctor
    the doctor the way the doctor who doctors doctors?

А теперь прощаемся с Вами до следующего выпуска.


С уважением, команда Клуба.


В избранное