Запись в порты через asm (in, out) под XP

Тема в разделе "WASM.NT.KERNEL", создана пользователем Холод, 16 авг 2007.

  1. Холод

    Холод New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2006
    Сообщения:
    42
    Собственно как осуществить запись в порты через asm (in, out) под XP

    пишет мол 'Priveleged Instruction.'

    как права то расшарить до уровня системы чтобы можно было это сделать?
     
  2. Guest

    Guest Guest

    Публикаций:
    0
    В какие порты и как ты в них пишешь?
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Во-первых, если оно пишет Privileged instruction, значит ты выполняешь код в юзермоде и тема не по разделу.

    Во-вторых, есть два варианта записи в порты.
    1) Сделать драйвер, который по запросу пользователя будет писать в порты и возвращать информацию пользователю.
    Это займет много процессорного времени, но это проще в реализации.
    2) Сделать драйвер, который разрешит юзермодному процессу запись в порты напрямую через IN/OUT.
     
  4. Холод

    Холод New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2006
    Сообщения:
    42
    Код (Text):
    1. function readcmos(i: byte):byte;
    2. var zn: byte;
    3. begin
    4.   //i — адрес ячейки, чтение значения которой производится
    5.   //выходные параметры
    6.   //zn — прочтенное значение
    7.  
    8.   asm  
    9.     mov  al,i   //номер ячейки, из которой производится чтение
    10.     out  70h,al //заносим это значние в порт cmos rts
    11.     wait
    12.     xor  ax,ax  //очистка регистра ax
    13.     in  al,71h  //вводим в регистр al из порта значение ячейки smoc rts
    14.     wait
    15.     mov zn,al   //присваеваем zn значение ячейки
    16.   end;
    17.  
    18.   RESULT := zn;
    19. end;
     
  5. Холод

    Холод New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2006
    Сообщения:
    42
    а есть решение без драйвера?

    нашёл такой код. написано он должин расширить права до уровня системы, но почему то ни чего не выходит.
    Код (Text):
    1. procedure EnablePrivilege;
    2. var hToken: dword;
    3.      TP: TOKEN_PRIVILEGES;
    4.      RET_LENGTH: dword;
    5. begin
    6.    TP.PrivilegeCount := 1;
    7.    OpenProcessToken(INVALID_HANDLE_VALUE,
    8.    TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken);
    9.    LookupPrivilegeValue (nil,'SeTcbPrivilege',
    10.    TP.Privileges[0].Luid);
    11.    TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
    12.    AdjustTokenPrivileges(hToken, false, TP,
    13.    SizeOf(TOKEN_PRIVILEGES), TP, RET_LENGTH);
    14.    CloseHandle(hToken);
    15.    ZwSetInformationProcess(GetCurrentProcess, $10, nil, 0);
    16. end;
     
  6. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    EAX не пробовал?

    Это я к тому, что винда работает в защищенном режиме CPU. Программировать напрямую используя регистры Ax, Bx, Dx, etc... НЕЛЬЗЯ!!!
    EAX
    EBX
    ECX
    ***
    ESI
    EDI
    Это разрешается, остальное - нет.
     
  7. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    какими бы ни были права пользователя выполнять привелигированные инструкции в р3 никто тебе не даст, такова парадигма, это удел драйверов
    в KmdKit есть giveio.sys с сорцами скачай посмотри
     
  8. Холод

    Холод New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2006
    Сообщения:
    42
    тоесть если даже у меня права админа, ввод/вывод не выйдет так?
     
  9. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    просто так да, не выйдет
    зато с правами админа можешь драйвер загрузить
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Да ладно. А мне казалось что ax всего лишь младшее слово eax и ничего больше.

    Нет, нет и еще раз нет. Я уже написал возможные варианты
     
  11. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Что за ахинея?
     
  12. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    ZwSetInformationProcess с классом ProcessUserModeIOPL не пробовали, кстати?
     
  13. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    под сп1 прикол с привилегиями проходил(толька пад одмином), в сп2 тож может пройдет с некоторыми усовершенствованиями(h++p://ry.pl/~omega/progs/DirectIO.rar)
     
  14. Guest

    Guest Guest

    Публикаций:
    0
    Холод
    Пиши дров, самый надежный способ.
     
  15. EP_X0FF

    EP_X0FF New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2006
    Сообщения:
    450
    slow

    Это тоже самое, что TcbPrivilege
     
  16. Холод

    Холод New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2006
    Сообщения:
    42
    буду писать дрова
     
  17. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    EP_X0FF
    в каком смысле то же самое? Хочешь сказать, требует TCB?

    Холод
    может стоит GiveIO посмотреть?
     
  18. Dust112

    Dust112 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2002
    Сообщения:
    16
    Адрес:
    Russia
    Я написал драйвер, оказалось все просто, работой очень даволен. Опирался на материалы взятые с сайта wasm. Заодно благодарю авторов этих статей.