万分感谢大家的热心帮助,我已经试验成功了在内核态写Com口的功能,现在把代码贴在下面与大家分享:
ASSERT(KeGetCurrentIrql() <= DISPATCH_LEVEL);
PULONG pversion = (PULONG) MmGetSystemAddressForMdl(I.Mdl());
NTSTATUS status;
OBJECT_ATTRIBUTES oa;
IO_STATUS_BLOCK iostatus;
HANDLE hfile; // the output from this process
UNICODE_STRING pathname; // you\'ve been given this
RtlInitUnicodeString( &pathname, L\"\\\\Device\\\\Serial0\");//\\Device\\Serial0
InitializeObjectAttributes(&oa,&pathname, OBJ_CASE_INSENSITIVE, NULL, NULL);
status = ZwCreateFile(&hfile,
GENERIC_WRITE,
&oa,
&iostatus,
NULL,
0,
FILE_SHARE_WRITE,
FILE_OPEN,
FILE_SYNCHRONOUS_IO_NONALERT,
NULL,
0);
if (NT_SUCCESS(status))
{
status = ZwWriteFile(hfile,
NULL,
NULL,
NULL, &iostatus,
pversion,
I.WriteSize(),
NULL,
NULL);
}
else
{
t << \"Failed to open com1 device \"<
}
ZwClose(hfile);
这段代码就可以实现从一个驱动向Com口发数据的功能,希望对大家有用。
但现在接收数据问题还没有解决,今天上午一位网友提供了一个使用IOCTL的办法,但和上面调函数的办法相比显得就不那么适合了,请大家再帮帮我,看看有没有其他的办法?
再次谢谢大家!!!!!