Здраствуйте. Опять вопрос, но он действительно соответствует теме! Наверное этот вопрос подходит не только для COM-порта, но и для всех драйверов. Вот я установил соединение со своим COM-портом. Нажимаю на клаву, и диспетчер ввода-вывода вызывает функцию DispatchWrite, т.е. запись в COM-порт. Потом опять нажимаю на клаву, и опять запись в COM-порт и т.д. А как сделать так чтобы клиент стал получать ответ от COM-порта, т.е. вызывал функию DispatchRead. Или может для этого на порт надо прицепить модем. В итоге надо сделать чтобы после определенного записанного в порт символа клиент считывал из порта. Помогите пожалуйста!
А сама процедура выглядит так. Код (Text): char sym; NTSTATUS xDispatchWrite(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp) { //xDispatchWrite PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); PAGED_CODE(); DbgBreakPoint(); if (Irp->MdlAddress!=NULL) { char*x=MmGetSystemAddressForMdlSafe(Irp->MdlAddress,NormalPagePriori ty); RtlCopyMemory(&sym,x,1); } if (sym==0x0a)//Enter { //Здесь должен быть код, который заставил бы клиента прочитать из порта } Irp->IoStatus.Status = STATUS_SUCCESS; Irp->IoStatus.Information=1; IoCompleteRequest(Irp, IO_NO_INCREMENT); return STATUS_SUCCESS; } <font color="red]используем тег CODE</font><!--color-->!
Посмотри - был ли вызов Read до того, как произошел Write, и если да, то смотри значения таймаутов, возможно нужно было возвращать STATUS_PENDING (не завбыв про IoMarkIrpPending Если Read-а не было - смотри был ли вызов IOCTL_SERIAL_WAIT_ON_MASK, если да, то надо смотреть параметры WAIT-а Это два самых распространенных случая