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.
 
 
 
 
 
 

270 lines
5.9 KiB

/*******************************************************************************
*
* (C) COPYRIGHT MICROSOFT CORP., 1999
*
* TITLE: fstidev.cpp
*
* VERSION: 1.0
*
* AUTHOR: ByronC
*
* DATE: 7 Dec, 1999
*
* DESCRIPTION:
* Implmentation for fake StiDevice which gets handed down to WIA
* driver.
*
*******************************************************************************/
#include "precomp.h"
#include "stiexe.h"
#include "device.h"
#include "assert.h"
#include "wiapriv.h"
#include "lockmgr.h"
#include "fstidev.h"
//
// Default constructor
//
FakeStiDevice::FakeStiDevice()
{
m_cRef = 0;
m_pDevice = NULL;
}
//
// Constructor which takes in the device name and returns a pointer to this
// IStiDevice interface
//
FakeStiDevice::FakeStiDevice(BSTR bstrDeviceName, IStiDevice **ppStiDevice)
{
if (SUCCEEDED(Init(bstrDeviceName))) {
QueryInterface(IID_IStiDevice, (VOID**)ppStiDevice);
} else {
*ppStiDevice = NULL;
}
}
//
// Destructor
//
FakeStiDevice::~FakeStiDevice()
{
m_cRef = 0;
}
//
// Initialization methods
//
HRESULT FakeStiDevice::Init(ACTIVE_DEVICE *pDevice)
{
m_pDevice = pDevice;
if (pDevice) {
return S_OK;
} else {
return E_POINTER;
}
}
HRESULT FakeStiDevice::Init(BSTR bstrDeviceName)
{
HRESULT hr = S_OK;
/* This is all dead code. The Fake STI Device object implementation
is no longer needed for ensuring mutually exclusive locking - it is
now done automatically by the wrapper.
ACTIVE_DEVICE *pDevice;
USES_CONVERSION;
pDevice = g_pDevMan->IsInList(DEV_MAN_IN_LIST_DEV_ID, bstrDeviceName);
if(pDevice) {
m_pDevice = pDevice;
//
// We don't need to maintain a ref count on pDevice,
// since we're only used while the ACTIVE_DEVICE
// lives.
//
pDevice->Release();
} else {
hr = E_FAIL;
}
*/
return hr;
}
//
// IUnknown methods. Note: This object cannot be delegated and
// does not use aggregation.
//
HRESULT _stdcall FakeStiDevice::QueryInterface(const IID& iid, void** ppv)
{
if (ppv == NULL)
{
return E_POINTER;
}
if (ppv != NULL) {
*ppv = NULL;
}
if (iid == IID_IUnknown) {
*ppv = (IUnknown*) this;
} else if (iid == IID_IStiDevice) {
*ppv = (IStiDevice*) this;
} else {
return E_NOINTERFACE;
}
AddRef();
return S_OK;
}
ULONG _stdcall FakeStiDevice::AddRef(void)
{
InterlockedIncrement(&m_cRef);
return m_cRef;
}
ULONG _stdcall FakeStiDevice::Release(void)
{
LONG cRef = m_cRef;
InterlockedDecrement(&m_cRef);
return cRef;
}
//
// IStiDevice Methods. The only methods implemented are:
//
// LockDevice
// UnLockDevice
//
// All other methods return E_NOTIMPL
//
HRESULT _stdcall FakeStiDevice::LockDevice( DWORD dwTimeOut)
{
HRESULT hr = S_OK;
/* This is all dead code. The Fake STI Device object implementation
is no longer needed for ensuring mutually exclusive locking - it is
now done automatically by the wrapper.
if (m_pDevice) {
//
// AddRef the ACTIVE_DEVICE so it doesn't attempt to
// unload us while we're in use.
//
m_pDevice->AddRef();
hr = g_pStiLockMgr->RequestLock(m_pDevice, 60000);
if (FAILED(hr)) {
m_pDevice->Release();
}
}
*/
return hr;
}
HRESULT _stdcall FakeStiDevice::UnLockDevice( )
{
HRESULT hr = S_OK/*E_FAIL*/;
/* This is all dead code. The Fake STI Device object implementation
is no longer needed for ensuring mutually exclusive locking - it is
now done automatically by the wrapper.
if (m_pDevice) {
hr = g_pStiLockMgr->RequestUnlock(m_pDevice);
m_pDevice->Release();
}
*/
return hr;
}
HRESULT _stdcall FakeStiDevice::Initialize(HINSTANCE hinst,LPCWSTR pwszDeviceName,DWORD dwVersion,DWORD dwMode)
{
return E_NOTIMPL;
}
HRESULT _stdcall FakeStiDevice::GetCapabilities( PSTI_DEV_CAPS pDevCaps)
{
return E_NOTIMPL;
}
HRESULT _stdcall FakeStiDevice::GetStatus( PSTI_DEVICE_STATUS pDevStatus)
{
return E_NOTIMPL;
}
HRESULT _stdcall FakeStiDevice::DeviceReset( )
{
return E_NOTIMPL;
}
HRESULT _stdcall FakeStiDevice::Diagnostic( LPSTI_DIAG pBuffer)
{
return E_NOTIMPL;
}
HRESULT _stdcall FakeStiDevice::Escape( STI_RAW_CONTROL_CODE EscapeFunction,LPVOID lpInData,DWORD cbInDataSize,LPVOID pOutData,DWORD dwOutDataSize,LPDWORD pdwActualData)
{
return E_NOTIMPL;
}
HRESULT _stdcall FakeStiDevice::GetLastError( LPDWORD pdwLastDeviceError)
{
return E_NOTIMPL;
}
HRESULT _stdcall FakeStiDevice::RawReadData( LPVOID lpBuffer,LPDWORD lpdwNumberOfBytes,LPOVERLAPPED lpOverlapped)
{
return E_NOTIMPL;
}
HRESULT _stdcall FakeStiDevice::RawWriteData( LPVOID lpBuffer,DWORD nNumberOfBytes,LPOVERLAPPED lpOverlapped)
{
return E_NOTIMPL;
}
HRESULT _stdcall FakeStiDevice::RawReadCommand( LPVOID lpBuffer,LPDWORD lpdwNumberOfBytes,LPOVERLAPPED lpOverlapped)
{
return E_NOTIMPL;
}
HRESULT _stdcall FakeStiDevice::RawWriteCommand( LPVOID lpBuffer,DWORD nNumberOfBytes,LPOVERLAPPED lpOverlapped)
{
return E_NOTIMPL;
}
HRESULT _stdcall FakeStiDevice::Subscribe( LPSTISUBSCRIBE lpSubsribe)
{
return E_NOTIMPL;
}
HRESULT _stdcall FakeStiDevice::GetLastNotificationData(LPSTINOTIFY lpNotify)
{
return E_NOTIMPL;
}
HRESULT _stdcall FakeStiDevice::UnSubscribe( )
{
return E_NOTIMPL;
}
HRESULT _stdcall FakeStiDevice::GetLastErrorInfo( STI_ERROR_INFO *pLastErrorInfo)
{
return E_NOTIMPL;
}