亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usbio.c

?? microsoft usb開發包,能夠給大家一個很好的參考.
?? C
?? 第 1 頁 / 共 2 頁
字號:

--*/

    DWORD DeviceObject;
    PDCB Dcb;
    PIOR Ior;
    PUSBDDB Ddb;
    SCSI_REQUEST_BLOCK *Srb;
    PIOPACKET IoPacket;

    USBSTOR_DebugPrintf(DBG_MAX, ("Enter USBSTOR_StartIo()\n"));

    DeviceObject = (DWORD)((pDCB_cd_entry)Iop->IOP_calldown_ptr)->DCB_cd_ddb;
    Dcb = (PDCB)Iop->IOP_physical_dcb;
    Ddb = (PUSBDDB)((pDCB_cd_entry)Iop->IOP_calldown_ptr)->DCB_cd_ddb;
    Ior = &(Iop->IOP_ior);
    Srb = (PSCSI_REQUEST_BLOCK)Iop->IOP_srb;

    // Get address of IOPACKET that we send to WDM driver
    IoPacket = &(Ddb->IoPacket);

    USBSTOR_DebugPrintf(DBG_MAX, ("USBSTOR_StartIo - IOP=%x, IOPACKET=%x\n", Iop, IoPacket));

    if (Ior->IOR_flags & IORF_SRB_VALID)
    {
        USBSTOR_DebugPrintf(DBG_MAX, ("Calling WDM driver\n"));

        Srb->DataBuffer = (PVOID)Ior->IOR_buffer_ptr;

        // Populate the IOPACKET structure
        IoPacket->Fdo = Ddb->Fdo;
        IoPacket->Cdb = Srb->Cdb;
        IoPacket->CdbLength = Srb->CdbLength;
        IoPacket->DataBuffer = Srb->DataBuffer;
        IoPacket->DataLength = Srb->DataTransferLength;
        IoPacket->Iop = (PVOID)Iop;
        IoPacket->Flags = 0;
        IoPacket->Status = IO_STATUS_PENDING;
        IoPacket->BlockSize = Dcb->DCB_bdd.DCB_apparent_blk_size;

        if (Ior->IOR_flags & IORF_SCATTER_GATHER)
            IoPacket->Flags |= IO_FLAGS_SCATTER_GATHER;

        if (Srb->SrbFlags & SRB_FLAGS_DATA_IN)
            IoPacket->Flags |= IO_FLAGS_DATA_IN;
        else if (Srb->SrbFlags & SRB_FLAGS_DATA_OUT)
            IoPacket->Flags |= IO_FLAGS_DATA_OUT;

        // Call WDM driver
        pfnStartRequest(IoPacket);
    }
    else
    {
        USBSTOR_DebugPrintf(DBG_DEFAULT, ("IOP with no SRB, IOR_func=%x\n",
                                        Ior->IOR_func));

        // We only handle request with valid SRBs
        Ior->IOR_status = IORS_INVALID_COMMAND;
        USBSTOR_CompleteIOP(Iop);
    }
}


void _stdcall
USBSTOR_CompleteRequest(
    PIOPACKET IoPacket
    )
{
/*++

Routine Description:

    I/O completion handler for the USB device.

Arguments:

    IoPacket - IOPACKET containing request info

Return Value:

    None

--*/

    PSCSI_REQUEST_BLOCK Srb;
    PUSBDDB Ddb;
    int i;
    pIOP Iop;


    USBSTOR_DebugPrintf(DBG_MAX, ("Enter USBSTOR_CompleteRequest\n"));

    Iop = (pIOP)IoPacket->Iop;
    Ddb = (PUSBDDB)((pDCB_cd_entry)Iop->IOP_calldown_ptr)->DCB_cd_ddb;
    Srb = (PSCSI_REQUEST_BLOCK)Iop->IOP_srb;

    USBSTOR_DebugPrintf(DBG_MAX, ("USBSTOR_CompleteRequest - IOP=%x, IOPACKET=%x\n", Iop, IoPacket));

    // Are we completing a REQUEST SENSE command?
    if (Ddb->Flags & USBDDB_FLAG_ERROR)
    {
        USBSTOR_DebugPrintf(DBG_MAX, ("REQUEST SENSE complete\n"));

        if (IoPacket->Status == IO_STATUS_DEVICE_ERROR)
        {
            USBSTOR_DebugPrintf(DBG_MIN, ("REQUEST SENSE Failed!\n"));

            // Our request sense failed, so just return error without
            // sense data.
            Srb->SrbStatus = SRB_STATUS_ERROR;
            Trap();
        }
        else
        if (IoPacket->Status == IO_STATUS_SUCCESS)
        {
            //BUGBUG - put in debug code to dump sense info

            Srb->SrbStatus = SRB_STATUS_ERROR | SRB_STATUS_AUTOSENSE_VALID;
        }

        Ddb->Flags &= ~USBDDB_FLAG_ERROR;
    }

    // Normal I/O request
    else switch (IoPacket->Status)
    {
        case IO_STATUS_DEVICE_ERROR:
            USBSTOR_DebugPrintf(DBG_DEFAULT, ("I/O request failed\n"));

            // Call error handler for REQUEST SENSE handling
            USBSTOR_ErrorHandler(Iop);
            return;

        case IO_STATUS_OUT_OF_MEMORY:
            USBSTOR_DebugPrintf(DBG_MIN, ("I/O request failed with memory error\n"));

            Srb->SrbStatus = SRB_STATUS_ERROR;
            Trap();
            break;

        case IO_STATUS_SUCCESS:
            USBSTOR_DebugPrintf(DBG_MAX, ("I/O request succeeded\n"));

            // I/O request succeeded
            Srb->SrbStatus = SRB_STATUS_SUCCESS;
            break;

        default:
            USBSTOR_DebugPrintf(DBG_MIN, ("Unknown error occurred!\n"));

            // This should never happen
            Srb->SrbStatus = SRB_STATUS_ERROR;
            Trap();
    }

    // Complete the request
    USBSTOR_CompleteIOP(Iop);
}


VOID
USBSTOR_ErrorHandler(
    pIOP Iop
    )
{
/*++

Routine Description:

    Error handler for failed I/O requests.  Will send a REQUEST SENSE
    command to the device to find out why it failed, if SRB indicates
    autosense.

Arguments:

    Iop - IOP for failed request

Return Value:

    None

--*/

    SCSI_REQUEST_BLOCK *Srb;
    PUSBDDB Ddb;
    PIOPACKET IoPacket;

    USBSTOR_DebugPrintf(DBG_DEFAULT, ("Enter USBSTOR_ErrorHandler()\n"));

    Srb = (PSCSI_REQUEST_BLOCK)Iop->IOP_srb;
    Ddb = (PUSBDDB)((pDCB_cd_entry)Iop->IOP_calldown_ptr)->DCB_cd_ddb;

    if (Srb->SrbFlags & SRB_FLAGS_DISABLE_AUTOSENSE)
    {
        // Client does not want sense data, so just set error status
        // and complete the request.
        Srb->SrbStatus = SRB_STATUS_ERROR;

        // Complete the request
        USBSTOR_CompleteIOP(Iop);
        return;
    }

    if ((NULL == Srb->SenseInfoBuffer) || (0 == Srb->SenseInfoBufferLength))
    {
        USBSTOR_DebugPrintf(DBG_MIN, ("Invalid Sense Info buffer\n"));

        // Invalid Sense Info buffer without the
        // SRB_FLAGS_DISABLE_AUTOSENSE flag.  This shouldn't happen.

        Srb->SrbStatus = SRB_STATUS_ERROR;
        Trap();

        // Complete the request
        USBSTOR_CompleteIOP(Iop);
        return;
    }

    // Indicate that we are processing an error
    Ddb->Flags |= USBDDB_FLAG_ERROR;

    // Build a REQUEST SENSE CDB
    Ddb->Cdb[0] =  SCSIOP_REQUEST_SENSE;
    Ddb->Cdb[1] =  0x00;
    Ddb->Cdb[2] =  0x00;
    Ddb->Cdb[3] =  0x00;
    Ddb->Cdb[4] =  Srb->SenseInfoBufferLength;
    Ddb->Cdb[5] =  0x00;
    Ddb->Cdb[6] =  0x00;
    Ddb->Cdb[7] =  0x00;
    Ddb->Cdb[8] =  0x00;
    Ddb->Cdb[9] =  0x00;
    Ddb->Cdb[10] = 0x00;
    Ddb->Cdb[11] = 0x00;

    IoPacket = &(Ddb->IoPacket);

    // Populate the IOPACKET structure sent to our WDM driver
    IoPacket->Fdo = Ddb->Fdo;
    IoPacket->Cdb = Ddb->Cdb;
    IoPacket->CdbLength = 12;
    IoPacket->DataBuffer = Srb->SenseInfoBuffer;
    IoPacket->DataLength = Srb->SenseInfoBufferLength;
    IoPacket->Iop = (PVOID)Iop;
    IoPacket->Flags = IO_FLAGS_DATA_IN;
    IoPacket->Status = IO_STATUS_PENDING;
    IoPacket->BlockSize = 512;

    // Call the WDM driver
    pfnStartRequest(IoPacket);
}



VOID
USBSTOR_CompleteIOP(
    pIOP Iop
    )
{
/*++

Routine Description:

    Completes IOP request

Arguments:

    Iop - IOP to complete

Return Value:

    None

--*/

    IOP_callback_entry * IopCB;
    pIOP NextIop;
    PUSBDDB Ddb;
    PDCB Dcb;

    USBSTOR_DebugPrintf(DBG_MAX, ("Enter USBSTOR_CompleteIOP\n"));

    Ddb = (PUSBDDB)((pDCB_cd_entry)Iop->IOP_calldown_ptr)->DCB_cd_ddb;
    Dcb = (PDCB)Iop->IOP_physical_dcb;

    // Find address of first callback handler
    Iop->IOP_callback_ptr -= sizeof (IOP_callback_entry);
    IopCB = (IOP_callback_entry *)(Iop->IOP_callback_ptr);

    // Complete the IOP by calling the first entry in the callback chain
    SaveEbx();
    IOPCallBack(IopCB, Iop);
    RestoreEbx();

    // We are no longer busy
    Ddb->Flags &= ~USBDDB_FLAG_BUSY;
        
    // See if there are any queued requests
    NextIop = ILBDequeueIop(Dcb);

    if (NextIop)
    {
        Ddb->Flags |= USBDDB_FLAG_BUSY;

        // There is a queued IOP, so go process it
        USBSTOR_StartIo(NextIop);
    }
}

        

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人动漫视频在线| 日韩综合小视频| 亚洲精品在线观看网站| 欧美日韩国产片| 欧美怡红院视频| 94色蜜桃网一区二区三区| 成人av在线网| 91麻豆文化传媒在线观看| 99re这里只有精品视频首页| 成人免费视频视频| 99久久综合色| 91亚洲永久精品| 色综合av在线| 538prom精品视频线放| 91精品国产麻豆| 国产亚洲污的网站| 国产精品免费视频一区| 亚洲一区二区中文在线| 视频一区二区三区入口| 免费看欧美女人艹b| 韩国三级在线一区| 99国产精品国产精品久久| 91国模大尺度私拍在线视频| 91精品国产综合久久久久久| 久久精品人人做人人爽人人| 中文字幕五月欧美| 亚洲18女电影在线观看| 国产精品自在在线| 一本一道波多野结衣一区二区| 欧美日韩精品一区二区三区蜜桃| 欧美成人猛片aaaaaaa| 国产精品久久久久久亚洲伦| 亚洲午夜精品一区二区三区他趣| 日韩高清不卡一区二区三区| 国产精品一区二区x88av| 色av一区二区| 久久精品一区八戒影视| 亚洲成人av一区| 国产精品1024| 5566中文字幕一区二区电影| 成人免费一区二区三区在线观看| 午夜激情一区二区| 菠萝蜜视频在线观看一区| 欧美肥妇毛茸茸| 国产精品盗摄一区二区三区| 日本sm残虐另类| 色88888久久久久久影院野外| 日韩色视频在线观看| 亚洲另类一区二区| 国产毛片精品视频| 欧美一级黄色片| 依依成人精品视频| 成人av免费观看| 精品电影一区二区| 日韩专区中文字幕一区二区| 99久久亚洲一区二区三区青草| 欧美va天堂va视频va在线| 亚洲自拍偷拍欧美| 色哟哟国产精品| 成人欧美一区二区三区小说| 国产成人精品1024| 精品国产乱码久久| 男人操女人的视频在线观看欧美| 色综合中文字幕国产 | 婷婷开心久久网| av一二三不卡影片| 亚洲国产精品精华液ab| 国产毛片精品一区| 久久精品一区二区三区不卡| 国产一区二区在线电影| 精品国产不卡一区二区三区| 免费成人结看片| 91精品国产综合久久精品app| 一区二区三区在线影院| 99精品国产热久久91蜜凸| 国产精品嫩草影院av蜜臀| 国产精品18久久久| 国产精品福利一区| 91碰在线视频| 亚洲一区二区三区四区在线 | 欧美日韩精品一区二区三区| 一区二区三区免费网站| 日本韩国欧美一区| 亚洲一区二区三区在线看| 欧美怡红院视频| 日韩精品午夜视频| 欧美一级电影网站| 国产一区激情在线| 国产精品欧美久久久久一区二区 | 午夜亚洲国产au精品一区二区| 欧美在线不卡一区| 日本中文字幕一区二区视频| 精品三级在线观看| 成人中文字幕合集| 一区二区三区成人在线视频| 欧美视频你懂的| 蜜桃视频在线观看一区| 久久精品免视看| 91网站视频在线观看| 香蕉久久夜色精品国产使用方法| 欧美一区国产二区| 成人一级片网址| 亚洲一区中文日韩| 精品国产髙清在线看国产毛片| 国产精品伊人色| 亚洲成人动漫在线观看| 精品国精品国产尤物美女| www.在线成人| 奇米精品一区二区三区在线观看| 久久久91精品国产一区二区三区| 色中色一区二区| 国产剧情一区在线| 亚洲一卡二卡三卡四卡无卡久久| 91精品国产综合久久国产大片| 久久99精品久久久久| 亚洲另类一区二区| 欧美国产精品一区二区| 欧美日韩免费观看一区二区三区 | 久久精品国产77777蜜臀| 国产精品嫩草影院av蜜臀| 91精品国产综合久久久蜜臀粉嫩 | 亚洲免费成人av| 日韩欧美123| 91国产视频在线观看| 国产91精品精华液一区二区三区| 午夜激情综合网| 一区二区三区视频在线观看| 国产欧美精品一区二区色综合 | 欧美国产日韩a欧美在线观看| 欧美日韩国产高清一区| 成人免费毛片高清视频| 精品在线播放午夜| 日韩成人伦理电影在线观看| 自拍视频在线观看一区二区| 久久综合色之久久综合| 91精品国产综合久久久蜜臀图片 | 久久蜜桃av一区二区天堂| 欧美高清性hdvideosex| 91成人看片片| 色综合色狠狠天天综合色| av亚洲精华国产精华精| 国产高清精品久久久久| 国产乱码精品一区二区三| 久久99精品视频| 国产中文字幕精品| 韩国女主播一区二区三区| 精品一区二区三区欧美| 国产在线视频一区二区三区| 国内精品免费在线观看| 国产在线视频一区二区| 国产一区二区导航在线播放| 狠狠色综合播放一区二区| 国产一区二区0| 国产一区二区毛片| 国产成人一区在线| 高清成人在线观看| a在线欧美一区| 99久久精品费精品国产一区二区| 成人av网站在线| 在线观看精品一区| 欧美性淫爽ww久久久久无| 欧美性视频一区二区三区| 欧美裸体一区二区三区| 日韩一级片在线观看| 欧美精品一区二区三区久久久| 精品久久久久久综合日本欧美| 2019国产精品| 亚洲视频小说图片| 亚洲国产美国国产综合一区二区| 亚洲一区在线观看网站| 奇米亚洲午夜久久精品| 国产精品1024久久| 欧美视频在线观看一区| 欧美一区二视频| 欧美激情一二三区| 一区二区三区国产精华| 日韩高清在线电影| 国产高清精品在线| 欧美色电影在线| 精品国产青草久久久久福利| 中文乱码免费一区二区| 亚洲超丰满肉感bbw| 激情成人综合网| 色综合久久久久| 精品国产免费一区二区三区四区| 亚洲国产精品传媒在线观看| 亚洲第一精品在线| 国产99久久久国产精品潘金 | 五月天激情综合| 国产美女娇喘av呻吟久久| 在线亚洲精品福利网址导航| 日韩你懂的在线播放| 中文字幕一区二区三区不卡| 日韩和的一区二区| aaa欧美色吧激情视频| 日韩三级在线观看| 亚洲精品成人精品456| 国内精品免费在线观看| 欧美肥胖老妇做爰| 亚洲精品视频一区|