shjdriver
驱动牛犊
驱动牛犊
  • 注册日期2003-04-01
  • 最后登录2008-04-02
  • 粉丝0
  • 关注0
  • 积分277分
  • 威望30点
  • 贡献值0点
  • 好评度26点
  • 原创分0分
  • 专家分0分
阅读:1339回复:10

wdm上层与驱动程序通讯

楼主#
更多 发布于:2003-04-30 19:57
我编写了一测试程序(driverStdio wdm),目的通过上层应用程序DeviceIoControl(。。),将上层一缓冲区的内容传给下层,代码如下:但出现死机,望帮助解决。
char bufInput[512];
sprintf(bufInput,\"this is test of input\");
DeviceIoControl(hHello, 0x00077, bufInput, 22,bufOutput,sizeof(bufOutput),&nOutput, NULL);
驱动程序:
NTSTATUS DACSHJ1Device::DeviceControl(KIrp I)
{
NTSTATUS status;
   char *inputChar=new (NonPagedPool)char[1500];
char *writeDate;
const char* TEST=\"test ok\";
t << \"Entering DACSHJ1Device::Device Control, \" << I << EOL;
switch (I.IoctlCode())
{
case DACSHJ1_IOCTL_800:
status = DACSHJ1_IOCTL_800_Handler(I);
break;

case 0x00033://测试语句
            memcpy(inputChar,(PCHAR)I.IoctlBuffer(),22);//此条语句死机。
I.Information()=22;
t << \"I/O test \"<<inputChar<< EOL;
status=1;
break;

default://缺省情况下
// Unrecognized IOCTL request
status = STATUS_INVALID_PARAMETER;
break;
}

最新喜欢:

Luckysune7Luckys...
shjdriver
驱动牛犊
驱动牛犊
  • 注册日期2003-04-01
  • 最后登录2008-04-02
  • 粉丝0
  • 关注0
  • 积分277分
  • 威望30点
  • 贡献值0点
  • 好评度26点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-04-30 19:58
其它相关的代码如下:
#define DACSHJ1_IOCTL_800 CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800,METHOD_BUFFERED , FILE_ANY_ACCESS)

DACSHJ1Device * pDevice = new (
static_cast<PCWSTR>(KUnitizedName(L\"DACSHJ1Device\", m_Unit)),
FILE_DEVICE_UNKNOWN,
NULL,
0,
DO_BUFFERED_IO
| DO_POWER_PAGABLE
)
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2003-04-30 20:25
DeviceIoControl(hHello, 0x00077, bufInput, 22,bufOutput,sizeof(bufOutput),&nOutput, NULL);
这个改成
DeviceIoControl(hHello, 0x00077, bufInput, 512/*or sizeof(bufInput)*/,bufOutput,sizeof(bufOutput),&nOutput, NULL);

memcpy(inputChar,(PCHAR)I.IoctlBuffer(),22);//此条语句死机。
改成
memcpy(inputChar,(PCHAR)I.IoctlBuffer(),I.IoctlInputBufferSize(CURRENT));看看。
不过memcpy在这里用有点可疑。

CHAR *inputChar;
inputChar = I.IoctlBuffer();
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-04-30 21:50
DeviceIoControl(hHello, 0x00077, bufInput, 22,bufOutput,sizeof(bufOutput),&nOutput, NULL);
这个改成
DeviceIoControl(hHello, 0x00077, bufInput, 512/*or sizeof(bufInput)*/,bufOutput,sizeof(bufOutput),&nOutput, NULL);

memcpy(inputChar,(PCHAR)I.IoctlBuffer(),22);//此条语句死机。
改成
memcpy(inputChar,(PCHAR)I.IoctlBuffer(),I.IoctlInputBufferSize(CURRENT));看看。
不过memcpy在这里用有点可疑。

CHAR *inputChar;
inputChar = I.IoctlBuffer();
 


 :D
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2003-04-30 23:26


 :D

你傻笑什么啊?
shjdriver
驱动牛犊
驱动牛犊
  • 注册日期2003-04-01
  • 最后登录2008-04-02
  • 粉丝0
  • 关注0
  • 积分277分
  • 威望30点
  • 贡献值0点
  • 好评度26点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-05-01 08:56
按照您的修改后,还是死机,如果可能请给我一示例,用于通过上层应用程序DeviceIoControl(。。),将上层一缓冲区的内容传给下层。将不胜感激。
Luckysune7
驱动牛犊
驱动牛犊
  • 注册日期2003-04-08
  • 最后登录2003-08-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-05-16 09:48
gz
帮忙up
AthlonXP
驱动小牛
驱动小牛
  • 注册日期2003-05-11
  • 最后登录2010-01-20
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-05-16 14:08
1、将memcpy换成RtlCopyMemory试试

2、困惑: DeviceIoControl里面的code到底是到底是0x33还是0x77?不是0x800以下的code都保留给微软用吗?? :(
AthlonXP是个好人,他一生没有欺压过同侪,没有背叛过朋友。从小到大,他都是个好孩子,没有出过什么差错,没有让家人师长担过心。虽然用一句时髦的话,他不善于"推销"自己,但是做学问扎扎实实,不会投机取巧;做工作也是一步一个脚印,不会敷衍塞责。他虽然是个大烟枪,偶尔也喝喝酒,但是没有什么见不得人的恶习。他花钱虽然不特别大方,可是也不吝啬。许多不如他的人,或幸或不幸,一般的也都成了家。可是为什么MM不喜欢他呢??
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2003-05-16 14:24
1、将memcpy换成RtlCopyMemory试试

2、困惑: DeviceIoControl里面的code到底是到底是0x33还是0x77?不是0x800以下的code都保留给微软用吗?? :(

就是io code的问题,楼主已经解决,但是没有在这说明。
AthlonXP
驱动小牛
驱动小牛
  • 注册日期2003-05-11
  • 最后登录2010-01-20
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-05-16 14:28
[quote]1、将memcpy换成RtlCopyMemory试试

2、困惑: DeviceIoControl里面的code到底是到底是0x33还是0x77?不是0x800以下的code都保留给微软用吗?? :(

就是io code的问题,楼主已经解决,但是没有在这说明。 [/quote]

呵呵,知道了,我说怎么我运行了几遍都没有问题。最好io code还是仿照ds的命名方式,用DACSHJ1DEVICE_IOCTL_801、DACSHJ1DEVICE_IOCTL_800形式比较好,不容易出错
AthlonXP是个好人,他一生没有欺压过同侪,没有背叛过朋友。从小到大,他都是个好孩子,没有出过什么差错,没有让家人师长担过心。虽然用一句时髦的话,他不善于"推销"自己,但是做学问扎扎实实,不会投机取巧;做工作也是一步一个脚印,不会敷衍塞责。他虽然是个大烟枪,偶尔也喝喝酒,但是没有什么见不得人的恶习。他花钱虽然不特别大方,可是也不吝啬。许多不如他的人,或幸或不幸,一般的也都成了家。可是为什么MM不喜欢他呢??
AthlonXP
驱动小牛
驱动小牛
  • 注册日期2003-05-11
  • 最后登录2010-01-20
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-05-16 14:30
第一次用DS,好像是觉得不难啊,呵呵,几乎没有什么要自己修改的地方 :D :D
AthlonXP是个好人,他一生没有欺压过同侪,没有背叛过朋友。从小到大,他都是个好孩子,没有出过什么差错,没有让家人师长担过心。虽然用一句时髦的话,他不善于"推销"自己,但是做学问扎扎实实,不会投机取巧;做工作也是一步一个脚印,不会敷衍塞责。他虽然是个大烟枪,偶尔也喝喝酒,但是没有什么见不得人的恶习。他花钱虽然不特别大方,可是也不吝啬。许多不如他的人,或幸或不幸,一般的也都成了家。可是为什么MM不喜欢他呢??
游客

返回顶部