gxjt
驱动老牛
驱动老牛
  • 注册日期2002-03-26
  • 最后登录2006-06-07
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1242回复:10

50高分奖励能解决我的问题者

楼主#
更多 发布于:2002-07-17 10:32
各位大虾:本人想用DriverStudio进行并行口EPP模式的WDM编程,选总线(bus)为none生成程序框架,我试图对程序更改,但不知对不对,请指教:

void ParportEppModeDevice::SerialWrite(KIrp I)
{
t << \"Entering ParportEppModeDevice::SerialWrite, \" << I << EOL;
NTSTATUS status = STATUS_SUCCESS;

KIoRange   m_ParPortIos;
NTSTATUS status1 = m_ParPortIos.Initialize(
0x378,  // LPT1 Bus address
  TRUE,  //InCpuIoSpace
8,      // Device size
TRUE  // Map to system space
  );
#define CONTROL 2  //(37A)
#define ADDRESS 3  //(37B)
#define EDATA   4  //(37C)

    m_ParPortIos.outb(CONTROL,0x80);


// Declare a memory object
// KMemory Mem(I.Mdl());
// Use the memory object to create a pointer to the caller\'s buffer
// PUCHAR pBuffer = (PUCHAR) Mem.MapToSystemSpace();

ULONG   dwTotalSize = I.WriteSize(CURRENT);
ULONG   dwBytesSent = 0;


    m_ParPortIos.outb(ADDRESS,addr); //?????????????????
    m_DeviceIos.outb(EDATA,data); //????????????????????
// TODO: If the write can be satisfied immediately, set the Information
// and Status fields now, then call NextIrp to complete this IRP
// and start processing the next IRP in the queue.

// TODO: If the device cannot accept all of the data yet, initiate a
// request to the physical device here, and defer the Information,
// Status, and NextIrp handling until the hardware indicates that
// the write is complete.  Typically, this might be handled in a
// DPC that is called after the hardware finishes transferring
// the data.

// TODO: To satisfy the write now, transfer data to the device
// from caller\'s buffer at \"pBuffer\".  Then, indicate how much
// data was transferred:

I.Information() = dwBytesSent;

I.Status() = status;


// PnpNextIrp completes this IRP and starts processing
// for the next IRP in the driver managed queue.
// TODO: The Wizard creates a single queue for all Irps.
// If you have created additional queues, select
// the appropriate queue for this Irp here.
m_DriverManagedQueue.PnpNextIrp(I);
}

其中的   m_ParPortIos.outb(ADDRESS,addr); //?????????????????
    m_DeviceIos.outb(EDATA,data); //????????????????????
部分更不知怎么处理,请指教,高分相谢.
[color=red] “阿弥陀佛,无上医王,舍此不求,是谓痴狂。” “一句弥陀,阿伽陀药,舍此不服,是谓大错。” 南无阿弥陀佛......[/color]
i11usi0n
驱动牛犊
驱动牛犊
  • 注册日期2002-04-18
  • 最后登录2006-05-22
  • 粉丝0
  • 关注0
  • 积分81分
  • 威望10点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-07-17 14:53
在本站有一篇相关的文章,在\"专栏文章\"
gxjt
驱动老牛
驱动老牛
  • 注册日期2002-03-26
  • 最后登录2006-06-07
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-07-17 14:56
在本站有一篇相关的文章,在\"专栏文章\"

我看过,可就是不理解,你看懂了吗?
若能指教,一定重分奖励.
[color=red] “阿弥陀佛,无上医王,舍此不求,是谓痴狂。” “一句弥陀,阿伽陀药,舍此不服,是谓大错。” 南无阿弥陀佛......[/color]
i11usi0n
驱动牛犊
驱动牛犊
  • 注册日期2002-04-18
  • 最后登录2006-05-22
  • 粉丝0
  • 关注0
  • 积分81分
  • 威望10点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-07-17 15:06
你说的是地址和数据的输入吧,在KIrp中有writedestsource(具体记不清了),可以将应用层的数据通过irp放到里面,你读里面的数据写到端口就是了.
(一般端口的读写都用Buffer方式)
i11usi0n
驱动牛犊
驱动牛犊
  • 注册日期2002-04-18
  • 最后登录2006-05-22
  • 粉丝0
  • 关注0
  • 积分81分
  • 威望10点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-07-17 15:09
多找贴子看吧,本站上有很多关于并口的贴子,我也是新手

[编辑 -  7/17/02 by  i11usi0n]
gxjt
驱动老牛
驱动老牛
  • 注册日期2002-03-26
  • 最后登录2006-06-07
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-07-17 15:13
你说的是地址和数据的输入吧,在KIrp中有writedestsource(具体记不清了),可以将应用层的数据通过irp放到里面,你读里面的数据写到端口就是了.
(一般端口的读写都用Buffer方式)

好兄弟,你的并口驱动不是做好了吗,将源码Email给我参考参考吧,先奖你10分,收到后再奖40分如何?
[color=red] “阿弥陀佛,无上医王,舍此不求,是谓痴狂。” “一句弥陀,阿伽陀药,舍此不服,是谓大错。” 南无阿弥陀佛......[/color]
wangxdong
驱动小牛
驱动小牛
  • 注册日期2002-07-08
  • 最后登录2003-01-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-07-17 18:56
能否也给我一份?我也给分!
wangxdong@163.net
请多多指教!
gxjt
驱动老牛
驱动老牛
  • 注册日期2002-03-26
  • 最后登录2006-06-07
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-07-18 12:44
t << \"Entering Porttest1Device::Write, \" << I << EOL;
// TODO: Check the incoming request.  Replace \"FALSE\" in the following
// line with a check that returns TRUE if the request is not valid.
    if (FALSE)
{
// Invalid parameter in the Write request
I.Information() = 0;
return I.PnpComplete(this, STATUS_INVALID_PARAMETER);
}

// Always ok to write 0 elements.
if (I.WriteSize() == 0)
{
I.Information() = 0;
return I.PnpComplete(this, STATUS_SUCCESS);
}
NTSTATUS status = STATUS_SUCCESS;

KMemory Mem(I.Mdl()); // Declare a memory object
// Use the memory object to create a pointer to the caller\'s buffer
PUCHAR pBuffer = (PUCHAR) Mem.VirtualAddress();

ULONG   dwTotalSize = I.WriteSize(CURRENT);
ULONG   dwBytesSent = 0;

KIoRange   m_ParPortIos;
NTSTATUS status1 = m_ParPortIos.Initialize(
0x378,  // LPT1 Bus address
  TRUE,  //InCpuIoSpace
8,      // Device size
TRUE  // Map to system space
  );
if(status1!=STATUS_SUCCESS)
{
I.Information() = 0;
return I.PnpComplete(this, STATUS_SUCCESS);
}
#define CONTROL 2  //(37A)
#define ADDRESS 3  //(37B)
#define EDATA   4  //(37C)

    m_ParPortIos.outb(CONTROL,0x80);
    m_ParPortIos.outb(ADDRESS,PUCHAR(pBuffer),dwTotalSize);
dwBytesSent=dwTotalSize;

// TODO: If the write can be satisfied immediately, set the Information
// and Status fields now, then call NextIrp to complete this IRP
// and start processing the next IRP in the queue.

// TODO: If the device cannot accept all of the data yet, initiate a
// request to the physical device here, and defer the Information,
// Status, and NextIrp handling until the hardware indicates that
// the write is complete.  Typically, this might be handled in a
// DPC that is called after the hardware finishes transferring
// the data.

// TODO: To satisfy the write now, transfer data to the device
// from caller\'s buffer at \"pBuffer\".  Then, indicate how much
// data was transferred:

I.Information() = dwBytesSent;

return I.PnpComplete(this, status);
各位大虾,这样行不行啊
[color=red] “阿弥陀佛,无上医王,舍此不求,是谓痴狂。” “一句弥陀,阿伽陀药,舍此不服,是谓大错。” 南无阿弥陀佛......[/color]
wangxdong
驱动小牛
驱动小牛
  • 注册日期2002-07-08
  • 最后登录2003-01-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-07-18 17:12
我也想知道这样行不行,因为我想改成串口的读写。不知有没有人调试过这个程序?
请多多指教!
yuri69
驱动小牛
驱动小牛
  • 注册日期2002-07-12
  • 最后登录2005-12-31
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-07-20 15:49
兄弟,你这几条语句不应该放在这里

KIoRange m_ParPortIos;
NTSTATUS status1 = m_ParPortIos.Initialize(
0x378, // LPT1 Bus address
TRUE, //InCpuIoSpace
8, // Device size
TRUE // Map to system space
);
这怎么能够放在 Write()韩树中呢?应该放在OnStartDevice中分配一次就够了,否则每次写的时候都重新分配!

我不会停止对你的思念,就像呼吸一样,我不去特意的想,但是,只能屏息,而不可能停止
gxjt
驱动老牛
驱动老牛
  • 注册日期2002-03-26
  • 最后登录2006-06-07
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-07-22 09:56
兄弟,你这几条语句不应该放在这里

KIoRange m_ParPortIos;
NTSTATUS status1 = m_ParPortIos.Initialize(
0x378, // LPT1 Bus address
TRUE, //InCpuIoSpace
8, // Device size
TRUE // Map to system space
);
这怎么能够放在 Write()韩树中呢?应该放在OnStartDevice中分配一次就够了,否则每次写的时候都重新分配!

 

你说的有道理,谢谢!可惜没法给你分了,真不好意思.

[编辑 -  7/22/02 by  yunfangfan]
[color=red] “阿弥陀佛,无上医王,舍此不求,是谓痴狂。” “一句弥陀,阿伽陀药,舍此不服,是谓大错。” 南无阿弥陀佛......[/color]
游客

返回顶部