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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? usbio.c

?? 參考著寫其他的驅(qū)動程序就可以了。
?? 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

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久久岛一牛影视 | 91精品久久久久久久99蜜桃| 精品久久久久99| 亚洲欧美一区二区三区极速播放| 免费看黄色91| 色婷婷精品大在线视频| 久久久久成人黄色影片| 午夜欧美视频在线观看| 成人av综合在线| 精品理论电影在线观看 | 免费精品视频在线| 99久久久久久| 久久九九国产精品| 美腿丝袜亚洲色图| 日本高清免费不卡视频| 国产精品美女www爽爽爽| 另类的小说在线视频另类成人小视频在线| 一本大道综合伊人精品热热| 国产精品天天看| 国产一区视频网站| 欧美zozozo| 琪琪久久久久日韩精品| 欧美一区二区精品在线| 天天综合网天天综合色| 欧美久久久久久久久中文字幕| 亚洲精品国产精品乱码不99| 99热99精品| 国产精品免费久久久久| 国产乱国产乱300精品| 日韩欧美久久一区| 激情久久五月天| 久久综合久久鬼色| 国产盗摄一区二区| 国产日韩精品久久久| 国产露脸91国语对白| 国产视频视频一区| 成人黄色国产精品网站大全在线免费观看| 欧美激情一区不卡| 色菇凉天天综合网| 五月综合激情网| 欧美xxxxx牲另类人与| 国产不卡高清在线观看视频| 欧美国产禁国产网站cc| 91免费视频网| 午夜精品久久久久久久久久久| 欧美高清www午色夜在线视频| 老司机午夜精品99久久| 久久婷婷国产综合国色天香| av电影天堂一区二区在线观看| 亚洲婷婷综合久久一本伊一区| 欧美图区在线视频| 老司机精品视频一区二区三区| 久久精品人人做| 99国产麻豆精品| 日韩av不卡在线观看| 国产午夜亚洲精品不卡| 91色porny蝌蚪| 日本亚洲电影天堂| 国产精品毛片高清在线完整版| 在线精品视频一区二区三四| 麻豆国产精品一区二区三区| 国产日本一区二区| 欧美日韩国产a| 国产高清久久久| 五月天激情综合网| 中文字幕免费观看一区| 51午夜精品国产| 成人午夜伦理影院| 秋霞国产午夜精品免费视频| 欧美国产在线观看| 91精品久久久久久久91蜜桃| 99视频国产精品| 免费成人美女在线观看.| 最近中文字幕一区二区三区| 日韩一区二区精品葵司在线 | 国产欧美一区二区精品忘忧草| 色婷婷国产精品| 国产一区二区三区不卡在线观看| 亚洲黄色免费电影| 国产亚洲欧美日韩在线一区| 欧美亚洲国产一卡| a亚洲天堂av| 国产一区二区主播在线| 亚洲一区在线观看免费观看电影高清 | 一个色妞综合视频在线观看| 久久久亚洲精华液精华液精华液 | 91在线观看地址| 国产精品主播直播| 强制捆绑调教一区二区| 亚洲午夜三级在线| 日韩美女精品在线| 国产日产欧美一区二区视频| 欧美成人一区二区| 91激情五月电影| 91网站视频在线观看| 国产精品一区在线观看你懂的| 全部av―极品视觉盛宴亚洲| 亚洲一二三专区| 一区二区三区在线看| 日韩一区欧美一区| 国产精品三级电影| 亚洲国产精品黑人久久久| 久久综合色天天久久综合图片| 欧美一级欧美三级在线观看| 欧美精品vⅰdeose4hd| 欧美日韩二区三区| 欧美午夜精品久久久久久超碰| 91麻豆123| 91视频在线看| 91精品91久久久中77777| 一本大道久久精品懂色aⅴ| 成人av网在线| 97久久精品人人做人人爽50路| 成人免费高清视频| 成人h版在线观看| 91美女福利视频| 欧美色图一区二区三区| 欧美性感一区二区三区| 欧美精选午夜久久久乱码6080| 欧美日韩免费电影| 91精品国产欧美一区二区成人| 欧美日韩大陆在线| 这里只有精品视频在线观看| 欧美一区二区视频在线观看2020 | 国产精品久久看| 亚洲手机成人高清视频| 亚洲精品国产品国语在线app| 夜夜嗨av一区二区三区四季av| 亚洲在线视频免费观看| 五月天一区二区| 麻豆91精品91久久久的内涵| 国产伦精品一区二区三区在线观看| 激情综合一区二区三区| 成人免费毛片片v| 欧美影视一区二区三区| 日韩免费一区二区| 欧美国产成人精品| 亚洲午夜一二三区视频| 精品无码三级在线观看视频| 国产91精品免费| 欧美日韩亚洲综合在线 | 亚洲精品国产精品乱码不99| 日韩精品亚洲一区| 国产成人免费视| 色就色 综合激情| 欧美变态tickle挠乳网站| 日本一区二区三区久久久久久久久不 | 蜜桃在线一区二区三区| 国产91在线|亚洲| 欧美日韩一区二区三区高清| 2022国产精品视频| 亚洲一区二区综合| 国产乱码精品一区二区三区av| 91国产免费观看| 久久这里只有精品首页| 亚洲一区二区三区四区在线观看| 国产一区 二区 三区一级| 日本精品免费观看高清观看| 久久久久久久综合日本| 亚洲自拍偷拍麻豆| 粉嫩一区二区三区在线看| 欧美日韩成人一区| 国产精品短视频| 国产综合色在线| 欧美精品乱人伦久久久久久| 国产精品高清亚洲| 激情综合色综合久久综合| 欧洲色大大久久| 国产精品电影一区二区三区| 精品一区免费av| 精品视频资源站| 亚洲日穴在线视频| 国产精品996| 欧美大片一区二区| 日韩专区一卡二卡| 在线免费观看日本一区| 国产精品卡一卡二| 国产电影一区在线| 欧美mv日韩mv国产| 蜜臀av亚洲一区中文字幕| 在线观看一区不卡| 亚洲免费观看高清完整| 国产a区久久久| 久久免费国产精品| 精品一区二区在线看| 日韩一区二区中文字幕| 午夜婷婷国产麻豆精品| 色狠狠综合天天综合综合| 国产精品短视频| 99久久精品99国产精品| 国产精品乱人伦中文| 国产成人精品三级| 国产欧美日韩麻豆91| 丰满少妇在线播放bd日韩电影| 精品国产伦一区二区三区免费| 麻豆一区二区三| 欧美va天堂va视频va在线| 狠狠色狠狠色合久久伊人| 精品福利二区三区| 国产一区二区主播在线|