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

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

?? escpos.h

?? 微軟的point of sale的源代碼
?? H
字號:
/*++

Copyright (c) 1999  Microsoft Corporation

Module Name:

    escpos.h

Abstract: ESC/POS (serial) interface for USB Point-of-Sale devices

Author:

    ervinp

Environment:

    Kernel mode

Revision History:


--*/

#include "ntddser.h"

/*
 *  Serial Status Emulation has been disabled for the time being.
 */
#define STATUS_ENDPOINT     0

/*
 *  Bit mask for the posFlag.
 */
#define SERIAL_EMULATION    0x0001
#define ODD_ENDPOINT        0x0002

/*
 *  Bit mask for the STATUS Endpoint on the USB.
 */
#define EMULSER_OE          0x0001
#define EMULSER_PE          0x0002
#define EMULSER_FE          0x0004
#define EMULSER_BI          0x0008
#define EMULSER_CTS         0x0010
#define EMULSER_DSR         0x0020
#define EMULSER_RI          0x0040
#define EMULSER_DCD         0x0080
#define EMULSER_DTR         0x0100
#define EMULSER_RTS         0x0200

/*
 *  Emulation of the bit mask on the MODEM STATUS REGISTER.
 */
#define SERIAL_MSR_DCTS     0x0001
#define SERIAL_MSR_DDSR     0x0002
#define SERIAL_MSR_TERI     0x0004
#define SERIAL_MSR_DDCD     0x0008
#define SERIAL_MSR_CTS      0x0010
#define SERIAL_MSR_DSR      0x0020
#define SERIAL_MSR_RI       0x0040
#define SERIAL_MSR_DCD      0x0080

/*
 *  These masks are used for smooth transition of the STATUS bits
 *  from the Endpoint to the Emulated Variables.
 */
#define MSR_DELTA_MASK      0x000F
#define MSR_GLOBAL_MSK      0x00F0
#define MSR_DELTA_SHFT      4

/*
 *  Emulation of the bit mask on the LINE STATUS REGISTER.
 */
#define SERIAL_LSR_DR       0x0001
#define SERIAL_LSR_OE       0x0002
#define SERIAL_LSR_PE       0x0004
#define SERIAL_LSR_FE       0x0008
#define SERIAL_LSR_BI       0x0010
#define SERIAL_LSR_THRE     0x0020
#define SERIAL_LSR_TEMT     0x0040
#define SERIAL_LSR_FIFOERR  0x0080

/*
 *  IOCTL CODE for applications to be able to get the device's pretty name.
 */
#define IOCTL_INDEX                     0x0800
#define IOCTL_SERIAL_QUERY_DEVICE_NAME  CTL_CODE(FILE_DEVICE_SERIAL_PORT, IOCTL_INDEX + 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_SERIAL_QUERY_DEVICE_ATTR  CTL_CODE(FILE_DEVICE_SERIAL_PORT, IOCTL_INDEX + 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define MAX_BUFFER                      256

/*
 *  Run on prototype Epson printer ?  // BUGBUG REMOVE
 */
#define EPSON_PRINTER  0		


/*
 *  BUGBUG
 * 
 *  Is it ok to return a partial read buffer, or should we wait
 *  until the caller's buffer is completely full ?
 */
#define PARTIAL_READ_BUFFERS_OK 1


/*
 *  This is the default interface class value for interfaces of no defined class.
 */
#define USB_INTERFACE_CLASS_VENDOR 0x0ff 

enum deviceState {
        STATE_INITIALIZED,
        STATE_STARTING,
        STATE_STARTED,
        STATE_START_FAILED,
        STATE_STOPPED,  // implies device was previously started successfully
        STATE_SUSPENDED,
        STATE_REMOVING,
        STATE_REMOVED
};

#define DEVICE_EXTENSION_SIGNATURE 'PcsE'


typedef struct endpointInfo {
	USBD_PIPE_HANDLE pipeHandle;
	ULONG pipeLen;
	BOOLEAN endpointIsBusy;
} ENDPOINTINFO;

typedef struct PARENT_FDO_EXTENSION {

    /*
     *  Plug-and-play state of this device object.
     */
    enum deviceState state;

    PDRIVER_OBJECT driverObj;

    /*
     *  Flag to notify that some special feature needs to be implemented.
     */
    ULONG posFlag;

    /*
     *  The device object that this driver created.
     */
    PDEVICE_OBJECT functionDevObj;

    /*
     *  The device object created by the next lower driver.
     */
    PDEVICE_OBJECT physicalDevObj;

    /*
     *  The device object at the top of the stack that we attached to.
     *  This is often (but not always) the same as physicalDevObj.
     */
    PDEVICE_OBJECT topDevObj;

    /*
     *  deviceCapabilities includes a
     *  table mapping system power states to device power states.
     */
    DEVICE_CAPABILITIES deviceCapabilities;

    /*
     *  pendingActionCount is used to keep track of outstanding actions.
     *  removeEvent is used to wait until all pending actions are
     *  completed before complete the REMOVE_DEVICE IRP and let the
     *  driver get unloaded.
     */
    LONG pendingActionCount;
    KEVENT removeEvent;

    USB_DEVICE_DESCRIPTOR deviceDesc;
    PUSB_CONFIGURATION_DESCRIPTOR configDesc;

    USBD_CONFIGURATION_HANDLE configHandle;
    PUSBD_INTERFACE_INFORMATION interfaceInfo;

    KSPIN_LOCK	devExtSpinLock;

    PDEVICE_RELATIONS deviceRelations;

} PARENTFDOEXT;


/*
 *  Device extension for a PDO created by this driver.
 *  A POS PDO represents a single COM (serial) port interface
 *  which consists of a single input/output endpoint pair on the USB device.
 */
typedef struct POS_PDO_EXTENSION {
    enum deviceState state;
    PDEVICE_OBJECT pdo;
    PARENTFDOEXT *parentFdoExt;
    LONG comPortNumber;
    UNICODE_STRING pdoName;
    UNICODE_STRING symbolicLinkName;
    LIST_ENTRY fileExtensionList;

    ENDPOINTINFO inputEndpointInfo;
    ENDPOINTINFO outputEndpointInfo;

    LIST_ENTRY pendingReadIrpsList;
    LIST_ENTRY pendingWriteIrpsList;
    LIST_ENTRY completedReadPacketsList;

    ULONG totalQueuedReadDataLength;

    WORK_QUEUE_ITEM writeWorkItem;
    WORK_QUEUE_ITEM readWorkItem;

    FILE_BASIC_INFORMATION fileBasicInfo;

    KSPIN_LOCK devExtSpinLock;

    ULONG                   supportedBauds;         // emulation of baud rates for the device
    ULONG                   baudRate;               // emulation of current baud rate
    ULONG                   fakeDTRRTS;             // emulation of DTR and RTS lines
    ULONG                   fakeRxSize;             // emulation of read buffer size
    SERIAL_TIMEOUTS         fakeTimeouts;           // emulation of timeout controls
    SERIAL_CHARS            specialChars;           // emulation of special characters
    SERIALPERF_STATS        fakePerfStats;          // emulation of performance stats
    SERIAL_LINE_CONTROL     fakeLineControl;        // emulation of the line control register
    USHORT                  fakeLineStatus;         // emulation of line status register
    USHORT                  fakeModemStatus;        // emulation of modem status register

    LIST_ENTRY              pendingWaitIrpsList;    // queue of WAIT_ON_MASK irps
    ULONG                   waitMask;               // mask of events to be waited upon
    ULONG                   currentMask;            // mask of events that have occured

    #if !STATUS_ENDPOINT
    USB_DEVICE_DESCRIPTOR   dummyPacket;            // we simply get the desciptor for now
    #endif

    USHORT                  statusPacket;           // buffer to read the status endpoint
    URB	                    statusUrb;              // urb to read the status endpoint
    ENDPOINTINFO            statusEndpointInfo;     // stores info about the status endpoint

} POSPDOEXT;

typedef struct DEVICE_EXTENSION {

    /*
     *  Memory signature of a device extension, for debugging.
     */
    ULONG signature;

	BOOLEAN isPdo;

	union {
		PARENTFDOEXT parentFdoExt;
		POSPDOEXT pdoExt;
	};

} DEVEXT;


typedef struct fileExtension {
	ULONG signature;
	PFILE_OBJECT fileObject;
	LIST_ENTRY listEntry;
} FILEEXT;


typedef struct readPacket {
		
		#define READPACKET_SIG 'tPdR'
		ULONG signature;

		PUCHAR data;
		ULONG length;
		ULONG offset;	// offset of first byte not yet returned to client
		PVOID context;
		PURB urb;

		LIST_ENTRY listEntry;

} READPACKET;


#define NO_STATUS 0x80000000

#define MIN(a,b) (((a) < (b)) ? (a) : (b))
#define MAX(a,b) (((a) > (b)) ? (a) : (b))

/*
 *  Memory tag for memory blocks allocated by this driver
 *  (used in ExAllocatePoolWithTag() call).
 *  This DWORD appears as "Filt" in a little-endian memory byte dump.
 */
#define ESCPOS_TAG (ULONG)'UsoP'
#define ALLOCPOOL(pooltype, size)   ExAllocatePoolWithTag(pooltype, size, ESCPOS_TAG)
#define FREEPOOL(ptr)               ExFreePool(ptr) 



/*
 *  Function prototypes
 */
NTSTATUS    DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath);
NTSTATUS    AddDevice(IN PDRIVER_OBJECT driverObj, IN PDEVICE_OBJECT pdo);
VOID        DriverUnload(IN PDRIVER_OBJECT DriverObject);
NTSTATUS    Dispatch(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS    FDO_PnP(PARENTFDOEXT *parentFdoExt, PIRP irp);
NTSTATUS    FDO_Power(PARENTFDOEXT *parentFdoExt, PIRP irp);
NTSTATUS    FDO_PowerComplete(IN PDEVICE_OBJECT devObj, IN PIRP irp, IN PVOID context);
NTSTATUS    GetDeviceCapabilities(PARENTFDOEXT *parentFdoExt);
NTSTATUS    CallNextDriverSync(PARENTFDOEXT *parentFdoExt, PIRP irp);
NTSTATUS    CallDriverSync(PDEVICE_OBJECT devObj, PIRP irp);
NTSTATUS    CallDriverSyncCompletion(IN PDEVICE_OBJECT devObj, IN PIRP irp, IN PVOID Context);
VOID        IncrementPendingActionCount(PARENTFDOEXT *parentFdoExt);
VOID        DecrementPendingActionCount(PARENTFDOEXT *parentFdoExt);
NTSTATUS    InitUSB(PARENTFDOEXT *parentFdoExt);
NTSTATUS    GetConfigDescriptor(PARENTFDOEXT *parentFdoExt);
NTSTATUS    GetDeviceDescriptor(PARENTFDOEXT *parentFdoExt);
NTSTATUS    SubmitUrb(PDEVICE_OBJECT pdo, PURB urb, BOOLEAN synchronous, PVOID completionRoutine, PVOID completionContext);
NTSTATUS    OpenComPort(POSPDOEXT *pdoExt, PIRP irp);
NTSTATUS    CloseComPort(POSPDOEXT *pdoExt, PIRP irp);
NTSTATUS    WriteComPort(POSPDOEXT *pdoExt, PIRP irp);
NTSTATUS    ReadComPort(POSPDOEXT *pdoExt, PIRP irp);
NTSTATUS    CreateSymbolicLink(POSPDOEXT *pdoExt);
NTSTATUS    DestroySymbolicLink(POSPDOEXT *pdoExt);
PWCHAR      CreateChildPdoName(PARENTFDOEXT *parentFdoExt, ULONG portNumber);
NTSTATUS    CreateCOMPdo(PARENTFDOEXT *parentFdoExt, ULONG comInterfaceIndex, ENDPOINTINFO *inputEndpointInfo, ENDPOINTINFO *outputEndpointInfo, ENDPOINTINFO *statusEndpointInfo);
PDEVICE_RELATIONS CopyDeviceRelations(PDEVICE_RELATIONS deviceRelations);
NTSTATUS    QueryDeviceRelations(PARENTFDOEXT *parentFdoExt, PIRP irp);
PVOID       MemDup(PVOID dataPtr, ULONG length);
NTSTATUS    PDO_PnP(POSPDOEXT *pdoExt, PIRP irp);
NTSTATUS    QueryPdoID(POSPDOEXT *pdoExt, PIRP irp);
NTSTATUS    ReadPipe(PARENTFDOEXT *parentFdoExt, USBD_PIPE_HANDLE pipeHandle, READPACKET *readPacket, BOOLEAN synchronous);
NTSTATUS    ReadPipeCompletion(IN PDEVICE_OBJECT devObj, IN PIRP irp, IN PVOID context);
NTSTATUS    WritePipe(PARENTFDOEXT *parentFdoExt, USBD_PIPE_HANDLE pipeHandle, PUCHAR data, ULONG dataLen);
NTSTATUS    SelectConfiguration(PARENTFDOEXT *parentFdoExt);
NTSTATUS    CleanupIO(POSPDOEXT *pdoExt, PIRP irp);
NTSTATUS    QueryInfo(POSPDOEXT *pdoExt, PIRP irp);
NTSTATUS    SetInfo(POSPDOEXT *pdoExt, PIRP irp);
NTSTATUS    FlushBuffers(POSPDOEXT *pdoExt);
NTSTATUS    Ioctl(POSPDOEXT *pdoExt, PIRP irp);
NTSTATUS    InternalIoctl(POSPDOEXT *pdoExt, PIRP irp);
NTSTATUS    SubstituteOneBusName(PWCHAR hwId);
NTSTATUS    SubstituteBusNames(PWCHAR busNames);
ULONG       WStrLen(PWCHAR str);
LONG        WStrNCmpI(PWCHAR s1, PWCHAR s2, ULONG n);
VOID        WorkItemCallback_Write(PVOID context);
VOID        WorkItemCallback_Read(PVOID context);
VOID        WriteCancelRoutine(PDEVICE_OBJECT devObj, PIRP irp);
NTSTATUS    EnqueueReadIrp(POSPDOEXT *pdoExt, PIRP irp, BOOLEAN enqueueAtFront, BOOLEAN lockHeld);
PIRP        DequeueReadIrp(POSPDOEXT *pdoExt, BOOLEAN lockHeld);
VOID        ReadCancelRoutine(PDEVICE_OBJECT devObj, PIRP irp);
VOID        IssueReadForClient(POSPDOEXT *pdoExt);
VOID        SatisfyPendingReads(POSPDOEXT *pdoExt);
READPACKET* AllocReadPacket(PVOID data, ULONG dataLen, PVOID context);
VOID        FreeReadPacket(READPACKET *readPacket);
LONG        GetComPort(PARENTFDOEXT *parentFdoExt, ULONG comInterfaceIndex);
LONG        GetFreeComPortNumber();
VOID        ReleaseCOMPort(LONG comPortNumber);
void        NumToHexString(PWCHAR String, USHORT Number, USHORT stringLen);
void        NumToDecString(PWCHAR String, USHORT Number, USHORT stringLen);
ULONG       LAtoX(PWCHAR wHexString);
ULONG       LAtoD(PWCHAR string);
LONG        MyLog(ULONG base, ULONG num);
NTSTATUS    CreatePdoForEachEndpointPair(PARENTFDOEXT *parentFdoExt);
NTSTATUS    TryWrite(POSPDOEXT *pdoExt, PIRP irp);
BOOLEAN     IsWin9x();
PVOID       PosMmGetSystemAddressForMdlSafe(PMDL MdlAddress);
VOID        DeleteChildPdo(POSPDOEXT *pdoExt);

/*
 *  Function prototypes for Serial Emulation.
 */
NTSTATUS    QuerySpecialFeature(PARENTFDOEXT *parentFdoExt);
VOID        InitializeSerEmulVariables(POSPDOEXT *pdoExt);
NTSTATUS    EnqueueWaitIrp(POSPDOEXT *pdoExt, PIRP irp);
VOID        WaitMaskCancelRoutine(PDEVICE_OBJECT devObj, PIRP irp);
PIRP        DequeueWaitIrp(POSPDOEXT *pdoExt);
VOID        UpdateMask(POSPDOEXT *pdoExt);
VOID        CompletePendingWaitIrps(POSPDOEXT *pdoExt, ULONG mask);
NTSTATUS    StatusPipe(POSPDOEXT *pdoExt, USBD_PIPE_HANDLE pipeHandle);
NTSTATUS    StatusPipeCompletion(IN PDEVICE_OBJECT devObj, IN PIRP irp, IN PVOID context);
NTSTATUS    QueryDeviceName(POSPDOEXT *pdoExt, PIRP irp);

/*
 *  Externs
 */
extern BOOLEAN isWin9x;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品免费aⅴ片在线观看| 亚洲电影第三页| 最新国产成人在线观看| 视频在线观看一区二区三区| 国产精品亚洲第一区在线暖暖韩国| 色婷婷久久99综合精品jk白丝| 精品粉嫩超白一线天av| 亚洲一区二区精品久久av| 国产精品一区二区果冻传媒| 在线播放亚洲一区| 国产精品久久精品日日| 激情综合一区二区三区| 5月丁香婷婷综合| 亚洲男人的天堂一区二区 | 亚洲电影激情视频网站| 国产91精品入口| 精品电影一区二区三区| 亚洲123区在线观看| 色www精品视频在线观看| 国产欧美综合在线| 国产在线视频一区二区三区| 欧美另类久久久品| 亚洲妇女屁股眼交7| 91麻豆蜜桃一区二区三区| 中文字幕第一区二区| 国产成a人亚洲| 久久色.com| 国产在线视频一区二区| 久久丝袜美腿综合| 国产一区二区三区久久悠悠色av| 日韩欧美综合在线| 精品一区免费av| 精品日韩欧美在线| 韩国三级在线一区| 2023国产一二三区日本精品2022| 伦理电影国产精品| 精品少妇一区二区三区免费观看| 免费成人结看片| 久久在线免费观看| 国产一区二区三区不卡在线观看| 欧美成人a在线| 国产精品一区不卡| 国产精品色噜噜| 91黄色免费网站| 天天综合网 天天综合色| 欧美福利视频一区| 狠狠色丁香久久婷婷综合_中| 久久色中文字幕| 成人午夜在线视频| 亚洲一区二区在线免费观看视频| 欧美伊人久久大香线蕉综合69| 五月天激情综合网| 精品国产乱码久久久久久免费| 国产精品香蕉一区二区三区| 中文字幕制服丝袜一区二区三区| 91免费版pro下载短视频| 亚洲欧美偷拍三级| 91麻豆精品91久久久久久清纯| 精品亚洲欧美一区| 亚洲裸体xxx| 日韩视频免费观看高清完整版| 国产一区免费电影| 一区二区三区免费在线观看| 69堂成人精品免费视频| 国产传媒日韩欧美成人| 亚洲精品乱码久久久久久黑人| 欧美一区二区三区啪啪| 风流少妇一区二区| 亚洲成av人片在线| 国产性色一区二区| 欧美丝袜自拍制服另类| 国产河南妇女毛片精品久久久| 亚洲欧美日韩在线| 日韩精品一区二| 日本乱人伦aⅴ精品| 久久99精品久久只有精品| 毛片av一区二区三区| 国产精品成人一区二区艾草 | 久久久久国色av免费看影院| 一本色道久久综合亚洲91| 日本色综合中文字幕| 国产精品视频一二| 日韩三级.com| 91国偷自产一区二区开放时间| 国产一区二区三区| 亚洲成人在线免费| 中文字幕日本乱码精品影院| 欧美一级精品在线| 在线视频国内一区二区| 高清日韩电视剧大全免费| 日本中文字幕一区| 一区二区三区中文在线| 国产精品欧美久久久久一区二区| 欧美一卡二卡三卡| 欧美三级电影在线看| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 99精品视频一区| 狠狠色丁香婷综合久久| 视频精品一区二区| 亚洲一区日韩精品中文字幕| 国产精品家庭影院| 中文字幕av一区二区三区高| 久久综合999| 欧美xxxxxxxx| 日韩欧美亚洲另类制服综合在线| 欧美日韩黄色一区二区| 91久久精品国产91性色tv| 成人激情校园春色| 成人一区二区三区中文字幕| 韩国精品主播一区二区在线观看| 首页国产丝袜综合| 午夜视频在线观看一区二区 | 国产精品欧美一区喷水| 亚洲国产成人私人影院tom | www.日本不卡| 成人永久看片免费视频天堂| 成人一区在线看| 91网站视频在线观看| 99久久精品99国产精品 | 日韩亚洲欧美在线观看| 91精品国产手机| 日韩午夜中文字幕| 精品剧情在线观看| 久久精品日产第一区二区三区高清版| 精品国产免费一区二区三区香蕉| 26uuu国产电影一区二区| 精品国产电影一区二区| 久久久久久夜精品精品免费| 天堂影院一区二区| 免费看欧美美女黄的网站| 精品一区二区在线免费观看| 国产一区二区三区蝌蚪| 粉嫩绯色av一区二区在线观看 | 久久国产乱子精品免费女| 久久99国产精品久久99果冻传媒| 国产老女人精品毛片久久| 成人的网站免费观看| 在线免费亚洲电影| 日韩网站在线看片你懂的| 久久久久久久一区| 亚洲欧美中日韩| 日韩黄色免费电影| 国产精品一区二区三区网站| 99国产精品国产精品毛片| 欧美日韩一级片网站| 欧美电影免费观看高清完整版在 | 在线观看日韩国产| 日韩精品一区二区三区swag| 亚洲国产成人在线| 天天色天天爱天天射综合| 国产一区二区在线视频| 色综合久久九月婷婷色综合| 欧美二区乱c少妇| 国产精品网曝门| 日本美女一区二区| 成人av一区二区三区| 67194成人在线观看| 免费看日韩精品| 波多野结衣亚洲一区| 91精品国产91久久综合桃花| 中文字幕制服丝袜成人av| 日一区二区三区| 成人aa视频在线观看| 日韩一区二区在线看片| 国产精品美女久久久久高潮| 视频一区在线视频| 波波电影院一区二区三区| 欧美一区二区三区的| 亚洲精品成人精品456| 国产老女人精品毛片久久| 制服丝袜日韩国产| 亚洲日本在线看| 国产一区三区三区| 欧美一级xxx| 亚洲一区日韩精品中文字幕| 成人在线视频一区二区| 精品999久久久| 天天做天天摸天天爽国产一区| 99精品热视频| 久久蜜桃av一区精品变态类天堂| 婷婷激情综合网| 欧美在线观看视频在线| 综合欧美一区二区三区| 国产激情视频一区二区三区欧美| 欧美一级在线观看| 五月天婷婷综合| 欧美日韩亚洲综合一区二区三区| 国产精品污www在线观看| 国产精品一级片| 久久综合中文字幕| 久久精品国产99国产精品| 91精品国产综合久久久蜜臀图片| 亚洲国产日韩在线一区模特| 色欲综合视频天天天| 亚洲人成伊人成综合网小说| 成人黄色av电影| 亚洲欧洲另类国产综合| 成人a免费在线看| 综合色中文字幕| 色悠悠久久综合|