Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

123 lines
4.7 KiB

// DeviceControl.h : Declaration of the CDeviceControl
#ifndef __DEVICECONTROL_H_
#define __DEVICECONTROL_H_
#include "resource.h" // main symbols
#include "ioblockdefs.h"
//////////////////////////////////////////
// Taken from NTDDK.H //
//////////////////////////////////////////
#define FILE_ANY_ACCESS 0
#define FILE_READ_ACCESS ( 0x0001 ) // file & pipe
#define FILE_WRITE_ACCESS ( 0x0002 ) // file & pipe
#define METHOD_BUFFERED 0
#define METHOD_IN_DIRECT 1
#define METHOD_OUT_DIRECT 2
#define METHOD_NEITHER 3
#define CTL_CODE( DeviceType, Function, Method, Access ) ( \
((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \
)
//////////////////////////////////////////
// Taken from USBSCAN.H //
//////////////////////////////////////////
#define FILE_DEVICE_USB_SCAN 0x8000
#define IOCTL_INDEX 0x0800
#define IOCTL_GET_VERSION CTL_CODE(FILE_DEVICE_USB_SCAN,IOCTL_INDEX, METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_CANCEL_IO CTL_CODE(FILE_DEVICE_USB_SCAN,IOCTL_INDEX+1, METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_WAIT_ON_DEVICE_EVENT CTL_CODE(FILE_DEVICE_USB_SCAN,IOCTL_INDEX+2, METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_READ_REGISTERS CTL_CODE(FILE_DEVICE_USB_SCAN,IOCTL_INDEX+3, METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_WRITE_REGISTERS CTL_CODE(FILE_DEVICE_USB_SCAN,IOCTL_INDEX+4, METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_GET_CHANNEL_ALIGN_RQST CTL_CODE(FILE_DEVICE_USB_SCAN,IOCTL_INDEX+5, METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_GET_DEVICE_DESCRIPTOR CTL_CODE(FILE_DEVICE_USB_SCAN,IOCTL_INDEX+6, METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_RESET_PIPE CTL_CODE(FILE_DEVICE_USB_SCAN,IOCTL_INDEX+7, METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_GET_USB_DESCRIPTOR CTL_CODE(FILE_DEVICE_USB_SCAN,IOCTL_INDEX+8, METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SEND_USB_REQUEST CTL_CODE(FILE_DEVICE_USB_SCAN,IOCTL_INDEX+9, METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_GET_PIPE_CONFIGURATION CTL_CODE(FILE_DEVICE_USB_SCAN,IOCTL_INDEX+10,METHOD_BUFFERED,FILE_ANY_ACCESS)
typedef struct _IO_BLOCK {
IN unsigned uOffset;
IN unsigned uLength;
IN OUT PUCHAR pbyData;
IN unsigned uIndex;
} IO_BLOCK, *PIO_BLOCK;
///////////////////////////////////////////
#define IOCTL_GET_DEVICE_INFO 0x0
#define IOCTL_GET_DEVICE_STATUS 0x1
#define IOCTL_READ_WRITE_DATA 0x82
#define IOCTL_EPP_ADDR 0x83
#define IOCTL_EPP_READ 0x84
#define IOCTL_EPP_WRITE 0x85
#define IOCTL_SPP_STATUS 0x86
#define IOCTL_SPP_CONTROL 0x87
#define IOCTL_SPP_DATA_BUS 0x88
#define IOCTL_GPIO_OE 0x89
#define IOCTL_GPIO_READ 0x8A
#define IOCTL_GPIO_WRITE 0x8B
////////////////////////////////////////////////
// Custom BITS structure for bit manipulation //
////////////////////////////////////////////////
typedef struct _BITS{
BYTE b0 :1;
BYTE b1 :1;
BYTE b2 :1;
BYTE b3 :1;
BYTE b4 :1;
BYTE b5 :1;
BYTE b6 :1;
BYTE b7 :1;
}BITS;
/////////////////////////////////////////////////////////////////////////////
// CDeviceControl
class ATL_NO_VTABLE CDeviceControl :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CDeviceControl, &CLSID_DeviceControl>,
public IDispatchImpl<IDeviceControl, &IID_IDeviceControl, &LIBID_WIAFBLib>,
public IObjectSafetyImpl<CDeviceControl, INTERFACESAFE_FOR_UNTRUSTED_CALLER>
{
public:
SCANSETTINGS *m_pScannerSettings;
BYTE *m_pBuffer;
LONG m_lBufferSize;
DWORD m_dwBytesRead;
CDeviceControl()
{
m_pBuffer = NULL;
m_lBufferSize = 0;
m_dwBytesRead = 0;
}
DECLARE_REGISTRY_RESOURCEID(IDR_DEVICECONTROL)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CDeviceControl)
COM_INTERFACE_ENTRY(IDeviceControl)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
// IDeviceControl
public:
STDMETHOD(RawWrite)(LONG lPipeNum,VARIANT *pvbuffer,LONG lbuffersize,LONG lTimeout);
STDMETHOD(RawRead)(LONG lPipeNum,VARIANT *pvbuffer,LONG lbuffersize,LONG *plbytesread,LONG lTimeout);
STDMETHOD(ScanRead)(LONG lPipeNum,LONG lBytesToRead, LONG *plBytesRead, LONG lTimeout);
STDMETHOD(RegisterWrite)(LONG lPipeNum,VARIANT *pvbuffer,LONG lTimeout);
STDMETHOD(RegisterRead)(LONG lPipeNum,LONG lRegNumber, VARIANT *pvbuffer,LONG lTimeout);
STDMETHOD(SetBitsInByte)(BYTE bMask, BYTE bValue, BYTE *pbyte);
};
#endif //__DEVICECONTROL_H_