Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];

Вниз

Работа с портом с конкретным адресом. Запись и чтение   Найти похожие ветки 

 
Velimir ©   (2006-04-24 14:18) [0]

Собсно сабж!
Какими в дельфи есть встроенные функции для работы с портом, если у меня есть адрес этого порта...
Хотелось бы найти аналог outport и inport из С.

Сорри если вопрос очень тупой, но я нигде не нашел этих функций... Действительно, как-то тормозом себя чуствую...
Заранее всем спасибо за помощь!


 
MBo ©   (2006-04-24 14:27) [1]

>аналог outport и inport из С
В NT-системах это не работает и в C - прямой доступ к портам запрещен.
Есть специальные драйвера - giveio, WinIO, UserPort и т.д.


 
Velimir ©   (2006-04-25 08:24) [2]

Огромное спасибо за помощь! А то я уже думал, что у меня крыша поехала =)


 
Anatoly Podgoretsky ©   (2006-04-25 09:11) [3]

Velimir ©   (24.04.06 14:18)  
Аналог простой
asm
 IN AL, port
 OUT port, AL

Только ведь дело не в этом, точно также outport и inport не работоспособны даже на Win 3.1 кроме некоторых случаев.


 
isasa ©   (2006-04-26 10:43) [4]

А чем CreateFile обидел?


 
!Fobos ©   (2006-04-28 10:39) [5]

Человеки, у меня та же трабла: нада организовать раюоту с ISA шиной. Мож подскажете, как мона сделать? Заранее благодарю!


 
Сергей М. ©   (2006-04-28 11:18) [6]


> раюоту с ISA шиной


Что есть "работа с ISA шиной" ?


 
!Fobos ©   (2006-04-28 13:07) [7]

Есть плата, которая вешается на ISA шину компа. Надо считывать с нее данные.


 
Сергей М. ©   (2006-04-28 13:31) [8]


> !Fobos ©   (28.04.06 13:07) [7]


> плата, которая вешается на ISA шину компа


Нет никакой разницы, куда она, эта плата, "вешается".

С т.з. процессора и программы существуют порты ввода-вывода (в т.ч. отображенные на пространство адресуемой памяти).


 
Чапаев ©   (2006-04-28 14:48) [9]


> в т.ч. отображенные на пространство адресуемой памяти

Пример можно? Звучит знакомо, а где применяется, не припомню...


 
Сергей М. ©   (2006-04-28 14:58) [10]


> Пример можно?


Можно.

К примеру, эквивалентом

out $XX, $YY

при этом будет

mov [someaddr], $yy


 
Чапаев ©   (2006-04-28 15:12) [11]

Нет, это мне понятно. :-)

Мне хотелось бы узнать о конкретном устройстве, порты которого отображены в память.


> где применяется, не припомню


 
!Fobos ©   (2006-05-02 09:18) [12]


> Сергей М. ©   (28.04.06 13:31) [8]


А можно узнать, как в Делфи считывать данные с порта? Если можно, примерчик....вроде как для того используется CreateFile или я ошибаюсь...


 
Сергей М. ©   (2006-05-02 11:44) [13]


> Чапаев ©   (28.04.06 15:12) [11]


В kernel-mode-драйверах, например, видеокарт.


 
!Fobos ©   (2006-05-03 08:33) [14]


> Сергей М. ©   (28.04.06 13:31) [8]

Если конкретнее, то есть плата, на которой имеется кэш-память объемом 32 Кб. Адрес известен: $300. Нужно считывать с нее данные в массив. Есть прога на Паскале, но там это более-менее понятно организовано. Прога работает под Win95. Перевожу прогу на Делфи и столкнулся с такой вот проблемой. Понятно, что под XP проектировать её не стоит, т.к. шина Isa, под которую собрана плата, в современных компах отсутствует.


 
isasa ©   (2006-05-03 10:49) [15]

Насколько помню, CreateFile работает с именем, а не с адресом.

CreateFile("\\.\<зарегистрированное в системе имя девайса>", ...)


 
!Fobos ©   (2006-05-03 14:12) [16]


> isasa ©   (03.05.06 10:49) [15]

А по моей проблеме ты ничего не знаешь?

Здесь есть кто-нить, кто может мне помочь? Неужели никто такими вещами не занимался??? (помогите бедному лузеру %))


 
isasa ©   (2006-05-03 14:33) [17]

!Fobos ©   (03.05.06 14:12) [16]

У тебя что, секретный девайс, у которого нет имени в системе? :)


 
isasa ©   (2006-05-03 14:36) [18]

:)
В противном случае надо опускаться до уровня зарегистрированных служб(драйверов).


 
!Fobos ©   (2006-05-04 08:13) [19]


> У тебя что, секретный девайс, у которого нет имени в системе?
>  :)


Хм..., ну доберусь до компа с этим девайсом посмотрю как он там называется (раньше об этом не задумывался).
Интересно, а как обзывается девайс в системе, если он собран своими руками?


 
Сергей М. ©   (2006-05-04 08:41) [20]


> !Fobos ©   (04.05.06 08:13) [19]


> как обзывается девайс в системе, если он собран своими руками?


Если дивайс "собран своими руками", то первое что должно прийти в голову - написание драйвера этого дивайса под требуемую ОС. Драйвер этот должен быть полноценным драйвером, отвечающим всем требованиям WDM.

См. NT DDK.


 
!Fobos ©   (2006-05-04 12:51) [21]


> Сергей М. ©   (04.05.06 08:41) [20]


> isasa ©   (03.05.06 14:36) [18]


Ребят, я не большой спец в этих делах и может чего-нить не понимаю, но мне кажется, что прога, которая работает с этой платой, и есть драйвер для нее. По-моему мы уходим от темы. Я просто пытаюсь выяснить, как в Делфи обращаться к портам I/O.


 
Сергей М. ©   (2006-05-04 13:08) [22]


> прога, которая работает с этой платой, и есть драйвер для
> нее


Может и "драйвер". Но не с т.з. Windows.


> как в Делфи обращаться к портам I/O


С портами должен работать kernel-mode-драйвер, в дан. случае тобой разработанный.


 
Elen ©   (2006-05-04 13:15) [23]


>!Fobos ©

Поищи компоненты работы с портом. А вообще помоему CreateFile и вариант с ассемблером (см. выше) лучше не придумаеш для Делфи


 
Сергей М. ©   (2006-05-04 13:18) [24]


> вариант с ассемблером (см. выше)


Где там, "выше", про ассемблер ?


 
Elen ©   (2006-05-04 13:19) [25]


>!Fobos ©

Поищи компоненты работы с портом. А вообще помоему CreateFile и вариант с ассемблером (см. выше) лучше не придумаеш для Делфи


 
krid24 ©   (2006-05-04 13:26) [26]


> Если дивайс "собран своими руками", то первое что должно
> прийти в голову - написание драйвера этого дивайса под требуемую
> ОС

Для ISA платы это не обязательно.


>  как в Делфи обращаться к портам I/O.

Это от системы зависит, а не от языка. А вообще, во втором посте уже ответили - ищешь в инете драйвер giveio.sys (например), из проги его динамически загружаешь, обращаешься к портам асмовыми in и out, потом драйвер выгружаешь. Все. Ну это для NT, а в Win9x можешь напрямую in/out юзать.


 
Сергей М. ©   (2006-05-04 13:32) [27]


> krid24 ©   (04.05.06 13:26) [26]


> Для ISA платы это не обязательно.


Глупости.
Столь же "необязателен" драйвер для любого другого периферийного дивайса на любой другой шине.


> из проги его динамически загружаешь, обращаешься к портам
> асмовыми in и out


А потом запускаешь еще косой десяток оных "прог", и все они наперегонки начинают выполнять свои IN и OUT к одному и тому же порту. Бардак-с) ..


 
krid24 ©   (2006-05-04 15:14) [28]


> Глупости.
> Столь же "необязателен" драйвер для любого другого периферийного
> дивайса на любой другой шине.

Ничего подобного. Не надо все мешать в одну кучу. Речь идет о конкретных платах. Я сам работал не с одной ISA платой, которые не требовали никаких драйверов и управлялись только через порты. И есть девайсы, которые в обязательном порядке требуют драйверов, садятся на прерывания, etc.


> А потом запускаешь еще косой десяток оных "прог", и все
> они наперегонки начинают выполнять свои IN и OUT к одному
> и тому же порту. Бардак-с) ..

Ну по этой логике тот же DOS вообще бы не работал :) На самом деле никакого бардака не будет. Во-первых, несколько инструкций IN одновременно не выполнишь ). Во-вторых, во многих платах предусмотрены задержки после выполнения операций, связанных с доступом к ним по портам. В-третьих, такие же задержки предусматривают и в программах (в тех же драйверах). Так, что возможный бардак зависит не от возможности обращаться к портам, а от кривых рук разработчиков )
Ну а тот же драйвер giveio может спокойно обслуживать все процессы в системе, будь их десяток или сотня.


 
Wal ©   (2006-05-04 15:30) [29]


> Ну по этой логике тот же DOS вообще бы не работал
Дос был однозадачным в доску, в отличие от виндовса.

> Так, что возможный бардак зависит не от возможности обращаться
> к портам, а от кривых рук разработчиков
Вот поэтому разработчики с прямыми руками всегда предоставляют драйвера.

> Я сам работал не с одной ISA платой
Я тоже работал не с одной платой, и не только ISA. В ДОСе без всяких драйверов. В винде тоже можно без драйверов с тем же giveio, но это "костыли", а не нормальная работа.


 
Сергей М. ©   (2006-05-04 15:30) [30]


> krid24 ©   (04.05.06 15:14) [28]


Ты несешь несусветицу, видимую тобой лишь с твоей колокольни.


 
krid24 ©   (2006-05-04 20:51) [31]

Да с какой моей колокольни-то?
Если есть ISA плата, которая (упрощенно) в один порт принимает параметры сигнала, в другой код старта и начинает непрерывно этот сигнал генерить до тех пор, пока не получит код останова, то на кой ей драйвер-то нужен? Писать для какого-нибудь простейшего генератора сигналов WDM?? Ну-ну.. Нужно тогда уж еще и в Microsoft драйвер оттестировать и цифровую подпись получить..
А ведь большое колличество самопальных ISA плат, сделаных для внутреннего пользования, являются чем-то подобным. И именно их я и имел ввиду (а не сплошь и рядом все девайсы подряд, о чем, кстати, говорил).
Так что, не соглашусь с уважаемыми оппонентами -  никаких драйверов для такого рода плат не нужно по-определению. В них просто нет необходимости.
Впрочем, автор вопроса не сказал, что у него за плата, так что спор по сути дела безпредметный получается.


 
!Fobos ©   (2006-05-05 08:04) [32]


> krid24 ©   (04.05.06 20:51) [31]

Согласен с тобой. Для "моего" устройства не было написано драйвера (еще раз повторюсь, что не я изначально разрабатывал плату и софт). Есть только программа, обслуживающая плату.
А что тебя конкретно интересует по плате? Это устройство сбора данных. Как уже писал выше, чтение производится из кэш-памяти по адресу $300.


 
Сергей М. ©   (2006-05-05 08:22) [33]


> krid24 ©   (04.05.06 20:51) [31]


Ну а причем здесь ISA ?
Все тоже самое настолько же справедливо для любого другого дивайса на любой другой шине ..

И WinAPI здесь тоже ни причем, пока речь не идет о взаимодействии с драйвером дивайса документированным способом (CreateFile, Read/WriteFile, DeviceIOControl).


 
!Fobos ©   (2006-05-06 08:22) [34]

Мда...думаю, что здесь мне никто ничем конкретным не поможет...((
Процедурку чтения из порта (а также процедурку записи управляющего слова) я написал  на ассемблере, научил винду ХР-шную не ругаться на асм-вставки (не смейтесь надо мной:))). Вроде что-то читается, но почему то кажется, что читается не то, что нужно. Может ли кто объяснить, как, вызывая чтение из кэш-памяти в массив 32000 раз можно забить весь массив значениями, а точнее откуда она (кэш-память ну или что там за это отвечает) знает, что при каждом следующем обращении к ней мне надо считать следующий байт?
Вы уж извините, если я задаю глупые вопросы....программер из меня не ахти...


 
Сергей М. ©   (2006-05-06 09:06) [35]


> !Fobos ©   (06.05.06 08:22) [34]


Приводи код.


 
!Fobos ©   (2006-05-06 14:48) [36]


> Сергей М. ©   (06.05.06 09:06) [35]


Вот две процедурки работы с портом:

procedure DataIn(PortAddress:word);

var
 ByteValue:byte;

begin
  asm
   push dx
   mov dx, PortAddress
  end;
  for i:=0 to 32767 do
     begin
       asm
       in al,dx
       mov ByteValue,al
       end;
       Data[i]:=ByteValue;
     end;
  asm
   pop dx
  end;
end;

procedure DataOut(ByteValue:byte;PortAddress:word);

asm
 push dx
 mov dx,PortAddress
 mov al,ByteValue
 out dx,al
 pop dx

end;

Запуская программу в пошаговом режиме и следя за массивом Data я заметил, что вне зависимости от того, к какому порту я обращаюсь, этот массив забивается практически одними и теми же значениями...
Плюс еще в первоначальной проге используются 2 порта с адресами $20 и $21. Что за порты, ума не приложу, возможно они испоьзуются для обработки прерываний...


 
Сергей М. ©   (2006-05-06 15:53) [37]

procedure DataIn(PortAddress:word);
var
ByteValue:byte;
Addr: Word;
begin
 Addr := PortAddress; //параметр PortAddress передается через eax, запомним его в лок.переменной
 for i:=0 to 32767 do
    begin
      asm
       push eax
       push edx        
       mov dx, Addr
       in al,dx
       mov ByteValue,al
       pop edx
       pop eax
      end;
      Data[i]:=ByteValue;
    end;
end;

procedure DataOut(ByteValue:byte;PortAddress:word);
asm
//ByteValue передается в eax
//PortAddress - в edx
out dx,al
end;


> массив забивается практически одними и теми же значениями


А где написано, что должен разными ?
Док-ция на дивайс от производителя имеется ?


 
krid24 ©   (2006-05-06 18:14) [38]


> Ну а причем здесь ISA ?

Да вобщем-то ни причем, просто !Fobos говорил про плату на ISA шине.


> Плюс еще в первоначальной проге используются 2 порта с адресами
> $20 и $21. Что за порты, ума не приложу, возможно они испоьзуются
> для обработки прерываний...

В принципе да, эти порты используются при программировании контроллера прерываний.


 
isasa ©   (2006-05-07 11:46) [39]

Умные дадьки и тетки карячились, думали, как заставить это железо одновременно читать порт, слушать музыку, ограть в Blitzkriag ... а ты со своими командами :)
В, общем, выхода два:
1. Послать дядек и теток, загрузить Win98 и ниже, и наслаждаться.
2. "Вписать" работу с железом в требования дядек и теток(т.е. на уровне драйверов), и работать через CreateFile.


 
!Fobos ©   (2006-05-10 08:17) [40]


> Сергей М. ©   (06.05.06 15:53) [37]


Документации на девайс нету, разве что дипломная работа.
Массив, как мне кажется, забивается разными значениями, т.к., синусоиду, к примеру, прога рисует нормально(то есть она синусоида, а не прямая линия).
На данный момент проблема именно в считывании сигнала с порта(кэш-памяти), остальное все уже практически переписал для Делфи. Сейчас програма что-то считывает, но это явно не тот уже хотя бы потому, чьл какой бы я номер порта не ставил, картинка выглядит одинаково. На паскалевском варианте программы написана процедура обработки прерывания. Как перевести её на Делфи я пока понятия не имею, но мне кажется что проблема сейчас именно в этом.


 
Сергей М. ©   (2006-05-10 08:43) [41]


> !Fobos ©   (10.05.06 08:17) [40]


> На паскалевском варианте программы написана процедура обработки
> прерывания. Как перевести её на Делфи я пока понятия не
> имею, но мне кажется что проблема сейчас именно в этом.


Если дивайс генерирует прерывания, то без драйвера режима ядра тем более не обойтись. И Делфи здесь не помощник - среда эта не предназначена для таких задач.


 
!Fobos ©   (2006-05-10 08:45) [42]


> Сергей М. ©   (10.05.06 08:43) [41]


То есть, я так понимаю, я тратил время зря?


 
Сергей М. ©   (2006-05-10 08:56) [43]


> !Fobos ©   (10.05.06 08:45) [42]


Ну почему же зря ?
Опыт - он, как известно, сын ошибок трудных ..

Но вряд ли есть смысл разбираться с дивайсом "вслепую", не имея достаточно подробной документации с описанием протокола инф.обмена, назначения портов ввода-вывода, псевдокода алгоритмов ввода-вывода и т.д. и т.п.


 
!Fobos ©   (2006-05-10 09:15) [44]


> Сергей М. ©   (10.05.06 08:56) [43]


На самом деле никого не волнует, вслепую я буду разбираться или нет. Эксперементировать уже нету времени, диплом надо сдать меньше чем через месяц, а его еще писать надо....плюс госы учить. Препод, который дал задание, в программировании шарит еще меньше меня и объяснять ему мои проблемы, думаю, смысла нету.
Ну если другого выхода нет, то всем большое спасибо за участие! =)


 
Сергей М. ©   (2006-05-10 09:40) [45]

Покажи соотв.код "на паскалевском варианте" ..


 
!Fobos ©   (2006-05-10 09:49) [46]


> Сергей М. ©   (10.05.06 09:40) [45]

Весь? Там что-то около 600-700 строк!!!


 
Anatoly Podgoretsky ©   (2006-05-10 09:50) [47]

!Fobos ©   (10.05.06 09:15) [44]
Забудь про диплом, за оставшее время драйвер написать не успеешь.


 
Сергей М. ©   (2006-05-10 09:51) [48]


> !Fobos ©   (10.05.06 09:49) [46]


Зачем весь ?

Только те фрагменты, где осуществляется собственно ввод-вывод и где выполняется программирование прерываний..


 
!Fobos ©   (2006-05-10 09:54) [49]

procedure interupt;
interrupt;
var i:integer;
begin
   PORT[$20]:=0;
   port[$21]:=32;
   portw[start_]:=$0000;
   for i:=0 to 5 do
     DATA[i]:=port[start_];
   for i:=0 to 32761 do
     DATA[i]:=port[start_];
   onoff(0);
   ct:=0;draw(100,tiold);
   {start;}
   PORT[$20]:=32;
   PORT[$21]:=0;
end;

.........
.........
.........

getintvec(Int, Save_vec);        // Int=$0D;   Save_vec:pointer
 setintvec(Int, @Interupt);
 ttt:=port[$20]+32;               // ttt:byte;

 PORT[$20]:=32;
 PORT[$21]:=0;

...........
..........
...........


 
!Fobos ©   (2006-05-10 09:55) [50]


> Anatoly Podgoretsky ©   (10.05.06 09:50) [47]

Обнадеживающе...=((


 
Сергей М. ©   (2006-05-10 10:08) [51]

Мда ..
Портом статуса здесь явно не пахнет, ввод организован по прерыванию ..
А фигурировал бы порт статуса - можно было бы выкрутиться.

В принципе можно, конечно, обойтись и без драйвера (прямой доступ к GDT, IDT), но способ этот малонадежен (из разряда трюков) и даже более трудоемок в реализации.


 
Дмитрий Л. ©   (2006-05-10 10:14) [52]


> Сергей М. ©   (10.05.06 10:08) [51]


Device\PhysicalMemory ?


 
Сергей М. ©   (2006-05-10 10:42) [53]


> Дмитрий Л. ©   (10.05.06 10:14) [52]


Для NT - да.


 
!Fobos ©   (2006-05-10 11:26) [54]


> Сергей М. ©   (10.05.06 10:08) [51]


В общем, все со мной ясно... :-)


 
vodvorezlaya   (2006-05-18 10:35) [55]


> procedure DataIn(PortAddress:word);
> var
> ByteValue:byte;
> Addr: Word;
> begin
>  Addr := PortAddress; //параметр PortAddress передается
> через eax, запомним его в лок.переменной
>  for i:=0 to 32767 do
>     begin
>       asm
>        push eax
>        push edx        
>        mov dx, Addr
>        in al,dx
>        mov ByteValue,al
>        pop edx
>        pop eax
>       end;
>       Data[i]:=ByteValue;
>     end;
> end;
>
> procedure DataOut(ByteValue:byte;PortAddress:word);
> asm
> //ByteValue передается в eax
> //PortAddress - в edx
> out dx,al
> end;
>
>
> > массив забивается практически одними и теми же значениями
>
>
> А где написано, что должен разными ?
> Док-ция на дивайс от производителя имеется ?


Не работает на ХР


 
Сергей М. ©   (2006-05-18 10:41) [56]


> Не работает на ХР


Что значит "не работает" ?


 
Thomas Anders   (2006-05-18 14:58) [57]

Доступ к портам ввода/вывода из Ring3 на NT платформах.


typedef DWORD   NTSTATUS;

typedef enum _PROCESSINFOCLASS {
  ProcessBasicInformation,
  ProcessQuotaLimits,
  ProcessIoCounters,
  ProcessVmCounters,
  ProcessTimes,
  ProcessBasePriority,
  ProcessRaisePriority,
  ProcessDebugPort,
  ProcessExceptionPort,
  ProcessAccessToken,
  ProcessLdtInformation,
  ProcessLdtSize,
  ProcessDefaultHardErrorMode,
  ProcessIoPortHandlers,
  ProcessPooledUsageAndLimits,
  ProcessWorkingSetWatch,
  ProcessUserModeIOPL,
  ProcessEnableAlignmentFaultFixup,
  ProcessPriorityClass,
  ProcessWx86Information,
  ProcessHandleCount,
  ProcessAffinityMask,
  ProcessPriorityBoost,
  ProcessDeviceMap,
  ProcessSessionInformation,
  ProcessForegroundInformation,
  ProcessWow64Information
} PROCESSINFOCLASS;

typedef  NTSTATUS
(__stdcall *NTDLL_ZwSetInformationProcess)(
  IN HANDLE ProcessHandle,
  IN PROCESSINFOCLASS ProcessInformationClass,
  IN PVOID ProcessInformation,
  IN ULONG ProcessInformationLength );
int APIENTRY WinMain(HINSTANCE hInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR     lpCmdLine,
                    int       nCmdShow)
{
// Устанавливаем привелегию на действие от имени системы.
  HANDLE hToken;
  TOKEN_PRIVILEGES tkp;
  if ( !OpenProcessToken(GetCurrentProcess(),
     TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,  &hToken) )
     return -1;
  LookupPrivilegeValue(NULL, SE_TCB_NAME,
          &tkp.Privileges[0].Luid);    
  tkp.PrivilegeCount = 1;    
  tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
  BOOLEAN bret = AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
     (PTOKEN_PRIVILEGES)NULL, 0);
  CloseHandle(hToken);
  if ( !bret )
     return -2;
// Загружаем явно ntdll.dll и получаем адрес нужной функции - делаем это
// руками, чтобы не возиться с библиотеками экспорта.
  HINSTANCE NtDll;
  NtDll=LoadLibrary("ntdll.dll");
  if ( !NtDll)
     return -3;
  NTDLL_ZwSetInformationProcess   ZwSetInformationProcess =
     (NTDLL_ZwSetInformationProcess)GetProcAddress(NtDll, "ZwSetInformationProcess");
  if ( !ZwSetInformationProcess )
     return -4;    
  NTSTATUS Status = ZwSetInformationProcess( GetCurrentProcess(), ProcessUserModeIOPL,
     NULL, 0 );
  if ( Status != 0 )
     return -5;
  __try {
// Тут можно использовать инструкции in, out
  }
  __except( EXCEPTION_CONTINUE_EXECUTION )
  {
  }
return 0;
}


1. Данный код будет работать, если для акаунта разрешена привелегия "Act as part of the operating system", она же SeTcbPrivilege. По умолчанию она отключена даже для админского акаунта. Поэтому либо нужно ее разрешить (это можно сделать и программно), либо выполнять код с правами SYSTEM, что можно сделать, если работать как сервис.

2. Не смотря на разрешение инструкций ввода/вывода, все равно будет генерироваться исключение. Его нужно подавить (см. код). В данном случае приведена реализация для VC, для Borland" a тоже должно подойти.

PS: Исключение будет генерироваться каждый раз после переключения задачи и только на ХР. Поскольку Windows не хранит TSS, то при обращении к портам ввода вывода, каждый раз после переключения задачи, in, out оказываются привелегированными интсрукциями, что приводит к возникновению исключения и благополучной обработки его ядром. Для чего ядро XP возобновляет исключение после собственного обработчика, непонятно. Тем не менее, это исключение можно проигнорировать.


 
Сергей М. ©   (2006-05-18 17:16) [58]


> Thomas Anders   (18.05.06 14:58) [57]


Разврат.


 
Игорь Шевченко ©   (2006-05-18 17:37) [59]

Thomas Anders   (18.05.06 14:58) [57]

Это конечно все хорошо и даже работает, но вот только эту привилегию не рекомендуют назначать никому...


 
Thomas Anders   (2006-05-18 20:49) [60]

> Сергей М. ©   (18.05.06 17:16) [58]
> Разврат.

Ну почему же... Эта возможность может служить как инструмент разработки для быстрой проверки нового аппаратного обеспечения. Или имеется старая DOS-программа и очень нужно чтобы она работала в NT? На моей работе у некоторых коллег такая ситуация, используют DirectI/0, а это не удобно и кажется из-за HyperThreading ещё проблемы. Можно конечно и драйвер писать... Впрочем, каждый сам кузнец собственного геморроя...

> Игорь Шевченко ©   (18.05.06 17:37) [59]

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


 
Игорь Шевченко ©   (2006-05-18 21:14) [61]


> Ну, вобщем то возможно (и наверняка это так и есть), что
> добавление этой привилегии откроет какую-нибудь дополнительную
> дыру в системе.


Не то слово. Размер этой дыры поражает. Поэтому простой народ, например, ASUSTek, пишет универсальные драйверы, которым передается адрес порта и что надо делать, читать или писать.


 
isasa ©   (2006-05-19 08:17) [62]

Thomas Anders   (18.05.06 14:58) [57]
Снимаю шляпу.
:)
Все-таки, пробивается.
Напоминает забивание кувалдой каждого байта в буфер ...
Ей Богу, легче использовать DDK, и написать как просят.



Страницы: 1 2 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.09.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.65 MB
Время: 0.044 c
2-1156418569
zdm
2006-08-24 15:22
2006.09.17
true false


15-1156827609
begin...end
2006-08-29 09:00
2006.09.17
29 августа. С Днём рождения!


1-1155043600
Konstantin555
2006-08-08 17:26
2006.09.17
Ошибка при конвертации....


15-1156521040
saxon
2006-08-25 19:50
2006.09.17
Тест Джоэла


2-1156911310
Sirus
2006-08-30 08:15
2006.09.17
Контроль введенных значений в DBGRID-e





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский