hnsyz
驱动牛犊
驱动牛犊
  • 注册日期2001-12-31
  • 最后登录2010-04-20
  • 粉丝1
  • 关注0
  • 积分108分
  • 威望259点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
阅读:1213回复:3

错误返回码

楼主#
更多 发布于:2002-11-30 21:53
我用NT 驱动加载模式启动一个驱动,
但当我用CONTROLSERVICE()停止它的时候,
返回错误代码997, 查MSDN是ERROR_IO_PENDING.
但.. 我的哪个驱动是什么也没做呀.
看名字估计是IO 访问未完成,
谁知道引起这种错误是什么?
学习,交流
fingerp
驱动牛犊
驱动牛犊
  • 注册日期2002-03-31
  • 最后登录2009-01-20
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-12-01 10:59
可能没有写Unload例程吧。再有就是可能还有程序正打开设备句柄或没调IoCompleteRequest.
有些问题实在伤脑筋......
hnsyz
驱动牛犊
驱动牛犊
  • 注册日期2001-12-31
  • 最后登录2010-04-20
  • 粉丝1
  • 关注0
  • 积分108分
  • 威望259点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-12-01 16:12
UNLOAD() 已经DISPATCH.
IRP 已经完成请求.
学习,交流
ydyuse
驱动老牛
驱动老牛
  • 注册日期2002-07-25
  • 最后登录2005-03-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-12-02 09:14
具体错误可能需要你去确定,这段CODE参考一下:
HANDLE  IntDeviceHdle = INVALID_HANDLE_VALUE;
DWORD   dwError;
UINT    uStatus = 0;
DWORD   dwByteCount;
DWORD   dwIndex = 0;
BOOL    bRet = TRUE;

GetArrayInteruptEvent(ArrayHdleEvent, &nbEventHdl);

// Initialize interrupt register with the current value.
while(TRUE)
{
    if (IntDeviceHdle != INVALID_HANDLE_VALUE)
    {
        bRet = DeviceIoControl( (HANDLE)IntDeviceHdle,
           (DWORD) IOCTL_WAIT_ON_DEVICE_EVENT,
            NULL,
            0,
            interInfo[dwIndex].byInterruptData,
            sizeof(BYTE)*PACKET_SIZE,
            &dwError,
            &interInfo[dwIndex].overlapped);
    }
//////////////////////////////
    if ((bRet) || (!bRet && GetLastError()==ERROR_IO_PENDING))
    {
        dwIndex = WaitForMultipleObjects(nbEventHdl,
            ArrayHdleEvent,
            FALSE,
            INFINITE);
        // the event came from a device
        if ((dwIndex >= 0) & (dwIndex < nbEventHdl-1))
        {
            IntDeviceHdle = GetInterruptDeviceHdle(ArrayHdleEvent[dwIndex]);
            if (IntDeviceHdle != INVALID_HANDLE_VALUE)
            {
                GetOverlappedResult(IntDeviceHdle, &interInfo[dwIndex].overlapped, &dwByteCount, FALSE);
                Debugs(temp, \"We received an interrupt from 0x%lX\", IntDeviceHdle);
                ExecuteActionOnInterrupt(IntDeviceHdle, interInfo[dwIndex].byInterruptData);
            }
            
生命驱动,活力无限!
游客

返回顶部