⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wiadriver.h

📁 winddk src目录下的WDM源码压缩!
💻 H
📖 第 1 页 / 共 2 页
字号:
/**************************************************************************
*
*  Copyright (c) 2003  Microsoft Corporation
*
*  Title: wiadriver.h
*
*  Description: This contains the WIA driver class definition and needed
*               defines.
*
***************************************************************************/

#pragma once

#define MY_WIA_ERROR_HANDLING_PROP         WIA_PRIVATE_ITEMPROP
#define MY_WIA_ERROR_HANDLING_PROP_STR     L"My error handling property"

#define ERROR_HANDLING_NONE                0x00000000
#define ERROR_HANDLING_WARMING_UP          0x00000001
#define ERROR_HANDLING_COVER_OPEN          0x00000002
#define ERROR_HANDLING_PRIVATE_ERROR       0x00000004
#define ERROR_HANDLING_UNHANDLED_STATUS    0x00000008
#define ERROR_HANDLING_UNHANDLED_ERROR     0x00000010

//
// The only purpose of the MY_TEST_FILTER_PROP property is to illustrate
// the IWiaImageFilter::ApplyProperties method. It is never used by the 
// driver itself.
//
#define MY_TEST_FILTER_PROP                WIA_PRIVATE_ITEMPROP+1
#define MY_TEST_FILTER_PROP_STR            L"My test filter property"

#define REG_ENTRY_DEVICEDATA            TEXT("DeviceData")
#define REG_ENTRY_STORAGEPATH           TEXT("StoragePath")

#define WIA_DRIVER_ROOT_NAME            L"Root"    // THIS SHOULD NOT BE LOCALIZED
#define WIA_DRIVER_FLATBED_NAME         L"Flatbed" // THIS SHOULD NOT BE LOCALIZED
#define WIA_DRIVER_FEEDER_NAME          L"Feeder"  // THIS SHOULD NOT BE LOCALIZED
#define WIA_DRIVER_FILM_NAME            L"Film"    // THIS SHOULD NOT BE LOCALIZED
#define WIA_DRIVER_STORAGE_NAME         L"Storage" // THIS SHOULD NOT BE LOCALIZED

#define DEFAULT_LOCK_TIMEOUT            1000
#define DEFAULT_NUM_DRIVER_EVENTS       2
#define DEFAULT_NUM_DRIVER_COMMANDS     0
#define DEFAULT_NUM_DRIVER_FORMATS      2

typedef struct _WIA_DRIVER_ITEM_CONTEXT
{
    GUID    guidItemCategory;
    LONG    lNumItemsStored;
    BSTR    bstrStorageDataPath;
    ULONG   ulFeederTransferCount;
}WIA_DRIVER_ITEM_CONTEXT,*PWIA_DRIVER_ITEM_CONTEXT;

class INonDelegatingUnknown {
public:
    virtual STDMETHODIMP NonDelegatingQueryInterface(REFIID riid,LPVOID *ppvObj) = 0;
    virtual STDMETHODIMP_(ULONG) NonDelegatingAddRef() = 0;
    virtual STDMETHODIMP_(ULONG) NonDelegatingRelease() = 0;
};

class CWIADriver : public INonDelegatingUnknown, // NonDelegatingUnknown
                   public IStiUSD,               // STI USD interface
                   public IWiaMiniDrv            // WIA Minidriver interface
{
public:

    ///////////////////////////////////////////////////////////////////////////
    // Construction/Destruction Section
    ///////////////////////////////////////////////////////////////////////////

    CWIADriver(__in_opt LPUNKNOWN punkOuter);
    ~CWIADriver();

private:

    ///////////////////////////////////////////////////////////////////////////
    // WIA driver internals
    ///////////////////////////////////////////////////////////////////////////

    LONG                    m_cRef;                     // Device object reference count.
    LPUNKNOWN               m_punkOuter;                // Pointer to outer unknown.
    IStiDevice             *m_pIStiDevice;              // STI device interface for locking
    IWiaDrvItem            *m_pIDrvItemRoot;            // WIA root item
    LONG                    m_lClientsConnected;        // number of applications connected
    CWIACapabilityManager   m_CapabilityManager;        // WIA driver capabilities
    WIA_FORMAT_INFO        *m_pFormats;                 // WIA format information
    ULONG                   m_ulNumFormats;             // number of data formats
    BSTR                    m_bstrDeviceID;             // WIA device ID;
    ULONG_PTR               m_ulImageLibraryToken;      // GDI plus token
    WiaDevice               m_WiaDevice;                // Simulated device object
    WCHAR                   m_wszStoragePath[MAX_PATH]; // WIA storage path
    BSTR                    m_bstrRootFullItemName;     // WIA root item (full item name)

public:

    ///////////////////////////////////////////////////////////////////////////
    // Standard COM Section
    ///////////////////////////////////////////////////////////////////////////

    STDMETHODIMP QueryInterface(__in REFIID riid, __out LPVOID * ppvObj);

    STDMETHODIMP_(ULONG) AddRef();

    STDMETHODIMP_(ULONG) Release();

    ///////////////////////////////////////////////////////////////////////////
    // IStiUSD Interface Section (for all WIA drivers)
    ///////////////////////////////////////////////////////////////////////////

    STDMETHOD(Initialize)(THIS_
                          __in  PSTIDEVICECONTROL pHelDcb,
                                DWORD             dwStiVersion,
                          __in  HKEY              hParametersKey);

    STDMETHOD(GetCapabilities)(THIS_ __out PSTI_USD_CAPS pDevCaps);

    STDMETHOD(GetStatus)(THIS_ __inout PSTI_DEVICE_STATUS pDevStatus);

    STDMETHOD(DeviceReset)(THIS);

    STDMETHOD(Diagnostic)(THIS_ __out LPDIAG pBuffer);

    STDMETHOD(Escape)(THIS_
                                                    STI_RAW_CONTROL_CODE EscapeFunction,
                      __in_bcount(cbInDataSize)     LPVOID               lpInData,
                                                    DWORD                cbInDataSize,
                      __out_bcount(cbOutDataSize)   LPVOID               pOutData,
                                                    DWORD                dwOutDataSize,
                      __out                         LPDWORD              pdwActualData);

    STDMETHOD(GetLastError)(THIS_ __out LPDWORD pdwLastDeviceError);

    STDMETHOD(LockDevice)();

    STDMETHOD(UnLockDevice)();

    STDMETHOD(RawReadData)(THIS_
                           __out_bcount(*lpdwNumberOfBytes)   LPVOID       lpBuffer,
                           __out                              LPDWORD      lpdwNumberOfBytes,
                           __out                              LPOVERLAPPED lpOverlapped);

    STDMETHOD(RawWriteData)(THIS_
                            __in_bcount(dwNumberOfBytes) LPVOID       lpBuffer,
                                                         DWORD        dwNumberOfBytes,
                            __out                        LPOVERLAPPED lpOverlapped);

    STDMETHOD(RawReadCommand)(THIS_
                              __out_bcount(*lpdwNumberOfBytes)    LPVOID       lpBuffer,
                              __out                               LPDWORD      lpdwNumberOfBytes,
                              __out                               LPOVERLAPPED lpOverlapped);

    STDMETHOD(RawWriteCommand)(THIS_
                               __in_bcount(*dwNumberOfBytes) LPVOID       lpBuffer,
                                                             DWORD        dwNumberOfBytes,
                               __out                         LPOVERLAPPED lpOverlapped);

    STDMETHOD(SetNotificationHandle)(THIS_ __in HANDLE hEvent);

    STDMETHOD(GetNotificationData)(THIS_ __in LPSTINOTIFY lpNotify);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -