diff options
Diffstat (limited to 'print/OEM Printer Customization Plug-in Samples/C++/ThemeUI/intrface.cpp')
| -rw-r--r-- | print/OEM Printer Customization Plug-in Samples/C++/ThemeUI/intrface.cpp | 575 |
1 files changed, 0 insertions, 575 deletions
diff --git a/print/OEM Printer Customization Plug-in Samples/C++/ThemeUI/intrface.cpp b/print/OEM Printer Customization Plug-in Samples/C++/ThemeUI/intrface.cpp deleted file mode 100644 index 3b966a58..00000000 --- a/print/OEM Printer Customization Plug-in Samples/C++/ThemeUI/intrface.cpp +++ /dev/null @@ -1,575 +0,0 @@ -// 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. -// -// Copyright 1998 - 2003 Microsoft Corporation. All Rights Reserved. -// -// FILE: Intrface.cpp -// -// -// PURPOSE: Implementation of interface for PScript4, PScript5, Unidrv4, -// Unidrv5 UI plug-ins. -// - -#include "precomp.h" - -#include "oemui.h" -#include "debug.h" -#include "intrface.h" - -// This indicates to Prefast that this is a usermode driver file. -_Analysis_mode_(_Analysis_code_type_user_driver_); - - -//////////////////////////////////////////////////////// -// Internal Globals -//////////////////////////////////////////////////////// - -static long g_cComponents = 0 ; // Count of active components -static long g_cServerLocks = 0 ; // Count of locks - - - -//////////////////////////////////////////////////////////////////////////////// -// -// IOemUI body -// -IOemUI::~IOemUI() -{ - // Make sure that helper interface is released. - if(NULL != m_pOEMHelp) - { - m_pOEMHelp->Release(); - m_pOEMHelp = NULL; - } - - // If this instance of the object is being deleted, then the reference - // count should be zero. - assert(0 == m_cRef); -} - -HRESULT __stdcall IOemUI::QueryInterface(const IID& iid, void** ppv) -{ - VERBOSE(DLLTEXT("IOemUI:QueryInterface entry.\r\n\r\n")); - if (iid == IID_IUnknown) - { - *ppv = static_cast<IUnknown*>(this); - VERBOSE(DLLTEXT("IOemUI:Return pointer to IUnknown.\r\n\r\n")); - } - else if (iid == IID_IPrintOemUI) - { - *ppv = static_cast<IPrintOemUI*>(this) ; - VERBOSE(DLLTEXT("IOemUI:Return pointer to IPrintOemUI.\r\n")); - } - else - { - VERBOSE(DLLTEXT("IOemUI::QueryInterface interface not supported.\r\n")); - *ppv = NULL ; - return E_NOINTERFACE ; - } - reinterpret_cast<IUnknown*>(*ppv)->AddRef() ; - return S_OK ; -} - -ULONG __stdcall IOemUI::AddRef() -{ - VERBOSE(DLLTEXT("IOemUI:AddRef entry.\r\n")); - return InterlockedIncrement(&m_cRef) ; -} - -_At_(this, __drv_freesMem(object)) -ULONG __stdcall IOemUI::Release() -{ - VERBOSE(DLLTEXT("IOemUI:Release entry.\r\n")); - ASSERT( 0 != m_cRef); - ULONG cRef = InterlockedDecrement(&m_cRef); - if (0 == cRef) - { - delete this; - - } - return cRef; -} - -HRESULT __stdcall IOemUI::PublishDriverInterface( - IUnknown *pIUnknown) -{ - VERBOSE(DLLTEXT("IOemUI:PublishDriverInterface entry.\r\n")); - - // Need to store pointer to Driver Helper functions, if we already haven't. - if (m_pOEMHelp == NULL) - { - HRESULT hResult; - - - // Get Interface to Helper Functions. - hResult = pIUnknown->QueryInterface(IID_IPrintOemDriverUI, (void** ) &(m_pOEMHelp)); - - if(!SUCCEEDED(hResult)) - { - // Make sure that interface pointer reflects interface query failure. - m_pOEMHelp = NULL; - - return E_FAIL; - } - } - - return S_OK; -} - -HRESULT __stdcall IOemUI::GetInfo( - DWORD dwMode, - PVOID pBuffer, - DWORD cbSize, - PDWORD pcbNeeded) -{ - VERBOSE(DLLTEXT("IOemUI::GetInfo entry.\r\r\n")); - - // Validate parameters. - if( (NULL == pcbNeeded) - || - ( (OEMGI_GETSIGNATURE != dwMode) - && - (OEMGI_GETVERSION != dwMode) - && - (OEMGI_GETPUBLISHERINFO != dwMode) - ) - ) - { - WARNING(DLLTEXT("IOemUI::GetInfo() exit pcbNeeded is NULL! ERROR_INVALID_PARAMETER\r\r\n")); - SetLastError(ERROR_INVALID_PARAMETER); - return E_FAIL; - } - - // Set expected buffer size and number of bytes written. - *pcbNeeded = sizeof(DWORD); - - // Check buffer size is sufficient. - if((cbSize < *pcbNeeded) || (NULL == pBuffer)) - { - WARNING(DLLTEXT("IOemUI::GetInfo() exit insufficient buffer!\r\r\n")); - SetLastError(ERROR_INSUFFICIENT_BUFFER); - return E_FAIL; - } - - switch(dwMode) - { - // OEM DLL Signature - case OEMGI_GETSIGNATURE: - *(PDWORD)pBuffer = OEM_SIGNATURE; - break; - - // OEM DLL version - case OEMGI_GETVERSION: - *(PDWORD)pBuffer = OEM_VERSION; - break; - - // dwMode not supported. - default: - // Set written bytes to zero since nothing was written. - WARNING(DLLTEXT("IOemUI::GetInfo() exit mode not supported.\r\r\n")); - *pcbNeeded = 0; - SetLastError(ERROR_NOT_SUPPORTED); - return E_FAIL; - } - - VERBOSE(DLLTEXT("IOemUI::GetInfo() exit S_OK.\r\r\n")); - return S_OK; -} - -HRESULT __stdcall IOemUI::DevMode( - DWORD dwMode, - POEMDMPARAM pOemDMParam) -{ - VERBOSE(DLLTEXT("IOemUI:DevMode entry.\r\n")); - - return hrOEMDevMode(dwMode, pOemDMParam); -} - -HRESULT __stdcall IOemUI::CommonUIProp( - DWORD dwMode, - POEMCUIPPARAM pOemCUIPParam) -{ - VERBOSE(DLLTEXT("IOemUI:CommonUIProp entry.\r\n")); - - return hrOEMPropertyPage(dwMode, pOemCUIPParam); -} - - -HRESULT __stdcall IOemUI::DocumentPropertySheets( - PPROPSHEETUI_INFO pPSUIInfo, - LPARAM lParam) -{ - VERBOSE(DLLTEXT("IOemUI:DocumentPropertySheets entry.\r\n")); - - return hrOEMDocumentPropertySheets(pPSUIInfo, lParam, m_pOEMHelp); -} - -HRESULT __stdcall IOemUI::DevicePropertySheets( - PPROPSHEETUI_INFO pPSUIInfo, - LPARAM lParam) -{ - VERBOSE(DLLTEXT("IOemUI:DevicePropertySheets entry.\r\n")); - - return hrOEMDevicePropertySheets(pPSUIInfo, lParam); -} - -HRESULT __stdcall IOemUI::DeviceCapabilities( - POEMUIOBJ poemuiobj, - HANDLE hPrinter, - _In_ PWSTR pDeviceName, - WORD wCapability, - PVOID pOutput, - PDEVMODE pPublicDM, - PVOID pOEMDM, - DWORD dwOld, - DWORD *dwResult) -{ - VERBOSE(DLLTEXT("IOemUI:DeviceCapabilities entry.\r\n")); - - UNREFERENCED_PARAMETER(poemuiobj); - UNREFERENCED_PARAMETER(hPrinter); - UNREFERENCED_PARAMETER(pDeviceName); - UNREFERENCED_PARAMETER(wCapability); - UNREFERENCED_PARAMETER(pOutput); - UNREFERENCED_PARAMETER(pPublicDM); - UNREFERENCED_PARAMETER(pOEMDM); - UNREFERENCED_PARAMETER(dwOld); - UNREFERENCED_PARAMETER(dwResult); - - return E_NOTIMPL; -} - -HRESULT __stdcall IOemUI::DevQueryPrintEx( - POEMUIOBJ poemuiobj, - PDEVQUERYPRINT_INFO pDQPInfo, - PDEVMODE pPublicDM, - PVOID pOEMDM) -{ - VERBOSE(DLLTEXT("IOemUI:DevQueryPrintEx entry.\r\n")); - - UNREFERENCED_PARAMETER(poemuiobj); - UNREFERENCED_PARAMETER(pDQPInfo); - UNREFERENCED_PARAMETER(pPublicDM); - UNREFERENCED_PARAMETER(pOEMDM); - - return E_NOTIMPL; -} - -HRESULT __stdcall IOemUI::UpgradePrinter( - DWORD dwLevel, - PBYTE pDriverUpgradeInfo) -{ - VERBOSE(DLLTEXT("IOemUI:UpgradePrinter entry.\r\n")); - - UNREFERENCED_PARAMETER(dwLevel); - UNREFERENCED_PARAMETER(pDriverUpgradeInfo); - - return E_NOTIMPL; -} - -HRESULT __stdcall IOemUI::PrinterEvent( - _In_ PWSTR pPrinterName, - INT iDriverEvent, - DWORD dwFlags, - LPARAM lParam) -{ - VERBOSE(DLLTEXT("IOemUI:PrinterEvent entry.\r\n")); - - UNREFERENCED_PARAMETER(pPrinterName); - UNREFERENCED_PARAMETER(iDriverEvent); - UNREFERENCED_PARAMETER(dwFlags); - UNREFERENCED_PARAMETER(lParam); - - return E_NOTIMPL; -} - -HRESULT __stdcall IOemUI::DriverEvent( - DWORD dwDriverEvent, - DWORD dwLevel, - LPBYTE pDriverInfo, - LPARAM lParam) -{ - VERBOSE(DLLTEXT("IOemUI:DriverEvent entry.\r\n")); - - UNREFERENCED_PARAMETER(dwDriverEvent); - UNREFERENCED_PARAMETER(dwLevel); - UNREFERENCED_PARAMETER(pDriverInfo); - UNREFERENCED_PARAMETER(lParam); - - return E_NOTIMPL; -}; - - -#define PROFILE_NAME L"OEMPROFILE.icm\0" - -HRESULT __stdcall IOemUI::QueryColorProfile( - HANDLE hPrinter, - POEMUIOBJ poemuiobj, - PDEVMODE pPublicDM, - PVOID pOEMDM, - ULONG ulQueryMode, - VOID *pvProfileData, - ULONG *pcbProfileData, - FLONG *pflProfileData) -{ - HRESULT Result = E_FAIL; - - - VERBOSE(DLLTEXT("IOemUI:QueryColorProfile entry.\r\n")); - - UNREFERENCED_PARAMETER(hPrinter); - UNREFERENCED_PARAMETER(poemuiobj); - UNREFERENCED_PARAMETER(pPublicDM); - UNREFERENCED_PARAMETER(pOEMDM); - - if(QCP_DEVICEPROFILE == ulQueryMode) - { - if(NULL == pvProfileData) - { - *pcbProfileData = sizeof(PROFILE_NAME); - SetLastError(ERROR_INSUFFICIENT_BUFFER); - } - else - { - if(*pcbProfileData < sizeof(PROFILE_NAME)) - { - *pcbProfileData = sizeof(PROFILE_NAME); - SetLastError(ERROR_INSUFFICIENT_BUFFER); - } - else - { - Result = StringCbCopy((LPWSTR)pvProfileData, *pcbProfileData, PROFILE_NAME); - *pcbProfileData = sizeof(PROFILE_NAME); - *pflProfileData = QCP_PROFILEDISK; - - if(FAILED(Result)) - { - SetLastError(Result); - } - } - } - } - - return Result; -}; - -HRESULT __stdcall IOemUI::FontInstallerDlgProc( - HWND hWnd, - UINT usMsg, - WPARAM wParam, - LPARAM lParam) -{ - VERBOSE(DLLTEXT("IOemUI:FontInstallerDlgProc entry.\r\n")); - - UNREFERENCED_PARAMETER(hWnd); - UNREFERENCED_PARAMETER(usMsg); - UNREFERENCED_PARAMETER(wParam); - UNREFERENCED_PARAMETER(lParam); - - return E_NOTIMPL; -}; - -HRESULT __stdcall IOemUI::UpdateExternalFonts( - HANDLE hPrinter, - HANDLE hHeap, - _In_ PWSTR pwstrCartridges) -{ - VERBOSE(DLLTEXT("IOemUI:UpdateExternalFonts entry.\r\n")); - - UNREFERENCED_PARAMETER(hPrinter); - UNREFERENCED_PARAMETER(hHeap); - UNREFERENCED_PARAMETER(pwstrCartridges); - - return E_NOTIMPL; -} - -//////////////////////////////////////////////////////////////////////////////// -// -// oem class factory -// -class IOemCF : public IClassFactory -{ -public: - // *** IUnknown methods *** - - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj); - - STDMETHOD_(ULONG,AddRef) (THIS); - - // the _At_ tag here tells prefast that once release - // is called, the memory should not be considered leaked - _At_(this, __drv_freesMem(object)) - STDMETHOD_(ULONG,Release) (THIS); - - // *** IClassFactory methods *** - STDMETHOD(CreateInstance) (THIS_ - LPUNKNOWN pUnkOuter, - REFIID riid, - LPVOID FAR* ppvObject); - STDMETHOD(LockServer) (THIS_ BOOL bLock); - - - // Constructor - IOemCF(): m_cRef(1) { }; - ~IOemCF() { }; - -protected: - LONG m_cRef; - -}; - -/////////////////////////////////////////////////////////// -// -// Class factory body -// -HRESULT __stdcall IOemCF::QueryInterface(const IID& iid, void** ppv) -{ - if ((iid == IID_IUnknown) || (iid == IID_IClassFactory)) - { - *ppv = static_cast<IOemCF*>(this) ; - } - else - { - WARNING(DLLTEXT("IOemCF::QueryInterface interface not supported.\r\n")); - *ppv = NULL ; - return E_NOINTERFACE ; - } - reinterpret_cast<IUnknown*>(*ppv)->AddRef() ; - return S_OK ; -} - -ULONG __stdcall IOemCF::AddRef() -{ - return InterlockedIncrement(&m_cRef) ; -} - -_At_(this, __drv_freesMem(object)) -ULONG __stdcall IOemCF::Release() -{ - ASSERT( 0 != m_cRef); - ULONG cRef = InterlockedDecrement(&m_cRef); - if (0 == cRef) - { - delete this; - - } - return cRef; -} - -// IClassFactory implementation -HRESULT __stdcall IOemCF::CreateInstance(IUnknown* pUnknownOuter, - const IID& iid, - void** ppv) -{ - //DbgPrint(DLLTEXT("Class factory:\t\tCreate component.")) ; - - if (ppv == NULL) - { - return E_POINTER; - } - *ppv = NULL; - - // Cannot aggregate. - if (pUnknownOuter != NULL) - { - return CLASS_E_NOAGGREGATION ; - } - - // Create component. - IOemUI* pOemCB = new IOemUI ; - if (pOemCB == NULL) - { - return E_OUTOFMEMORY ; - } - // Get the requested interface. - HRESULT hr = pOemCB->QueryInterface(iid, ppv) ; - - // Release the IUnknown pointer. - // (If QueryInterface failed, component will delete itself.) - pOemCB->Release() ; - return hr ; -} - -// LockServer -HRESULT __stdcall IOemCF::LockServer(BOOL bLock) -{ - if (bLock) - { - InterlockedIncrement(&g_cServerLocks) ; - } - else - { - InterlockedDecrement(&g_cServerLocks) ; - } - return S_OK ; -} - -/////////////////////////////////////////////////////////// -// -// Exported functions -// - - -// Can DLL unload now? -// -STDAPI DllCanUnloadNow() -{ - // - // To avoid leaving OEM DLL still in memory when Unidrv or Pscript drivers - // are unloaded, Unidrv and Pscript driver ignore the return value of - // DllCanUnloadNow of the OEM DLL, and always call FreeLibrary on the OEMDLL. - // - // If OEM DLL spins off a working thread that also uses the OEM DLL, the - // thread needs to call LoadLibrary and FreeLibraryAndExitThread, otherwise - // it may crash after Unidrv or Pscript calls FreeLibrary. - // - - if ((g_cComponents == 0) && (g_cServerLocks == 0)) - { - return S_OK ; - } - else - { - return S_FALSE; - } -} - -// -// Get class factory -// -STDAPI DllGetClassObject( - _In_ REFCLSID clsid, - _In_ REFIID iid, - _Outptr_ LPVOID* ppv) -{ - VERBOSE(DLLTEXT("DllGetClassObject:Create class factory.\r\n")); - - if (ppv == NULL) - { - return E_POINTER; - } - *ppv = NULL; - - // Can we create this component? - if (clsid != CLSID_OEMUI) - { - return CLASS_E_CLASSNOTAVAILABLE ; - } - - // Create class factory. - IOemCF* pFontCF = new IOemCF ; // Reference count set to 1 - // in constructor - if (pFontCF == NULL) - { - return E_OUTOFMEMORY ; - } - - // Get requested interface. - HRESULT hr = pFontCF->QueryInterface(iid, ppv) ; - pFontCF->Release() ; - - return hr ; -} - |
