summaryrefslogtreecommitdiff
path: root/print/OEM Printer Customization Plug-in Samples/C++/ThemeUI/intrface.cpp
diff options
context:
space:
mode:
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.cpp575
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 ;
-}
-