新人一枚,刚接触驱动方面。很菜。。。。。还请各位前辈多多指点。
之前冒昧的提问,还请大家原谅。。。。。
Another possible alternative is to modify the I/O permission bitmap to allow a particular task, access to certain I/O ports.
这段话是摘自 PortTalk 的网站上的, 不知道他这里的更改I/O permission bitmap 指的是不是用
Ke386SetIoAccessMap 一类的API,是微软没有正式公布的?
这个是不是只能用在32位的操作系统下, 根据网上的描述,修改I/O permission bitmap 之后,可以在 USER Mode 下 进行 PORT 的读写貌似
网上现有的资源,如portTalk,winIO 的 源码里面都用了这个,可是这两个本身不是KMD吗?既然已经是Ring0 级驱动了,为什么还要修改I/O permission bitmap呢? 直接用_inp, _outp,然后把读取的数据传回User APP不就可以了吗?
我正在做的是64位系统下的驱动,参考了一些例子,已经可以读写一些port了,
其中的一段代码 用于Creatdrvice的
pDevObj->Flags |= DO_BUFFERED_IO;
// Record driver Info in the expander Firmware
pDevExt = (PDEVICE_EXTENSION)pDevObj->DeviceExtension;
pDevExt->pDevice = pDevObj;
// Write the device name into expander Firmware
pDevExt->ustrDeviceName.MaximumLength = BUFFER_SIZE;
pDevExt->ustrDeviceName.Buffer = (PWSTR)ExAllocatePool(PagedPool, BUFFER_SIZE);
RtlCopyUnicodeString(&pDevExt->ustrDeviceName, &uDevName);
// Creat SymbolLink
RtlInitUnicodeString(&uSymLinkName, SYMLINKNAME);
IoCreateSymbolicLink(&uSymLinkName, &uDevName);
if (!NT_SUCCESS(status))
{
// Delete Device
IoDeleteDevice(pDevObj);
return status;
}
// Write the symbol link into expander Firmware
pDevExt->ustrSymLinkName.MaximumLength = BUFFER_SIZE;
pDevExt->ustrSymLinkName.Buffer = (PWSTR)ExAllocatePool(PagedPool, BUFFER_SIZE);
RtlCopyUnicodeString(&pDevExt->ustrSymLinkName, &uSymLinkName);
return STATUS_SUCCESS;
这段还是不大清楚具体作用, 其中很多都是不需要的觉得
修改成后面这样也完全可以的。。
RtlInitUnicodeString(&uDevName, DEVNAME);
//
// // Creat Device
//
// status = IoCreateDevice(pDriverObjcet,0,&uDevName, FILE_DEVICE_UNKNOWN, 0, FALSE, &pDevObj);
//
// if (!NT_SUCCESS(status))
// {
// return status;
// }
//
// // Initialize the Memory R/W
//
// pDevObj->Flags |= DO_BUFFERED_IO;
//
//
// // Creat SymbolLink
// RtlInitUnicodeString(&uSymLinkName, SYMLINKNAME);
// IoCreateSymbolicLink(&uSymLinkName, &uDevName);
// if (!NT_SUCCESS(status))
// {
// // Delete Device
// IoDeleteDevice(pDevObj);
// return status;
// }
像上面的写法 有什么原因吗?
纯粹新手一个,还望各位前辈多多指点
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!