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.
|
|
/*++
Copyright (C) 2000 Microsoft Corporation All rights reserved. Module Name: prtcfg.cxx Abstract: This file contains the implementation for the Printer and Document Property class Author: Khaled Sedky (khaleds) 18-Feb-2000 Revision History: --*/ #include "precomp.h"
#pragma hdrstop
#ifndef __LDFUNCS_HPP__
#include "ldfuncs.hpp"
#endif
#ifndef __LDMGR_HPP__
#include "ldmgr.hpp"
#endif
/* ------------------------------------ */ /* Implemetation of class TPrinterCfgMgr */ /* ------------------------------------ */
/*++
Function Name: TPrintUIMgr :: TPrintUIMgr Description: Contructor of the Printer (Driver) configuration manager Parameters: None Return Value: None --*/ TPrinterCfgMgr:: TPrinterCfgMgr( TLoad64BitDllsMgr *pIpLdrObj ) : m_pLdrObj(pIpLdrObj), TClassID("TPrinterCfgMgr") { m_pLdrObj->AddRef(); }
/*++
Function Name: TPrintUIMgr :: TPrintUIMgr Description: Destructor of the Printer (Driver) configuration manager Parameters: None Return Value: None --*/ TPrinterCfgMgr:: ~TPrinterCfgMgr( VOID ) { m_pLdrObj->Release(); }
/*++
Function Name: TPrintUIMgr :: PrinterProperties Description: Displays a Printer-properties property sheet for the specific printer Parameters: hWnd : Parent Window Printername : Printer Name Flag : Access permissions ErrorCode : Win32 error in case of failure Return Value: BOOL : FALSE for failure TRUE for success --*/ BOOL TPrinterCfgMgr :: PrinterProperties( IN ULONG_PTR hWnd, IN LPCWSTR pszPrinterName, IN DWORD Flag, OUT PDWORD pErrorCode ) { DEVICEPROPERTYHEADER DPHdr; DWORD Result; PFNDEVICEPROPSHEETS pfnDevicePropSheets; HANDLE hPrinter = NULL; HMODULE hWinSpool = NULL; BOOL RetVal = FALSE; RPC_STATUS RpcStatus;
if((RpcStatus = RpcImpersonateClient(0)) == RPC_S_OK) { if(hWinSpool = LoadLibrary(L"winspool.drv")) { if(pfnDevicePropSheets = reinterpret_cast<PFNDEVICEPROPSHEETS>(GetProcAddress(hWinSpool, "DevicePropertySheets"))) { if(OpenPrinter(const_cast<LPWSTR>(pszPrinterName), &hPrinter,NULL)) { PFNCALLCOMMONPROPSHEETUI pfnCallCommonPropSheeUI = NULL;
DPHdr.cbSize = sizeof(DPHdr); DPHdr.hPrinter = hPrinter; DPHdr.Flags = (WORD)Flag; DPHdr.pszPrinterName = const_cast<LPWSTR>(pszPrinterName);
if(pfnCallCommonPropSheeUI= reinterpret_cast<PFNCALLCOMMONPROPSHEETUI>(GetProcAddress(hWinSpool, (LPCSTR) MAKELPARAM(218, 0)))) { m_pLdrObj->IncUIRefCnt(); { if(pfnCallCommonPropSheeUI(reinterpret_cast<HWND>(hWnd), pfnDevicePropSheets, (LPARAM)&DPHdr, (LPDWORD)&Result) < 0) { RetVal = FALSE; *pErrorCode = GetLastError(); } else { RetVal = TRUE; } PostMessage(reinterpret_cast<HWND>(hWnd), WM_ENDPRINTERPROPERTIES, (WPARAM)RetVal, (LPARAM)*pErrorCode); } m_pLdrObj->DecUIRefCnt(); } else { *pErrorCode = GetLastError(); } CloseHandle(hPrinter); } else { *pErrorCode = GetLastError(); } } else { *pErrorCode = GetLastError(); } FreeLibrary(hWinSpool); } else { *pErrorCode = GetLastError(); }
RpcStatus = RpcRevertToSelf(); } else { *pErrorCode = RpcStatus; }
return RetVal; }
|