亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
国产iv一区二区三区| 成人午夜又粗又硬又大| 国产欧美日韩在线| 欧美裸体一区二区三区| 国产suv一区二区三区88区| 亚洲午夜免费电影| 国产清纯在线一区二区www| 欧美精品乱人伦久久久久久| 成人免费高清视频| 蜜桃视频一区二区三区在线观看| 中文字幕中文在线不卡住| 日韩视频免费观看高清完整版在线观看| 国产91色综合久久免费分享| 视频精品一区二区| 亚洲四区在线观看| 国产亚洲精品bt天堂精选| 88在线观看91蜜桃国自产| 国产91在线看| 男女男精品视频网| 亚洲大片免费看| 中文字幕五月欧美| 国产精品蜜臀在线观看| 久久青草国产手机看片福利盒子 | 日韩美女精品在线| 久久蜜桃av一区二区天堂| 91精品国产色综合久久久蜜香臀| 91日韩一区二区三区| 粉嫩一区二区三区在线看| 久草精品在线观看| 日本欧美在线观看| 亚洲成人黄色影院| 亚洲综合激情小说| 樱桃视频在线观看一区| 亚洲欧洲av色图| 欧美国产欧美综合| 欧美激情一区在线观看| 久久精品人人做人人综合| 日韩欧美高清dvd碟片| 91精品国产综合久久精品| 欧美欧美欧美欧美| 9191精品国产综合久久久久久| 欧美色手机在线观看| 色婷婷久久久综合中文字幕| av在线免费不卡| 成人伦理片在线| 97精品国产露脸对白| 99在线精品一区二区三区| 99这里只有久久精品视频| 99精品国产99久久久久久白柏| 99riav一区二区三区| 日本高清视频一区二区| 欧美在线观看你懂的| 欧美日韩精品福利| 欧美成人一区二区三区片免费| 亚洲精品在线免费观看视频| 久久理论电影网| 欧美激情一区在线观看| 亚洲精品一二三| 亚洲福利电影网| 日本成人在线电影网| 国产真实乱偷精品视频免| 成人一级视频在线观看| 91在线免费看| 欧美影视一区在线| 日韩欧美一区二区久久婷婷| 国产视频亚洲色图| 1024成人网| 亚洲国产日韩a在线播放性色| 婷婷综合另类小说色区| 国产在线一区观看| 91亚洲国产成人精品一区二三| 欧美日韩视频一区二区| 精品精品欲导航| 国产精品毛片大码女人| 亚洲一区二区三区视频在线| 蜜桃精品视频在线观看| 国产精品中文字幕一区二区三区| 91在线观看一区二区| 在线播放视频一区| 国产日韩欧美亚洲| 一区二区三区加勒比av| 狠狠色狠狠色综合| 色综合亚洲欧洲| 亚洲图片欧美色图| 开心九九激情九九欧美日韩精美视频电影 | 在线不卡一区二区| 国产欧美精品一区二区色综合| 亚洲欧美激情视频在线观看一区二区三区| 亚洲高清在线视频| 国产福利一区在线观看| 欧美午夜在线一二页| 久久久久国产一区二区三区四区 | 日韩精品福利网| av一区二区久久| 日韩欧美另类在线| 一区二区在线观看不卡| 国产乱淫av一区二区三区| 日本韩国欧美三级| 国产欧美va欧美不卡在线| 日本欧美加勒比视频| 99re成人在线| 久久婷婷国产综合国色天香| 亚洲自拍偷拍综合| 成人理论电影网| 日韩欧美久久一区| 性做久久久久久久免费看| 成人免费视频免费观看| 精品国产制服丝袜高跟| 亚洲成av人片在线观看| 91网站在线观看视频| 国产亚洲欧美一级| 麻豆精品在线播放| 欧美日韩在线综合| **欧美大码日韩| 风间由美一区二区三区在线观看| 精品免费视频一区二区| 亚洲a一区二区| 色网站国产精品| 国产精品欧美一区喷水| 国产精品正在播放| 精品久久99ma| 激情综合色综合久久| 69堂国产成人免费视频| 亚洲一区二区在线播放相泽| 97久久精品人人澡人人爽| 中文字幕欧美日韩一区| 国产美女主播视频一区| 精品福利一二区| 麻豆极品一区二区三区| 日韩一级高清毛片| 天堂久久一区二区三区| 欧美日韩精品一区二区三区蜜桃| 亚洲综合网站在线观看| 欧美午夜一区二区三区| 一区二区三区日韩精品视频| 色八戒一区二区三区| 亚洲精品免费在线| 日本精品一区二区三区高清 | 蜜桃免费网站一区二区三区| 日韩一区二区电影网| 六月丁香综合在线视频| 日韩精品一区二区三区视频| 美女免费视频一区| 26uuu久久天堂性欧美| 国产精品资源网| 国产精品网站导航| 91麻豆精品一区二区三区| 亚洲天堂2014| 欧美日韩和欧美的一区二区| 日韩在线一区二区| 亚洲精品一线二线三线| 国产乱色国产精品免费视频| 国产精品对白交换视频| 一本久道中文字幕精品亚洲嫩| 一区二区三区不卡视频| 欧美狂野另类xxxxoooo| 免费人成在线不卡| 久久久影院官网| 色综合久久久久久久久| 亚洲一区二区五区| 日韩三级在线免费观看| 国产精品69毛片高清亚洲| 中文字幕欧美一区| 精品视频在线免费| 久久精品国产成人一区二区三区| 久久精品人人做人人爽97| 91影院在线免费观看| 亚洲大片免费看| 久久精品一区二区三区av| 91无套直看片红桃| 日本美女一区二区三区视频| 国产亚洲成aⅴ人片在线观看| av动漫一区二区| 亚洲国产精品嫩草影院| 欧美刺激脚交jootjob| 成人黄色在线看| 亚洲成av人片一区二区三区| 久久久久国产精品麻豆ai换脸| 97久久久精品综合88久久| 蜜乳av一区二区三区| 1024成人网| 精品精品欲导航| 色婷婷精品大在线视频 | 色综合久久综合网欧美综合网 | 亚洲丝袜制服诱惑| 777久久久精品| hitomi一区二区三区精品| 日韩—二三区免费观看av| 日本一区二区三区四区在线视频| 欧美亚洲另类激情小说| 国产精品一区二区三区网站| 午夜一区二区三区视频| 国产精品嫩草影院com| 91麻豆精品国产91久久久久久久久| 成人av网址在线| 理论片日本一区| 亚洲综合在线免费观看| 久久久精品国产免费观看同学| 一本一道久久a久久精品综合蜜臀| 蜜桃传媒麻豆第一区在线观看|