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

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

?? usbprn.h

?? Latest USB 802.3, HID printer and mass storage divers from Microsoft for Platform Builder 4.2.
?? H
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
/*++

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.

Module Name:
    usbprn.h

Abstract:
    USB Client Driver for Print Device Class.

Functions:

Notes:

--*/

#if !defined( _USBPRN_ )
#define _USBPRN_

#include <windows.h>
#include <devload.h>
#include <usbdi.h>
#include <pegdser.h>
#include <pegdpar.h>

#include <ntcompat.h>

#include "warning.h"
#include "usbclient.h"
#include "utils.h"

#define DRIVER_NAME   TEXT("USBPRN.DLL")
#define DEVICE_PREFIX TEXT("LPT")

#define CLASS_NAME_SZ    TEXT("Printer_Class")
#define CLIENT_REGKEY_SZ TEXT("Drivers\\USB\\ClientDrivers\\Printer_Class")

#define MAX_LPT_NAME_INDEX  10
#define PORTNAME_LEN        sizeof(TEXT("Port10"))

//
// USB Printer Interface Descriptor
//
#define USB_PRN_INTERFACE_CLASS        0x07
#define USB_PRN_INTERFACE_SUBCLASS     0x01
#define USB_PRN_INTERFACE_PROTOCOL_UNI 0x01
#define USB_PRN_INTERFACE_PROTOCOL_BI  0x02

//
// Default Timeout values
//
#define GET_PORT_STATUS_TIMEOUT  2000
#define GET_DEVICE_ID_TIMEOUT    2000
#define SOFT_RESET_TIMEOUT       2000

#define READ_TIMEOUT_INTERVAL    250
#define READ_TIMEOUT_MULTIPLIER  10
#define READ_TIMEOUT_CONSTANT       100
#define WRITE_TIMEOUT_MULTIPLIER    50
#define WRITE_TIMEOUT_CONSTANT  1000

//
// registry strings
//
#define GET_PORT_STATUS_TIMEOUT_SZ  TEXT("PortStatusTimeout")
#define GET_DEVICE_ID_TIMEOUT_SZ    TEXT("DeviceIdTimeout")
#define SOFT_RESET_TIMEOUT_SZ       TEXT("SoftResetTimeout")

#define READ_TIMEOUT_MULTIPLIER_SZ  TEXT("ReadTimeoutMultiplier")
#define READ_TIMEOUT_CONSTANT_SZ    TEXT("ReadTimeoutConstant")
#define WRITE_TIMEOUT_MULTIPLIER_SZ TEXT("WriteTimeoutMultiplier")
#define WRITE_TIMEOUT_CONSTANT_SZ   TEXT("WriteTimeoutConstant")



// defined in device class spec
#define USBPRN_STATUS_SELECT      0x10
#define USBPRN_STATUS_NOTERROR    0x08
#define USBPRN_STATUS_PAPEREMPTY  0x20
// additional err
#define USBPRN_STATUS_TIMEOUT     0x100
#define USBPRN_STATUS_BUSY        0x200

#define USB_PRN_SIG 0x50425355 // "USBP" tag

#define MANUAL_RESET_EVENT TRUE
#define AUTO_RESET_EVENT   FALSE


typedef struct _FLAGS {
   UCHAR    Open           : 1; // bits 0
   UCHAR    UnloadPending  : 1; // bits 1
   UCHAR    Reserved       : 6; // bits 2-7
} FLAGS, *PFLAGS;


typedef struct _USBTIMEOUTS {

    DWORD PortStatusTimeout;

    DWORD DeviceIdTimeout;

    DWORD SoftResetTimeout;

} USBTIMEOUTS, *PUSBTIMEOUTS;


//
// Our notion of a Pipe
//
typedef struct _PIPE {
    //
    // USB Pipe handle received from the stack
    //
    USB_PIPE hPipe;

    //
    // Endpoint's Address
    //
    UCHAR    bIndex;

    //
    // Endpoint's wMaxPacketSize
    //
    USHORT wMaxPacketSize;

    //
    // Completion Event
    //
    HANDLE   hEvent;

} PIPE, *PPIPE;


typedef struct _USBPRN_CONTEXT {
   //
   // We use a Signature (defined above) since we must read
   // our context pointer out of the registry
   //
   ULONG Sig;

   //
   // sync object for this instance
   //
   CRITICAL_SECTION Lock;

   //
   // path to HKLM\Drivers\Active\xx
   //
   LPTSTR  ActivePath;

   //
   // Name under HKLM\Printers\Ports\PortX
   //
   TCHAR   PortName[PORTNAME_LEN];

   //
   // Handle for Stream interface.
   //
   HANDLE   hStreamDevice;

   //
   // USB handle to the device
   //
    HANDLE   hUsbDevice;

   //
   // USBD Function table
   //
   LPCUSB_FUNCS   UsbFuncs;

   //
   // Fields from USB_INTERFACE that we need
   //
   UCHAR bInterfaceNumber;
   UCHAR bAlternateSetting;

   USHORT ConfigIndex;

   //
   // Bulk OUT Pipe
   //
   PIPE BulkOut;

   //
   // Bulk IN Pipe
   //
   PIPE BulkIn;

    //
    // completion signal used for endpoint 0
    //
    HANDLE hEP0Event;


   //
   // Signals the device has been closed.
   //
   HANDLE hCloseEvent;

   //
   // FLAGS
   //
   FLAGS Flags;

   //
   // Comm Timeouts
   //
   COMMTIMEOUTS Timeouts;

   //
   // USB Timeouts
   //
   USBTIMEOUTS UsbTimeouts;

} USBPRN_CONTEXT, *PUSBPRN_CONTEXT;


//
// Is the pointer a valid PUSBPRN_CONTEXT
//
#define VALID_CONTEXT( p ) \
   ( p && USB_PRN_SIG == p->Sig )


//
// Can the device accept any I/O requests
//
#define ACCEPT_IO( p ) \
   ( VALID_CONTEXT( p ) && \
     p->Flags.Open && \
    !p->Flags.UnloadPending )


//
// USB_DRIVER_SETTINGS
//
#define DRIVER_SETTINGS \
            sizeof(USB_DRIVER_SETTINGS),  \
            USB_NO_INFO,   \
            USB_NO_INFO,   \
            USB_NO_INFO,   \
            USB_NO_INFO,   \
            USB_NO_INFO,   \
            USB_NO_INFO,   \
            USB_PRN_INTERFACE_CLASS,      \
            USB_PRN_INTERFACE_SUBCLASS,   \
            USB_NO_INFO


//
// USBPRN.C
//
LPCUSB_INTERFACE
ParseUsbDescriptors(
   USB_HANDLE       hUsbDevice,
   LPCUSB_FUNCS     UsbFuncs,
   LPCUSB_INTERFACE CurInterface,
   LPUSHORT         ConfigIndex
   );

BOOL
SetUsbInterface(
   PUSBPRN_CONTEXT  pUsbPrn,
   LPCUSB_INTERFACE UsbInterface
   );

DWORD
GetDeviceId(
   PUSBPRN_CONTEXT pUsbPrn,
   PBYTE           pBuf,
   DWORD           dwLen
   );

USHORT
GetPortStatus(
   PUSBPRN_CONTEXT pUsbPrn
   );

BOOL
SoftReset(
   PUSBPRN_CONTEXT pUsbPrn
   );

DWORD
IoErrorHandler(
   PUSBPRN_CONTEXT pUsbPrn,
   USB_PIPE        hPipe,
   UCHAR           bIndex,
   USB_ERROR       dwUsbError
   );


//
// DEBUG
//
#if DEBUG

#define ZONE_ERR            DEBUGZONE(0)
#define ZONE_WARN           DEBUGZONE(1)
#define ZONE_INIT           DEBUGZONE(2)
#define ZONE_TRACE          DEBUGZONE(3)

#define ZONE_LPT_INIT       DEBUGZONE(4)
#define ZONE_LPT_READ       DEBUGZONE(5)
#define ZONE_LPT_WRITE      DEBUGZONE(6)
#define ZONE_LPT_IOCTL      DEBUGZONE(7)

#define ZONE_USB_PARSE      DEBUGZONE(8)
#define ZONE_USB_INIT       DEBUGZONE(9)
#define ZONE_USB_CONTROL    DEBUGZONE(10)
#define ZONE_USB_BULK       DEBUGZONE(11)

#define ZONE_USBCLIENT      DEBUGZONE(15)

//
// these should be removed in the code if you can 'g' past these successfully
//
#define TEST_TRAP() { \
   NKDbgPrintfW( TEXT("%s: Code Coverage Trap in: %s, Line: %d\n"), DRIVER_NAME, TEXT(__FILE__), __LINE__); \
   DebugBreak();  \
}

#define DUMP_USB_DEVICE_DESCRIPTOR( d ) { \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("USB_DEVICE_DESCRIPTOR:\n"))); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("----------------------\n"))); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bLength: 0x%x\n"), d.bLength ));   \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bDescriptorType: 0x%x\n"), d.bDescriptorType ));  \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bcdUSB: 0x%x\n"), d.bcdUSB ));  \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bDeviceClass: 0x%x\n"), d.bDeviceClass ));  \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bDeviceSubClass: 0x%x\n"), d.bDeviceSubClass ));  \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bDeviceProtocol: 0x%x\n"), d.bDeviceProtocol ));  \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bMaxPacketSize0: 0x%x\n"), d.bMaxPacketSize0 ));  \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("idVendor: 0x%x\n"), d.idVendor )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("idProduct: 0x%x\n"), d.idProduct ));  \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bcdDevice: 0x%x\n"), d.bcdDevice ));  \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("iManufacturer: 0x%x\n"), d.iManufacturer ));   \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("iProduct: 0x%x\n"), d.iProduct )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("iSerialNumber: 0x%x\n"), d.iSerialNumber ));   \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bNumConfigurations: 0x%x\n"), d.bNumConfigurations ));  \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("\n")));  \
}

#define DUMP_USB_CONFIGURATION_DESCRIPTOR( c ) { \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("USB_CONFIGURATION_DESCRIPTOR:\n"))); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("-----------------------------\n"))); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bLength: 0x%x\n"), c.bLength )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bDescriptorType: 0x%x\n"), c.bDescriptorType )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("wTotalLength: 0x%x\n"), c.wTotalLength )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bNumInterfaces: 0x%x\n"), c.bNumInterfaces )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bConfigurationValue: 0x%x\n"), c.bConfigurationValue )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("iConfiguration: 0x%x\n"), c.iConfiguration )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bmAttributes: 0x%x\n"), c.bmAttributes )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("MaxPower: 0x%x\n"), c.MaxPower )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("\n"))); \
}

#define DUMP_USB_INTERFACE_DESCRIPTOR( i, _index ) { \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("USB_INTERFACE_DESCRIPTOR[%d]:\n"), _index )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("-------------------------\n"))); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bLength: 0x%x\n"), i.bLength )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bDescriptorType: 0x%x\n"), i.bDescriptorType )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bInterfaceNumber: 0x%x\n"), i.bInterfaceNumber )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bAlternateSetting: 0x%x\n"), i.bAlternateSetting )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bNumEndpoints: 0x%x\n"), i.bNumEndpoints )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bInterfaceClass: 0x%x\n"), i.bInterfaceClass )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bInterfaceSubClass: 0x%x\n"), i.bInterfaceSubClass )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bInterfaceProtocol: 0x%x\n"), i.bInterfaceProtocol )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("iInterface: 0x%x\n"), i.iInterface )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("\n"))); \
}

#define DUMP_USB_ENDPOINT_DESCRIPTOR( e ) { \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("USB_ENDPOINT_DESCRIPTOR:\n"))); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("-----------------------------\n"))); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bLength: 0x%x\n"), e.bLength )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bDescriptorType: 0x%x\n"), e.bDescriptorType )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bEndpointAddress: 0x%x\n"), e.bEndpointAddress )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bmAttributes: 0x%x\n"), e.bmAttributes )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("wMaxPacketSize: 0x%x\n"), e.wMaxPacketSize )); \
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("bInterval: 0x%x\n"), e.bInterval ));\
   DEBUGMSG( ZONE_USB_PARSE, (TEXT("\n"))); \
}

#else
#define TEST_TRAP()
#define DUMP_USB_DEVICE_DESCRIPTOR( p )
#define DUMP_USB_CONFIGURATION_DESCRIPTOR( c )
#define DUMP_USB_INTERFACE_DESCRIPTOR( i, _index )
#define DUMP_USB_ENDPOINT_DESCRIPTOR( e )
#endif // DEBUG


#endif // _USBPRN_

// EOF

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
最新久久zyz资源站| 中文字幕一区二区三区乱码在线| 色综合天天综合网天天狠天天 | 亚洲精品在线电影| 欧美日韩在线免费视频| 成人一道本在线| 国产一区二区网址| 精品一区二区在线观看| 青青草国产成人99久久| 亚洲电影激情视频网站| 亚洲六月丁香色婷婷综合久久 | 免费亚洲电影在线| 亚洲成人精品一区| 亚洲欧美日韩国产综合| 国产精品免费网站在线观看| 久久综合九色综合97婷婷| 日韩欧美一区在线| 欧美成人女星排名| 日韩欧美一级片| 欧美一区日韩一区| 欧美理论片在线| 日韩一区二区三区视频| 欧美一级艳片视频免费观看| 91精品国产综合久久久久久| 在线电影一区二区三区| 欧美亚洲动漫另类| 欧美在线free| 91麻豆精品国产| 日韩女优av电影| 久久色在线视频| 中文字幕精品三区| 亚洲精品亚洲人成人网 | 精品国产91九色蝌蚪| 日韩免费看网站| 欧美精品一区二区三| 国产免费观看久久| 国产精品国产a| 一区二区三区资源| 日本亚洲三级在线| 精品一区二区三区蜜桃| 国产成人免费xxxxxxxx| 国产福利不卡视频| 99国产欧美另类久久久精品| 在线视频国内一区二区| 欧美久久久影院| 亚洲精品一区在线观看| 国产精品久久久久久福利一牛影视| 国产精品国产三级国产aⅴ原创| 亚洲精品国久久99热| 中文字幕在线观看不卡视频| 亚洲欧美日韩国产综合| 日韩成人午夜精品| 国产精品自拍一区| 91免费视频大全| 日韩午夜激情视频| 国产免费成人在线视频| 综合自拍亚洲综合图不卡区| 中文字幕亚洲区| 首页综合国产亚洲丝袜| 国产高清视频一区| 色婷婷国产精品久久包臀| 欧美精品一卡两卡| 国产欧美精品国产国产专区| 亚洲美女视频在线| 麻豆精品新av中文字幕| 国产酒店精品激情| 欧美日本国产视频| 国产精品丝袜在线| 五月天一区二区| 粉嫩高潮美女一区二区三区| 欧美日韩黄视频| 国产欧美日韩三区| 亚洲国产视频网站| 国产乱国产乱300精品| 99久久国产综合精品女不卡| 69久久夜色精品国产69蝌蚪网| 国产清纯白嫩初高生在线观看91| 亚洲自拍偷拍综合| 国产jizzjizz一区二区| 欧美另类videos死尸| 亚洲视频你懂的| 久久国产三级精品| 99国产精品一区| 精品国产免费视频| 亚洲gay无套男同| 99久久精品免费看国产| 精品成人a区在线观看| 亚洲动漫第一页| 99re66热这里只有精品3直播| 欧美色图天堂网| 国产精品久久精品日日| 久久精品免费观看| 欧美夫妻性生活| 亚洲嫩草精品久久| 国产成人av电影在线播放| 日韩一区二区三| 亚洲va在线va天堂| 欧美视频三区在线播放| 亚洲欧美一区二区三区孕妇| 国产乱理伦片在线观看夜一区 | 亚洲丝袜制服诱惑| 日韩国产一二三区| 91在线免费视频观看| 国产蜜臀97一区二区三区| 国产美女久久久久| 欧美成人女星排行榜| 免费高清视频精品| 欧美一区二区三级| 亚洲h精品动漫在线观看| 色噜噜夜夜夜综合网| 国产精品美女久久久久久2018| 韩国女主播成人在线观看| 欧美一区二区视频免费观看| 亚洲国产精品视频| 欧美色窝79yyyycom| 亚洲国产精品嫩草影院| 欧美三级电影精品| 亚洲国产乱码最新视频 | 在线视频你懂得一区| 亚洲欧美另类久久久精品| 972aa.com艺术欧美| 国产精品毛片无遮挡高清| 床上的激情91.| 国产精品美女久久久久久久| av在线一区二区| 亚洲欧美中日韩| 色偷偷成人一区二区三区91 | 另类调教123区| 欧美老人xxxx18| 国产做a爰片久久毛片| 国产欧美精品一区二区色综合| 色综合久久久久网| 免费观看30秒视频久久| 国产婷婷色一区二区三区| 91在线视频官网| 三级不卡在线观看| 国产日韩欧美一区二区三区综合| 91亚洲精品久久久蜜桃| 日日骚欧美日韩| 国产婷婷色一区二区三区| 91豆麻精品91久久久久久| 毛片av一区二区| 亚洲欧美综合另类在线卡通| 欧美美女视频在线观看| 国产精品1区二区.| 亚洲午夜久久久久久久久电影院| 日韩一区二区视频| 成人白浆超碰人人人人| 天天综合色天天| 亚洲国产成人一区二区三区| 欧美视频完全免费看| 国产成人精品1024| 午夜久久久久久久久| 天天综合天天综合色| 欧美成人女星排行榜| 色婷婷亚洲婷婷| 国内偷窥港台综合视频在线播放| 一区二区三区在线免费| 日韩精品一区二区三区四区视频 | 欧美不卡视频一区| 91蝌蚪porny九色| 黄色精品一二区| 亚洲成av人片在www色猫咪| 久久精品人人做人人爽人人| 欧美精品乱码久久久久久| 春色校园综合激情亚洲| 久久精品国产一区二区| 亚洲尤物在线视频观看| 日本一区二区三区高清不卡| 正在播放亚洲一区| 色一区在线观看| 成人黄色国产精品网站大全在线免费观看| 天天操天天干天天综合网| 最新久久zyz资源站| 久久久久久免费网| 欧美一区二区三区系列电影| 色一情一乱一乱一91av| 成人激情视频网站| 国产一区二区中文字幕| 强制捆绑调教一区二区| 一区二区三区不卡视频在线观看| 国产色一区二区| 日韩美女主播在线视频一区二区三区| 色婷婷综合久久| 99久久伊人精品| 成人黄色在线看| 国产精品99久久久| 国产一区三区三区| 狠狠色丁香婷婷综合久久片| 婷婷中文字幕一区三区| 一级女性全黄久久生活片免费| 国产精品亲子伦对白| 久久久一区二区三区| 日韩欧美亚洲一区二区| 91精品婷婷国产综合久久竹菊| 在线观看91精品国产入口| 91麻豆国产福利精品| 不卡av在线网| bt欧美亚洲午夜电影天堂| 国产在线精品一区在线观看麻豆|