limee
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2006-07-25
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:961回复:3

请教一段代码

楼主#
更多 发布于:2005-03-11 16:26
摘自武安河的CharSample的那个例子,带波浪线的那行
为什么要赋一个2的值给I.Information()?
                                        
 NTSTATUS CharSampleDevice::DeviceControl(KIrp I)
{
 NTSTATUS status;
 CHAR n,c[]=\"零一二三四五六七八九\";
 T<<\"CharSampleDevice::DeviceControl\\n\";

 switch(I.IoctlCode())
{
  case  CHARSAMPLE_ioctl_800:
        N=*(CHAR*)I.IoctlBuffer();
        if ((n>=\'0\')&&(n<=\'9\'))
        {
           n-=\'0\';
           strncpy((PCHAR)I.IoctlBuffer(),&c[n*2],2);
           I.Information()=2;
           ~~~~~~~~~~~~~~~~~~
           请教这行代码是什么意思?
           status=STATUS_SUCCESS;
        }
        else
            ......
fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-03-11 16:39
完整的例子没有看过
I.Information() = 2;
意思应该是返回的buffer的长度,也就是strncpy里的参数2。
在交流中学习。。。
limee
驱动牛犊
驱动牛犊
  • 注册日期2004-03-02
  • 最后登录2006-07-25
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-03-11 17:16
你能根据驱动给出应用程序的代码吗?
我只有书,没有光盘

完整的例子没有看过
I.Information() = 2;
意思应该是返回的buffer的长度,也就是strncpy里的参数2。
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地板#
发布于:2005-03-11 20:05
完整的例子没有看过
I.Information() = 2;
意思应该是返回的buffer的长度,也就是strncpy里的参数2。

就是放到IOSTATUS.INFORMATION里的数据长度,系统会把该长度的数据拷贝到RING3的.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
游客

返回顶部