阅读:1385回复:4
2k下和98下的com口设备名有何区别。
我用同一个驱动在2k下可一打开com2口但在98下却不能我的代码如下:
StatuBlock=(PIO_STATUS_BLOCK )ExAllocatePool(NonPagedPool ,sizeof(StatuBlock)); RtlInitUnicodeString(&Filename,L\"\\\\??\\\\COM2\"); RtlZeroMemory(&ObjectAttr,sizeof(ObjectAttr)); ObjectAttr.Length=sizeof(ObjectAttr); ObjectAttr.ObjectName=&Filename; ObjectAttr.SecurityDescriptor =NULL; OpFStatus=ZwCreateFile( &(pDE->ComHandle), GENERIC_READ|GENERIC_WRITE, &ObjectAttr, StatuBlock, 0, FILE_ATTRIBUTE_NORMAL, 0, FILE_OPEN , FILE_NON_DIRECTORY_FILE, NULL, 0 ); 其中OpFStatus在98下的返回值为:STATUS_OBJECT_PATH_NOT_FOUND ((NTSTATUS)0xC000003AL) ,也就是说设备名不是“\\\\??\\\\COM2”请问各位能告诉我98下com口的设备名么? |
|
沙发#
发布于:2002-06-10 11:45
98不用Unicode的,可能
RtlInitUnicodeString(&Filename,L\"\\\\??\\\\COM2\");有问题吧。 |
|
板凳#
发布于:2002-06-10 14:49
但是:ObjectAttr.ObjectName指明是要PUNICODE_STRING的。98下的com口的设备名应该是unicode吧。我想让我的驱动(wdm)代替应用程序来对com口进行读写(用ZwReadfile,ZwWritefile等),不知大家认为这种想法可不可行?
|
|
地板#
发布于:2002-06-11 09:42
我也看了,也奇怪。98确实不支持UNICODE的。
98对WDM的支持不是很好的。不如用VxD吧。 |
|
地下室#
发布于:2002-06-11 11:09
可是我现在刚学wdm不久,以前从来没认真的看过vxd的书。。。看来在98下用wdm驱动打开com的vxd驱动进行读写是不太好实现的了。但应用程序打开com口调用createfile()时内核不是相应的调用zwcreatefile()来实现应用的请求的吗?而vxd的设备也应该有个可确定的设备名称吧?
|
|