информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
Всем откликнувшимся спасибо ! 19.03.02 14:23  Число просмотров: 1002
Автор: BOBAH Статус: Незарегистрированный пользователь
<"чистая" ссылка>
<programming>
[C++] LPT DDK 07.03.02 12:11  
Автор: BOBAH Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Подскажите, как обратиться в W2k к LPT порту из драйвера.
В конечном итоге, должно получиться тоже, что получается в коде под ДОС:
outport(0X379,0x02);
...............................
ret=inport(0X379);

Пока дело касалось свободных ресурсоввсё было нормально, как только дело коснулось LPT, который уже занят стандартным драйвером, всё встало.
Не хотелось бы заменять стандартный драйвер, а пользоваться им из своего. Задача критична ко времени (время между опросами 4мкс), не станет ли это основанием всё же заменять стандартный драйвер?
[C++] М ученья продолжаются... 15.03.02 20:05  
Автор: BOBAH Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Написал я драйверок для LPT, запустил. Перед этим остановил parport (стандартный драйвер LPT) и parallel (драйвер Параллельного класса). Ресурсы зашарились, порты промэпились. Пытаюсь выдать что-нибудь в порт (например, установить высокий уровень на D1) и ничего... Попытался слезть с LPT и залезть по др. адресу (0x320), - всё проходит, битик устанавливается. Так в чём же дело с LPT?
Код в сокращенном виде:

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
{
..........................................
PortAddress.LowPart = LPT_BASE_ADDR;
PortAddress.HighPart = 0;

// Register resource usage (ports)
RtlZeroMemory( (PVOID)&ResourceList, sizeof( ResourceList ) );
ResourceList.Count = 1;
ResourceList.List[0].InterfaceType = Isa;
// ResourceList.List[0].Busnumber = 0; Already 0
// ResourceList.List[0].PartialResourceList.Version = 0;
// ResourceList.List[0].PartialResourceList.Revision = 0;

ResourceList.List[0].PartialResourceList.Count = 1;
ResourceList.List[0].PartialResourceList.PartialDescriptors[0].Type = CmResourceTypePort;
ResourceList.List[0].PartialResourceList.PartialDescriptors[0].ShareDisposition = CmResourceShareDriverExclusive;
ResourceList.List[0].PartialResourceList.PartialDescriptors[0].Flags = CM_RESOURCE_PORT_IO;
ResourceList.List[0].PartialResourceList.PartialDescriptors[0].u.Port.Start = PortAddress;
ResourceList.List[0].PartialResourceList.PartialDescriptors[0].u.Port.Length = 4;

// Report our resource usage and detect conflicts
status = IoReportResourceUsage(
NULL, // driver class name
DriverObject, // driver object
&ResourceList, // driver resource list
sizeof( ResourceList ), // driver resource list size
NULL, // device object
NULL, // device resource list
0, // device resource list size
FALSE, // override conflict
&ResourceConflict // conflict detected
);

if( ResourceConflict )
return STATUS_DEVICE_CONFIGURATION_ERROR;

/* creating device */
RtlInitUnicodeString(&uni_ntname, NT_DEVICE_NAME);
status = IoCreateDevice(DriverObject,
sizeof(DEVICE_INFO),
&uni_ntname,
FILE_DEVICE_PRLPRGM,
0,
FALSE,
&deviceObject);

if(status != STATUS_SUCCESS)
return status;

/* create dos device name */
RtlInitUnicodeString(&uni_dosname, DOS_DEVICE_NAME);
status = IoCreateSymbolicLink(&uni_dosname, &uni_ntname);
if( status != STATUS_SUCCESS )
return status;

// Initialize the local driver info for each device object
pDeviceInfo = (DEVICE_INFO*)deviceObject->DeviceExtension;
if(pDeviceInfo == NULL)
return STATUS_DRIVER_INTERNAL_ERROR;

// Clear local device info memory
RtlZeroMemory( pDeviceInfo, sizeof(DEVICE_INFO) );

// Convert the IO port address into a form NT likes.
MemType =1;
if( !HalTranslateBusAddress(
Isa, // interface type
0, // bus number
PortAddress, // bus address
&MemType, // address space
&MappedAddress) ) // translated address
{
return STATUS_NONE_MAPPED;
}

if(!MemType)
{/* if address in memory address space */
..........................................
}
else
{/* if address in io address space */
pDeviceInfo->PortBase = (BYTE*)MappedAddress.LowPart;
pDeviceInfo->fMemoryMapped = FALSE;
}

/* set standard driver routines */
DriverObject->DriverUnload = PrlPrgm_Unload;
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = PrlPrgm_Dispatch;
.....................................................................

return STATUS_SUCCESS;
}

NTSTATUS PrlPrgm_Dispatch(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
..........................................
WRITE_PORT_UCHAR(pDevInfo->PortBase, 0x02);
..........................................
Irp->IoStatus.Status = status;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return status;
}
[C++] Мученья продолжаются... 18.03.02 05:10  
Автор: dsds Статус: Незарегистрированный пользователь
<"чистая" ссылка>
По этой ссылке есть описание работы с параллельным портом (через специальный драйвер) из под NT, но для Дельфи, может пригодится.

Вот ссылка
[C++] Мученья продолжаются... 18.03.02 10:48  
Автор: BOBAH Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Спасибо за пример. Весьма интересно. Но проблема в том, что мне нужно работать непосредственно с портом из драйвера, т.к. в моей задаче есть критичность по времени, выполняется всё на DISPATCH_LEVEL.

> По этой ссылке есть описание работы с параллельным портом
> (через специальный драйвер) из под NT, но для Дельфи, может
> пригодится.
[c++] готово ! 19.03.02 14:21  
Автор: BOBAH Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Получилось работать с LPT под NT из своего драйвера через стандартный драйвер. Если кому-то будет необходимо, обращайтесь.
[C++] Обращаюсь :-) 20.03.02 06:35  
Автор: dsds Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Получилось работать с LPT под NT из своего драйвера через
> стандартный драйвер. Если кому-то будет необходимо,
> обращайтесь.
Если не трудно поделитесь.
[C++] Обращаюсь :-) 20.03.02 11:07  
Автор: BOBAH Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Размещять на форуме не вижу смысла, не такая уж это невидаль... :о)
Давайте мыло, вышлю. Либо, мыльте сами: myboss@mailru.com


> > Получилось работать с LPT под NT из своего драйвера
> через
> > стандартный драйвер. Если кому-то будет необходимо,
> > обращайтесь.
> Если не трудно поделитесь.
Всем откликнувшимся спасибо ! 19.03.02 14:23  
Автор: BOBAH Статус: Незарегистрированный пользователь
<"чистая" ссылка>
[C++] LPT DDK 12.03.02 14:44  
Автор: Chingachguk <Chingachguk> Статус: Member
<"чистая" ссылка>
Ты хочешь сказать, что если номер порта в in-out-ах не совпадает с LPT, то скорость одна, а для других портов - другая ?

Если так, то, может быть, ты ловишь эксепшен, но обработчик тебя не игнорирует, а все-ж таки выполняет, но тормоза-то остаются...
Может, тебе стоит попробовать свое tss поправить насчет этих портов, чтобы не было эксепшена, да вот только можно ли это в вин 2K ?
??? 11.03.02 14:47  
Автор: BOBAH Статус: Незарегистрированный пользователь
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach