информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsСетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 700 с лишним git-серверов пострадало... 
 От повторного пришествия Шаи-Хулуда... 
 Крупный сбой Azure и других сервисов... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
??? 11.03.02 14:47  Число просмотров: 1030
Автор: 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