Собственно как осуществить запись в порты через asm (in, out) под XP пишет мол 'Priveleged Instruction.' как права то расшарить до уровня системы чтобы можно было это сделать?
Во-первых, если оно пишет Privileged instruction, значит ты выполняешь код в юзермоде и тема не по разделу. Во-вторых, есть два варианта записи в порты. 1) Сделать драйвер, который по запросу пользователя будет писать в порты и возвращать информацию пользователю. Это займет много процессорного времени, но это проще в реализации. 2) Сделать драйвер, который разрешит юзермодному процессу запись в порты напрямую через IN/OUT.
Код (Text): function readcmos(i: byte):byte; var zn: byte; begin //i — адрес ячейки, чтение значения которой производится //выходные параметры //zn — прочтенное значение asm mov al,i //номер ячейки, из которой производится чтение out 70h,al //заносим это значние в порт cmos rts wait xor ax,ax //очистка регистра ax in al,71h //вводим в регистр al из порта значение ячейки smoc rts wait mov zn,al //присваеваем zn значение ячейки end; RESULT := zn; end;
а есть решение без драйвера? нашёл такой код. написано он должин расширить права до уровня системы, но почему то ни чего не выходит. Код (Text): procedure EnablePrivilege; var hToken: dword; TP: TOKEN_PRIVILEGES; RET_LENGTH: dword; begin TP.PrivilegeCount := 1; OpenProcessToken(INVALID_HANDLE_VALUE, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken); LookupPrivilegeValue (nil,'SeTcbPrivilege', TP.Privileges[0].Luid); TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, false, TP, SizeOf(TOKEN_PRIVILEGES), TP, RET_LENGTH); CloseHandle(hToken); ZwSetInformationProcess(GetCurrentProcess, $10, nil, 0); end;
EAX не пробовал? Это я к тому, что винда работает в защищенном режиме CPU. Программировать напрямую используя регистры Ax, Bx, Dx, etc... НЕЛЬЗЯ!!! EAX EBX ECX *** ESI EDI Это разрешается, остальное - нет.
какими бы ни были права пользователя выполнять привелигированные инструкции в р3 никто тебе не даст, такова парадигма, это удел драйверов в KmdKit есть giveio.sys с сорцами скачай посмотри
Да ладно. А мне казалось что ax всего лишь младшее слово eax и ничего больше. Нет, нет и еще раз нет. Я уже написал возможные варианты
под сп1 прикол с привилегиями проходил(толька пад одмином), в сп2 тож может пройдет с некоторыми усовершенствованиями(h++p://ry.pl/~omega/progs/DirectIO.rar)
EP_X0FF в каком смысле то же самое? Хочешь сказать, требует TCB? Холод может стоит GiveIO посмотреть?
Я написал драйвер, оказалось все просто, работой очень даволен. Опирался на материалы взятые с сайта wasm. Заодно благодарю авторов этих статей.