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

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

?? usbio.c

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

Copyright (c) 1999 Microsoft Corporation

Module Name:

    UsbIo.c 

Abstract:

    IOS port driver for USB LS-120 drive
    I/O module

Environment:

    kernel mode only

Notes:

  THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
  KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
  PURPOSE.

  Copyright (c) 1999 Microsoft Corporation.  All Rights Reserved.


Revision History:

    03/19/99: MRB  Original

--*/

#define WANTVXDWRAPS
#define _NTDEF_

#include <debug.h>
#include <vxdwraps.h>

#include <srb.h>
#include <scsi.h>
#include <aep.h>
#include <drp.h>
#include <isp.h>
#include <srb.h>
#include <ior.h>
#include <iop.h>
#include <dcb.h>
#include <ilb.h>
#include "usbstor.h"
#include "usbdebug.h"


// NOTE: This module cannot include VMM.H, due to conflicts in base
// definitions that occur when SCSI.H is included.  Any calls to
// VMM or VxD services should be made from another source file.


// Indicate locked code and data.  We can't use macros defined in VMM.H,
// so we use the same pragmas defined in VMM.H for locked code and data.
#pragma code_seg("_LTEXT", "LCODE")
#pragma data_seg("_LDATA", "LCODE")

// IOS ILB function type definitions
typedef PVOID (__cdecl *ILB_internal_request_func)( struct ISP * );
typedef PVOID (__cdecl *ILB_enqueue_iop_func)( pIOP, PDCB);
typedef pIOP (__cdecl *ILB_dequeue_iop_func)( PDCB);


USHORT
USBSTOR_Device_Inquiry(
    PAEP_inquiry_device Aep
    )
{
/*++

Routine Description:

    AEP_DEVICE_INQUIRY handler.  Builds INQUIRY SRB and sends it to
    our USB device to find out what device is attached.  INQUIRY data
    is copied into the DCB.

Arguments:

    None

Return Value:

    AEP_SUCCESS if INQUIRY data returned,
    AEP_NO_INQ_DATA otherwise

--*/


    PDCB                Dcb;
    pIOP                Iop;
    PIOR                Ior;
    ISP_IOP_alloc       IOPCreateISP;
    ISP_mem_alloc       AllocISP;
    ULONG               IOPLength;
    PSCSI_REQUEST_BLOCK Srb;                       
    PCDB                Cdb;
    PINQUIRYDATA        pInquiryBuf;
    USHORT              AepResult=AEP_SUCCESS;
	    
	
    USBSTOR_DebugPrintf(DBG_DEFAULT, ("Device Inquiry\n"));

    // Allocate an IOP for our INQUIRY command
    IOPLength = sizeof( IOP ) +
                sizeof( SCSI_REQUEST_BLOCK ) +
                sizeof( INQUIRYDATA );

    ((PISP)&IOPCreateISP)->ISP_func = ISP_CREATE_IOP;
    IOPCreateISP.ISP_IOP_size       = IOPLength;
    IOPCreateISP.ISP_delta_to_ior   = (ULONG)&(((pIOP)0L)->IOP_ior);
    IOPCreateISP.ISP_i_c_flags      = ISP_M_FL_MUST_SUCCEED;

    // Call IOS
    ILBService(&IOPCreateISP);

    // Our allocated IOP memory will be formatted like this:
    // ---------------------------
    // |  IOP/IOR                |
    // ---------------------------
    // |  SRB                    |
    // ---------------------------
    // |  INQUIRY DATA BUFFER    |
    // ---------------------------

    //
    // Build our I/O request
    //
    Iop = (pIOP)(PVOID)IOPCreateISP.ISP_IOP_ptr;
    Ior = (PIOR)&(Iop->IOP_ior);
    Srb = (SCSI_REQUEST_BLOCK *)(Iop + 1);
    Dcb = (PDCB)Aep->AEP_i_d_dcb;

    pInquiryBuf = (PINQUIRYDATA) (((PCHAR)Iop)+ IOPLength - sizeof(INQUIRYDATA));

    Iop->IOP_original_dcb = Iop->IOP_physical_dcb = (ULONG)Dcb;

    Iop->IOP_srb = (ULONG)Srb;

    Ior->IOR_func = IOR_SCSI_PASS_THROUGH;
    Ior->IOR_req_vol_handle = 0L;
    Ior->IOR_flags = IORF_SYNC_COMMAND | 
                        IORF_CHAR_COMMAND |
                        IORF_VERSION_002 | 
                        IORF_SRB_VALID | 
                        IORF_BYPASS_VOLTRK |
                        IORF_INHIBIT_GEOM_RECOMPUTE;

    Ior->IOR_buffer_ptr = (ULONG) pInquiryBuf;
    Ior->IOR_xfer_count = sizeof( INQUIRYDATA );

    Ior->IOR_sgd_lin_phys = (ULONG)0;
    Ior->IOR_next = 0L;     

    Srb->Length = sizeof( SCSI_REQUEST_BLOCK );
    Srb->TimeOutValue = 30; 
    Srb->CdbLength = 6;

    // We won't do a REQUEST SENSE if the INQUIRY command fails,
    // since we will always fail on any error that occurs for
    // INQUIRY.
    Srb->SenseInfoBuffer = NULL;

    Srb->SrbFlags = SRB_FLAGS_DATA_IN |
                    SRB_FLAGS_DISABLE_AUTOSENSE;

    Srb->DataBuffer = (PVOID) Ior->IOR_buffer_ptr;
    Srb->DataTransferLength = sizeof( INQUIRYDATA );
    Srb->PathId = Dcb->DCB_bus_number;
    Srb->TargetId = Dcb->DCB_scsi_target_id;
    Srb->Lun = Dcb->DCB_scsi_lun;
    Srb->Function = SRB_FUNCTION_EXECUTE_SCSI;
    Srb->SrbExtension = (PCHAR)Srb;

    // Setup INQUIRY CDB
    Cdb = (PCDB)Srb->Cdb;
    Cdb->CDB6INQUIRY.OperationCode = SCSIOP_INQUIRY;
    Cdb->CDB6INQUIRY.LogicalUnitNumber = Srb->Lun;
    Cdb->CDB6INQUIRY.Reserved1 = 0;
    Cdb->CDB6INQUIRY.AllocationLength = INQUIRYDATABUFFERSIZE;
    Cdb->CDB6INQUIRY.PageCode = 0;
    Cdb->CDB6INQUIRY.IReserved = 0;
    Cdb->CDB6INQUIRY.Control = 0;


    // Call IOS to fill in SG descriptors, etc.
    ILBCriteria(Iop);

    // Submit request to IOS 
    ILBRequest(Iop, Dcb);

    if( SRB_STATUS( Srb->SrbStatus ) == SRB_STATUS_SUCCESS ||
        SRB_STATUS( Srb->SrbStatus ) == SRB_STATUS_DATA_OVERRUN )
    {
        USBSTOR_DebugPrintf(DBG_DEFAULT, ("INQUIRY succeeded\n"));

        // Copy INQUIRY data into the DCB.  It is very important
        // that the INQUIRY Peripheral Device Type field be
        // correct, as this is what IOS uses to determine what
        // kind of device has been enumerated (this is true for
        // all bus types, including SCSI, IDE, ATAPI).
        _lmemcpy( (PCHAR)(Dcb->DCB_inquiry_flags),
                  (PCHAR)pInquiryBuf,
                  sizeof( Dcb->DCB_inquiry_flags ) +
                  sizeof( Dcb->DCB_vendor_id ) +
                  sizeof( Dcb->DCB_product_id ) +
                  sizeof( Dcb->DCB_rev_level ));
    } 
    else
    {
        USBSTOR_DebugPrintf(DBG_MIN, ("No INQUIRY data found!\n"));

        AepResult = AEP_NO_INQ_DATA;
    }


    // Free our IOP
    ((PISP)&AllocISP)->ISP_func  = ISP_DEALLOC_MEM;
    ((PISP_mem_dealloc)&AllocISP)->ISP_mem_ptr_da = (ULONG)Iop;
    ((ILB_internal_request_func)(USBSTOR_Ilb.ILB_service_rtn))((PISP)&AllocISP);

    return AepResult;
}



void
USBSTOR_Request(
    pIOP piop
    )
{
/*++

Routine Description:

    I/O request handler for the USB device.

Arguments:

    piop - I/O Packet containing request information

Return Value:

    None

--*/

    DWORD DeviceObject;
    PDCB Dcb;
    pIOP Iop;
    PIOR Ior;
    PUSBDDB Ddb;

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

    DeviceObject = (DWORD)((pDCB_cd_entry)piop->IOP_calldown_ptr)->DCB_cd_ddb;
    Dcb = (PDCB)piop->IOP_physical_dcb;
    Ddb = (PUSBDDB)((pDCB_cd_entry)piop->IOP_calldown_ptr)->DCB_cd_ddb;

    // Put the IOP on the queue for this DCB
    ILBEnqueueIop(piop, Dcb);

    //Need to handle busy case
    if (Ddb->Flags & USBDDB_FLAG_BUSY)
    {
        USBSTOR_DebugPrintf(DBG_MAX, ("Device Busy!!\n"));

        // Device is already busy, so just return.  IOP will be
        // dequeued and processed after current request completes
        return;
    }

    // Mark this device as now busy
    Ddb->Flags |= USBDDB_FLAG_BUSY;

    // Device is not busy, so get next IOP for processing
    Iop = ILBDequeueIop(Dcb);

    if (Iop)
        USBSTOR_StartIo(Iop);
    else
    {
        Trap(); // This should never happen
        Ddb->Flags &= ~USBDDB_FLAG_BUSY;
    }
}


VOID
USBSTOR_StartIo(
    pIOP Iop
    )
{
/*++

Routine Description:

    Function that calls WDM driver to initiate I/O transaction.

Arguments:

    Iop - Dequeued IOP for next request.

Return Value:

    None

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人先锋电影| 一级做a爱片久久| 日韩午夜小视频| 欧美精品在线一区二区三区| 色婷婷综合激情| 91亚洲精华国产精华精华液| 成人黄色av电影| caoporen国产精品视频| 99r国产精品| 91国偷自产一区二区三区成为亚洲经典 | 国产成人精品免费看| 国产精品66部| av亚洲精华国产精华精华| 成人av在线网| 欧美三级视频在线观看| 7878成人国产在线观看| 欧美精品一卡两卡| 精品国产免费视频| 国产精品午夜久久| 亚洲高清三级视频| 美女视频一区在线观看| 国产成人无遮挡在线视频| 波多野结衣中文一区| 色综合色综合色综合色综合色综合| 欧美自拍丝袜亚洲| 欧美成人一级视频| 亚洲男人的天堂网| 日本中文字幕一区二区视频| 国产一区在线看| 91福利在线观看| 精品国产伦一区二区三区免费| 欧美激情一区二区三区在线| 亚洲风情在线资源站| 国内精品视频666| 一本色道久久综合亚洲aⅴ蜜桃 | 91国在线观看| 制服丝袜中文字幕亚洲| 欧美一个色资源| 国产欧美日韩综合精品一区二区| 国产精品网站导航| 曰韩精品一区二区| 日韩成人午夜精品| 亚洲一区二区综合| 亚洲国产精品视频| 波多野结衣在线aⅴ中文字幕不卡| 成人黄动漫网站免费app| 欧美怡红院视频| 精品国产一区二区三区四区四 | 日韩一区二区三区观看| 欧美精品一区二区久久久| 中文字幕在线观看不卡| 亚洲一区二区精品3399| 黑人巨大精品欧美黑白配亚洲| 成+人+亚洲+综合天堂| 制服丝袜亚洲播放| 国产精品久久午夜夜伦鲁鲁| 国产精品福利一区二区三区| 亚洲乱码中文字幕| 三级精品在线观看| 95精品视频在线| 精品少妇一区二区三区在线视频| 中文字幕亚洲成人| 久热成人在线视频| 在线欧美小视频| 日本一区二区在线不卡| 日韩在线一区二区| 一本到高清视频免费精品| 欧美一级专区免费大片| 亚洲精品视频一区二区| 狠狠色丁香婷婷综合| 欧美日韩精品欧美日韩精品一| 久久精品水蜜桃av综合天堂| 午夜精品免费在线观看| 成人avav影音| 国产三级精品三级| 毛片不卡一区二区| 97久久精品人人做人人爽50路| 国产午夜亚洲精品理论片色戒| 香蕉成人啪国产精品视频综合网| 成人av第一页| 国产精品私房写真福利视频| 青青草国产精品97视觉盛宴 | 性感美女久久精品| 欧美在线一区二区三区| 国产精品视频线看| 成人精品一区二区三区四区| 精品1区2区在线观看| 久久国产麻豆精品| 精品久久久久久亚洲综合网| 日本免费新一区视频| 欧美日韩精品久久久| 偷拍亚洲欧洲综合| 91麻豆精品国产| 亚洲五码中文字幕| 国产a久久麻豆| 精品少妇一区二区三区免费观看 | 日韩欧美一区二区不卡| 日本伊人精品一区二区三区观看方式| 欧美午夜影院一区| 午夜亚洲福利老司机| 欧美日韩国产免费一区二区| 天堂一区二区在线| 欧美一二三区在线| 精品一区二区久久| 欧美va亚洲va国产综合| 国产成人精品一区二区三区四区 | 亚洲国产日日夜夜| 国产精品乡下勾搭老头1| 久久日一线二线三线suv| 国产在线视视频有精品| 欧美极品aⅴ影院| 色久综合一二码| 亚洲福利视频一区| 久久久三级国产网站| 成人免费毛片a| 亚洲黄色片在线观看| 欧美一级理论片| 国产精品资源网站| 亚洲综合在线第一页| 欧美一区二区三区爱爱| 国产毛片精品国产一区二区三区| 中文字幕 久热精品 视频在线| 94色蜜桃网一区二区三区| 日日夜夜免费精品| 久久久欧美精品sm网站| 在线视频一区二区免费| 亚洲一区免费视频| 欧美群妇大交群的观看方式| 成人av在线一区二区| 午夜久久福利影院| 国产精品欧美综合在线| 欧美视频日韩视频在线观看| 国产乱淫av一区二区三区 | 欧美三级电影网| 国产酒店精品激情| 性做久久久久久免费观看| 久久久久国产免费免费| 欧美日韩精品一区二区天天拍小说| 狠狠色综合播放一区二区| 亚洲国产日日夜夜| 国产日韩精品视频一区| 精品婷婷伊人一区三区三| 成人性生交大片免费看中文网站| 视频在线观看91| 亚洲免费观看高清| 久久久精品日韩欧美| 91毛片在线观看| 日韩中文字幕91| 亚洲高清在线视频| 亚洲免费在线电影| 国产精品久久久久久妇女6080| 日韩欧美中文字幕精品| 欧美在线视频日韩| 波多野洁衣一区| 国产精品白丝jk黑袜喷水| 久久精品国产999大香线蕉| 亚洲国产精品一区二区www| 亚洲欧美一区二区三区孕妇| 久久久久久久久伊人| 精品国产亚洲在线| 欧美一区二区三区系列电影| 欧美日韩视频在线一区二区| 国产成人在线免费| 老司机精品视频导航| 久久99国产精品久久99| 麻豆一区二区三| 久久国产尿小便嘘嘘尿| 麻豆精品一区二区av白丝在线| 舔着乳尖日韩一区| 美女任你摸久久 | 一区二区在线观看视频 | 一区二区三区蜜桃| 一区二区三区中文在线观看| 中文字幕一区二区日韩精品绯色| 欧美videos中文字幕| 在线观看国产精品网站| 精品视频资源站| 日韩午夜精品视频| 欧美精品一区二区高清在线观看| 精品国产一区二区三区四区四 | 日本精品视频一区二区三区| 国产一区二区三区观看| 久久国产视频网| 成人高清在线视频| 成人午夜视频福利| 欧美亚洲综合在线| 911精品产国品一二三产区 | 久久国产精品99久久久久久老狼| 精品一区二区免费看| 成人激情免费视频| 在线欧美日韩精品| 欧美一区二区三区系列电影| 久久蜜桃av一区精品变态类天堂| 中文天堂在线一区| 亚洲美女一区二区三区| 另类调教123区| caoporn国产一区二区| 一本色道a无线码一区v| 欧美色偷偷大香| 日本一区二区高清|