работа с портами в winxp
Написать сервис или драйвер, которые в режиме ядра будут делать out в порт.
то есть стандартными апи функциями ничего не добиться? как я понимаю outport & inport под виндоуз не работают...
если нестандартные, то тоже можно, как файл, но уже с извратами, и не все ножки
createfile?
да
#include "stdafx.h"
#include "windows.h"
#include "iostream.h"
void main
{
HANDLE hLPT=CreateFile("LPT1",GENERIC_READ,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hLPT!=INVALID_HANDLE_VALUE)
{
cout << " Ok Open LPT1" << endl;
int p=255;
DWORD dw;
OVERLAPPED ov;
WriteFile(hLPT,&p,sizeof(p&dw,&ov);
CloseHandle(hLPT);
}
else cout << "Error Open" << endl;
}
Ни одна не загорается
Правда потом понял у меня writefile возвращается с ошибкой номер 5 ERROR_ACCESS_DENIED.Как это поправить мож кто знает?
Правда потом понял у меня writefile возвращается с ошибкой номер 5 ERROR_ACCESS_DENIED.Ну это понятно. Ты же пишешь
HANDLE hLPT=CreateFile("LPT1", GENERIC_READ ,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
А сам пишешь в устройство. Ставь GENERIC_WRITE вместо GENERIC_READ.
блин после предыдущей модификации не заметил ) ща попробую. теперь 6-ую выдает ERROR_INVALID_HANDLE .Хотя createfile нормально открывает порт(успешно)
HANDLE hLPT=CreateFile("LPT1", GENERIC_READ | GENERIC_WRITE ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
Проверить, что lpt называется именно lpt1 и что он определился в Windows-е (включен в биосе)
PS. Хотя не, ничего про LPT в MSDN-е не вижу, только про COM пишут. Может и нельзя LPT через CreateFile открыть
навскидку
http://support.microsoft.com/default.aspx?scid=kb;en-us;823179&Product=vb6
в качестве, имени можно попробовать и (если записывать в коде, то слэшей соответственно будет в два раза больше)
так он его открывает успешно.Хендл получает нормально.Ошибки в открытии никакой нет.Или все равно может быть в дальнейшем что-то не так?
У меня есть программка кем-то другим написанная(без исходников там можно по битам данные в лпт кидать.Так вот с нее лампочки загораются и тухнут как милые.(так что лпт определен и работает хорошо)
int p=255;
DWORD dw;
WriteFile(hLPT,&p,sizeof(p&dw,0);
Сейчас вариант такой:
void main
{
HANDLE hLPT=CreateFile("LPT1", GENERIC_WRITE ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hLPT!=INVALID_HANDLE_VALUE)
{
cout << " Ok Open LPT1" << endl;
int p=255;
DWORD dw;
int t=WriteFile(hLPT,&p,sizeof(p&dw,NULL);
CloseHandle(hLPT);
}
else cout << "Error Open" << endl;
}
Ждет когда ему железка подтвердит прием данных.
тебе ее с правильными параметрами надо вызывать перед WriteFile-ом.
ps
Также еще можно повызывать функцию SetCommTimeouts
SetCommState только для Serial портов
А мб. это надо делать через UNC-пути? Всё-таки, LPT1 - это порт принтера и открываться он должен, по идее, как текстовый файл. - для вывода текста.
Оставить комментарий
skyformstd
как можно осуществить? например доступ к LPT и к конкретной его ножке?