edua714
驱动牛犊
驱动牛犊
  • 注册日期2005-04-22
  • 最后登录2005-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3271回复:9

pci驱动源码(给分)

楼主#
更多 发布于:2005-05-27 17:08
读取pci配置空间的源码,一运行就重启,各位大侠帮帮忙啊,项目来不及了:(小弟第一次作驱动,郁闷中
VOID Mytry2Device::Serial_MYTRY2_IOCTL_800_read_Handler(KIrp I)
{
NTSTATUS status = STATUS_SUCCESS;

KMemory Mem(I.Mdl());    
KPciConfiguration PciConfig(m_Lower.TopOfStack());
PULONG pOutBuffer = (PULONG) Mem.MapToSystemSpace();  //输出缓冲区指针,传出读取的数据
PULONG  pInBuffer       = (PULONG) I.IoctlBuffer();     //输入缓冲区指针

ULONG   Offset;                  //读取的偏移地址
Offset   = *pInBuffer;

ULONG   count;                   //读取的数据个数
count    = *(pInBuffer+1);
PciConfig.ReadHeader(pOutBuffer,0,count);
t << \"readheader  :: \" << *pOutBuffer << EOL;
t << \"readheader  :: \" << *(pOutBuffer+2) << EOL;
I.Information() = count;
I.Status() = status;
PnpNextIrp(I);
}
edua714
驱动牛犊
驱动牛犊
  • 注册日期2005-04-22
  • 最后登录2005-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-05-27 17:10
应用程序中

void Test_MYTRY2_IOCTL_800_read(void)
{
ULONG bufOutput[IOCTL_OUTBUF_SIZE]; // 传出读取的数据缓冲区
ULONG nOutput; // 实际读取的数据个数

    ULONG   bufInput[2];            // 传入读取的参数
ULONG   offset;                         // 要读取的偏移地址

printf(\"\\n----------- ready for reading from Base0 -----------\");

//获取读取的偏移地址:
printf(\"\\nPlease input the offset of read operation(Hex):\");
scanf(\"%x\",&offset);

// //获取读取的数据个数:
// printf(\"\\nPlease input the number of data to read(Dec):\");
// scanf(\"%d\",&number);

bufInput[0]=offset;
bufInput[1]=IOCTL_OUTBUF_SIZE;

// Call device IO Control interface (PCI9054_IOCTL_804_ReadBase3) in driver
if (!DeviceIoControl(hDevice,
MYTRY2_IOCTL_800_read,
bufInput,
2*4,     // 字节
bufOutput,
128*4,//sizeof(bufOutput),
&nOutput,
NULL)
)
{
printf(\"\\nERROR: DeviceIoControl returns %0x.\", GetLastError());
Exit(1);
}
    printf(\"\\n------>>>>>> data read <<<<<<------\");
for(ULONG i=0;i<nOutput;i++)
{
printf(\"\\nread data[%d]=%x\",i,bufOutput);
}
printf(\"\\n\\n\");

}
aiwadgj
驱动老牛
驱动老牛
  • 注册日期2004-11-13
  • 最后登录2020-12-24
  • 粉丝0
  • 关注0
  • 积分119分
  • 威望84点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2005-05-27 17:26
应用程序中 的
bufInput[0]=offset;

offset需要值否
酒也在沉溺,何时麻醉我抑郁。过去了的一切会平息。。。。。。。
edua714
驱动牛犊
驱动牛犊
  • 注册日期2005-04-22
  • 最后登录2005-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-05-27 20:51
offset是scanf的啊?
sharpor
驱动小牛
驱动小牛
  • 注册日期2005-04-04
  • 最后登录2007-05-10
  • 粉丝0
  • 关注0
  • 积分127分
  • 威望17点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-05-28 15:18
死机100%是这个造成的。
“MYTRY2_IOCTL_800_read”
这句话有问题,PciConfig.ReadHeader(pOutBuffer,0,count);


blueHacker
驱动牛犊
驱动牛犊
  • 注册日期2004-11-19
  • 最后登录2009-07-29
  • 粉丝0
  • 关注0
  • 积分102分
  • 威望12点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-05-28 22:09
你的ioctl code定义的是METHOD_BUFFERED还是DIRECT_IO?
PULONG pOutBuffer = (PULONG) Mem.MapToSystemSpace(); //输出缓冲区指针,传出读取的数据
这句看好象你是用的DIRECT_IO
而PULONG pInBuffer = (PULONG) I.IoctlBuffer(); //输入缓冲区指针
这句又好象是METHOD_BUFFERED

如果你是METHOD_BUFFERED,那么输出缓冲区也是由I.IoctlBuffer()指向的,不是I.Mdl(),相反,如果是DIRECT_IO,那输入输出全是由I.mdl()指向的
edua714
驱动牛犊
驱动牛犊
  • 注册日期2005-04-22
  • 最后登录2005-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-05-30 15:56
你的ioctl code定义的是METHOD_BUFFERED还是DIRECT_IO?


如果你是METHOD_BUFFERED,那么输出缓冲区也是由I.IoctlBuffer()指向的,不是I.Mdl(),相反,如果是DIRECT_IO,那输入输出全是由I.mdl()指向的
 

大哥:我查了书上说DIRECT_IO,输出是由I.mdl()指向的.输入可是I.IoctlBuffer()指向的啊.......
我把maptosystemspace()改成virtualaddress()好像就行了,哪位给解释一下这个区别啊
 
bangh
驱动牛犊
驱动牛犊
  • 注册日期2003-03-26
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分57分
  • 威望75点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2012-11-27 16:49
你应该 给 blueHacker  分。
yixuanxiao
驱动牛犊
驱动牛犊
  • 注册日期2013-06-25
  • 最后登录2013-06-25
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2013-06-25 21:13
   
gutian98
禁止发言
禁止发言
  • 注册日期2003-01-12
  • 最后登录2016-12-11
  • 粉丝4
  • 关注2
  • 积分760分
  • 威望8026点
  • 贡献值1点
  • 好评度364点
  • 原创分0分
  • 专家分21分
  • 金点子奖
  • 社区居民
9楼#
发布于:2013-07-30 16:54
用户被禁言,该主题自动屏蔽!
游客

返回顶部