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.
783 lines
24 KiB
783 lines
24 KiB
/*++
|
|
Copyright (C) 2000 Microsoft Corporation
|
|
All rights reserved.
|
|
|
|
Module Name:
|
|
ldfuncs.cxx
|
|
|
|
Abstract:
|
|
This file contains the implementation of all the RPC methods
|
|
supported by the surrogate process and that can be called from a client app.
|
|
|
|
Author:
|
|
Khaled Sedky (khaleds) 18-Jan-2000
|
|
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
#include "precomp.h"
|
|
#pragma hdrstop
|
|
|
|
#ifndef __LDFUNCS_HPP__
|
|
#include "ldfuncs.hpp"
|
|
#endif
|
|
|
|
#ifndef __LDMGR_HPP__
|
|
#include "ldmgr.hpp"
|
|
#endif
|
|
|
|
#ifndef __LDINTERFACES_HPP__
|
|
#include "ldintrfcs.hpp"
|
|
#endif
|
|
|
|
extern TLoad64BitDllsMgr *pGLdrObj;
|
|
|
|
/*++
|
|
Function Name:
|
|
RPCSplWOW64RefreshLifeSpan
|
|
|
|
Description:
|
|
Closing down the window between a client connecting and the server
|
|
dieing
|
|
|
|
|
|
Parameters:
|
|
None
|
|
|
|
Return Value
|
|
Always 0
|
|
--*/
|
|
DWORD
|
|
RPCSplWOW64RefreshLifeSpan(
|
|
)
|
|
{
|
|
|
|
pGLdrObj->RefreshLifeSpan();
|
|
|
|
return 0;
|
|
}
|
|
|
|
DWORD
|
|
RPCSplWOW64GetProcessID(
|
|
)
|
|
{
|
|
return GetCurrentProcessId();
|
|
}
|
|
|
|
|
|
|
|
/*++
|
|
Function Name:
|
|
RPCSplWOW64GetProcessHndl
|
|
|
|
Description:
|
|
This function returns the process handle of the surrogate
|
|
process to winspool.drv (client in this case). The handle
|
|
is important for the client to monitor the server process
|
|
and know when it dies
|
|
|
|
Parameters:
|
|
ProcessId : The process id of the client
|
|
ErrorCode : contains the error code in case of failure
|
|
|
|
Return Value
|
|
return the Server Process Handle relative to the client
|
|
process
|
|
--*/
|
|
ULONG_PTR
|
|
RPCSplWOW64GetProcessHndl(
|
|
IN DWORD ProcessId,
|
|
OUT PDWORD pErrorCode
|
|
)
|
|
{
|
|
HANDLE hTargetProcess;
|
|
HANDLE hDup = NULL;
|
|
|
|
*pErrorCode = ERROR_SUCCESS;
|
|
|
|
pGLdrObj->RefreshLifeSpan();
|
|
|
|
if(hTargetProcess = OpenProcess(PROCESS_DUP_HANDLE,
|
|
TRUE,
|
|
(DWORD)ProcessId))
|
|
{
|
|
if(!DuplicateHandle(GetCurrentProcess(),
|
|
GetCurrentProcess(),
|
|
hTargetProcess,
|
|
&hDup,
|
|
0,
|
|
FALSE,
|
|
DUPLICATE_SAME_ACCESS))
|
|
{
|
|
*pErrorCode = GetLastError();
|
|
}
|
|
CloseHandle(hTargetProcess);
|
|
}
|
|
else
|
|
{
|
|
*pErrorCode = GetLastError();
|
|
}
|
|
|
|
return (ULONG_PTR)hDup;
|
|
}
|
|
|
|
|
|
/*++
|
|
Function Name:
|
|
RPCSplWOW64AddPort
|
|
|
|
Description:
|
|
|
|
Parameters:
|
|
|
|
Return Value
|
|
--*/
|
|
BOOL
|
|
RPCSplWOW64AddPort(
|
|
IN ULONG_PTR hWnd,
|
|
IN LPWSTR pszServerName,
|
|
IN LPWSTR pszUIDllName,
|
|
IN LPWSTR pszMonitorName,
|
|
OUT PDWORD pErrorCode
|
|
)
|
|
{
|
|
return(pGLdrObj->ExecuteMonitorOperation(hWnd,
|
|
pszServerName,
|
|
pszUIDllName,
|
|
pszMonitorName,
|
|
KAddPortOp,
|
|
pErrorCode));
|
|
}
|
|
|
|
|
|
/*++
|
|
Function Name:
|
|
RPCSplWOW64ConfigurePort
|
|
|
|
Description:
|
|
|
|
Parameters:
|
|
|
|
Return Value
|
|
--*/
|
|
BOOL
|
|
RPCSplWOW64ConfigurePort(
|
|
IN ULONG_PTR hWnd,
|
|
IN LPWSTR pszServerName,
|
|
IN LPWSTR pszUIDllName,
|
|
IN LPWSTR pszPortName,
|
|
OUT PDWORD pErrorCode
|
|
)
|
|
{
|
|
return(pGLdrObj->ExecuteMonitorOperation(hWnd,
|
|
pszServerName,
|
|
pszUIDllName,
|
|
pszPortName,
|
|
KConfigurePortOp,
|
|
pErrorCode));
|
|
}
|
|
|
|
|
|
/*++
|
|
Function Name:
|
|
RPCSplWOW64DeletePort
|
|
|
|
Description:
|
|
|
|
Parameters:
|
|
|
|
Return Value
|
|
--*/
|
|
BOOL
|
|
RPCSplWOW64DeletePort(
|
|
IN ULONG_PTR hWnd,
|
|
IN LPWSTR pszServerName,
|
|
IN LPWSTR pszUIDllName,
|
|
IN LPWSTR pszPortName,
|
|
OUT PDWORD pErrorCode
|
|
)
|
|
{
|
|
return(pGLdrObj->ExecuteMonitorOperation(hWnd,
|
|
pszServerName,
|
|
pszUIDllName,
|
|
pszPortName,
|
|
KDeletePortOp,
|
|
pErrorCode));
|
|
}
|
|
|
|
|
|
/*++
|
|
Function Name:
|
|
RPCSplWOW64DeviceCapabilities
|
|
|
|
Description:
|
|
|
|
Parameters:
|
|
|
|
Return Value
|
|
--*/
|
|
int
|
|
RPCSplWOW64DeviceCapabilities(
|
|
IN LPWSTR pszDeviceName,
|
|
IN LPWSTR pszPortName,
|
|
IN WORD Capabilites,
|
|
IN DWORD DevModeSize,
|
|
IN LPBYTE pDevMode,
|
|
IN BOOL bClonedOutputFill,
|
|
OUT PDWORD pClonedOutputSize,
|
|
OUT LPBYTE *ppClonedOutput,
|
|
OUT PDWORD pErrorCode
|
|
)
|
|
{
|
|
|
|
return(pGLdrObj->DeviceCapabilities(pszDeviceName,
|
|
pszPortName,
|
|
Capabilites,
|
|
DevModeSize,
|
|
pDevMode,
|
|
bClonedOutputFill,
|
|
pClonedOutputSize,
|
|
ppClonedOutput,
|
|
pErrorCode));
|
|
}
|
|
|
|
|
|
/*++
|
|
Function Name:
|
|
RPCSplWOW64DocumentProperties
|
|
|
|
Description:
|
|
|
|
Parameters:
|
|
|
|
Return Value
|
|
--*/
|
|
LONG
|
|
RPCSplWOW64DocumentProperties(
|
|
IN ULONG_PTR hWnd,
|
|
IN LPWSTR pszPrinterName,
|
|
OUT PDWORD pTouchedDevModeSize,
|
|
OUT PDWORD pClonedDevModeOutSize,
|
|
OUT LPBYTE *ppClonedDevModeOut,
|
|
IN DWORD DevModeSize,
|
|
IN LPBYTE pDevMode,
|
|
IN BOOL bClonedDevModeOutFill,
|
|
IN DWORD fMode,
|
|
IN PDWORD pErrorCode
|
|
)
|
|
{
|
|
return(pGLdrObj->DocumentProperties(hWnd,
|
|
pszPrinterName,
|
|
pTouchedDevModeSize,
|
|
pClonedDevModeOutSize,
|
|
ppClonedDevModeOut,
|
|
DevModeSize,
|
|
pDevMode,
|
|
bClonedDevModeOutFill,
|
|
fMode,
|
|
pErrorCode));
|
|
}
|
|
|
|
/*++
|
|
Function Name:
|
|
RPCSplWOW64DocumentProperties
|
|
|
|
Description:
|
|
|
|
Parameters:
|
|
|
|
Return Value
|
|
--*/
|
|
LONG
|
|
RPCSplWOW64PrintUIDocumentProperties(
|
|
IN ULONG_PTR hWnd,
|
|
IN LPWSTR pszPrinterName,
|
|
OUT PDWORD pTouchedDevModeSize,
|
|
OUT PDWORD pClonedDevModeOutSize,
|
|
OUT LPBYTE *ppClonedDevModeOut,
|
|
IN DWORD DevModeSize,
|
|
IN LPBYTE pDevMode,
|
|
IN BOOL bClonedDevModeOutFill,
|
|
IN DWORD fMode,
|
|
IN DWORD fExclusionFlags,
|
|
IN PDWORD pErrorCode
|
|
)
|
|
{
|
|
return(pGLdrObj->PrintUIDocumentProperties(hWnd,
|
|
pszPrinterName,
|
|
pTouchedDevModeSize,
|
|
pClonedDevModeOutSize,
|
|
ppClonedDevModeOut,
|
|
DevModeSize,
|
|
pDevMode,
|
|
bClonedDevModeOutFill,
|
|
fMode,
|
|
fExclusionFlags,
|
|
pErrorCode));
|
|
}
|
|
|
|
/*++
|
|
Function Name:
|
|
RPCSplWOW64SPrinterProperties
|
|
|
|
Description:
|
|
Wrapper for TPrinterCfgMgr :: PrinterProperties
|
|
|
|
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
|
|
RPCSplWOW64PrinterProperties(
|
|
IN ULONG_PTR hWnd,
|
|
IN LPCWSTR pszPrinterName,
|
|
IN DWORD Flag,
|
|
OUT PDWORD pErrorCode
|
|
)
|
|
{
|
|
TPrinterCfgMgr *pPrntrCfgMgrObj = NULL;
|
|
BOOL RetVal = FALSE;
|
|
HRESULT hRes;
|
|
|
|
if((hRes = pGLdrObj->QueryInterface(IID_PRINTERCONFIGURATION,
|
|
reinterpret_cast<VOID **>(&pPrntrCfgMgrObj))) == S_OK)
|
|
{
|
|
SPLASSERT(pPrntrCfgMgrObj);
|
|
|
|
if(pPrntrCfgMgrObj)
|
|
{
|
|
RetVal = pPrntrCfgMgrObj->PrinterProperties(hWnd,
|
|
pszPrinterName,
|
|
Flag,
|
|
pErrorCode);
|
|
if(!RetVal)
|
|
{
|
|
DBGMSG(DBG_WARN, ("TPrinterEventMgr::SpoolerPrinterEvent failed with %u\n",*pErrorCode));
|
|
}
|
|
pPrntrCfgMgrObj->Release();
|
|
}
|
|
else
|
|
{
|
|
*pErrorCode = pGLdrObj->GetLastErrorFromHRESULT(E_NOINTERFACE);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
DBGMSG(DBG_WARN, ("RPCSplWOW64PrinterProperties failed in Instantiating a Print Event Object with %u\n",hRes));
|
|
*pErrorCode = pGLdrObj->GetLastErrorFromHRESULT(hRes);
|
|
}
|
|
return RetVal;
|
|
}
|
|
|
|
|
|
|
|
/*++
|
|
Function Name:
|
|
RPCSplWOW64SpoolerPrinterEvent
|
|
|
|
Description:
|
|
Wrapper for TPrinterEventMgr::SpoolerPrinterEvent
|
|
|
|
Parameters:
|
|
PrinterName : The name of the printer involved
|
|
PrinterEvent : What happened
|
|
Flags : Misc. flag bits
|
|
lParam : Event specific parameters
|
|
|
|
Return Value:
|
|
BOOL : TRUE in case of success
|
|
: FALSE in case of failure
|
|
--*/
|
|
BOOL
|
|
RPCSplWOW64SpoolerPrinterEvent(
|
|
IN LPWSTR pszPrinterName,
|
|
IN int PrinterEvent,
|
|
IN DWORD Flags,
|
|
IN LPARAM lParam,
|
|
OUT PDWORD pErrorCode
|
|
)
|
|
{
|
|
TPrinterEventMgr *pPrntrEvntMgrObj = NULL;
|
|
BOOL RetVal = FALSE;
|
|
HRESULT hRes;
|
|
|
|
if((hRes = pGLdrObj->QueryInterface(IID_PRINTEREVENT,
|
|
reinterpret_cast<VOID **>(&pPrntrEvntMgrObj))) == S_OK)
|
|
{
|
|
SPLASSERT(pPrntrEvntMgrObj);
|
|
|
|
RetVal = pPrntrEvntMgrObj->SpoolerPrinterEvent(pszPrinterName,
|
|
PrinterEvent,
|
|
Flags,
|
|
lParam,
|
|
pErrorCode);
|
|
if (!RetVal)
|
|
{
|
|
DBGMSG(DBG_WARN, ("TPrinterEventgMgr :: PrinterProperties failed with %u\n",*pErrorCode));
|
|
}
|
|
pPrntrEvntMgrObj->Release();
|
|
}
|
|
else
|
|
{
|
|
DBGMSG(DBG_WARN, ("RPCSplWOW64SpoolerPrinterEvent failed in Instantiating a Print Event Object with %u\n",hRes));
|
|
*pErrorCode = pGLdrObj->GetLastErrorFromHRESULT(hRes);
|
|
}
|
|
return RetVal;
|
|
}
|
|
|
|
|
|
/*++
|
|
Function Name:
|
|
RPCSplWOW64DocumentEvent
|
|
|
|
Description:
|
|
Wrapper for TPrinterEventMgr::DocumentEvent
|
|
|
|
Parameters:
|
|
PrinterName : The name of the printer involved
|
|
InDC : The printer DC.
|
|
EscapeCode : Why this function is called
|
|
InSize, : Size of the input buffer
|
|
InBuf, : Pointer to the input buffer
|
|
OutSize, : Size of the output buffer
|
|
OutBuf, : Pointer to the output buffer
|
|
ErrorCode : output Last Error from operation
|
|
|
|
|
|
Return Value:
|
|
DOCUMENTEVENT_SUCCESS : success
|
|
DOCUMENTEVENT_UNSUPPORTED : EscapeCode is not supported
|
|
DOCUMENTEVENT_FAILURE : an error occured
|
|
--*/
|
|
int
|
|
RPCSplWOW64DocumentEvent(
|
|
IN LPWSTR pszPrinterName,
|
|
IN ULONG_PTR InDC,
|
|
IN int EscapeCode,
|
|
IN DWORD InSize,
|
|
IN LPBYTE pInBuf,
|
|
OUT PDWORD pOutSize,
|
|
OUT LPBYTE* ppOutBuf,
|
|
OUT PDWORD pErrorCode
|
|
)
|
|
{
|
|
TPrinterEventMgr* pPrntrEvntMgrObj = NULL;
|
|
int RetVal = -1;
|
|
HRESULT hRes;
|
|
|
|
if((hRes = pGLdrObj->QueryInterface(IID_PRINTEREVENT,
|
|
reinterpret_cast<VOID **>(&pPrntrEvntMgrObj))) == S_OK)
|
|
{
|
|
SPLASSERT(pPrntrEvntMgrObj);
|
|
|
|
RetVal = pPrntrEvntMgrObj->DocumentEvent(pszPrinterName,
|
|
InDC,
|
|
EscapeCode,
|
|
InSize,
|
|
pInBuf,
|
|
pOutSize,
|
|
ppOutBuf,
|
|
pErrorCode);
|
|
if (RetVal == -1)
|
|
{
|
|
DBGMSG(DBG_WARN, ("TPrinterEventMgr::DocumentEvent failed with %u\n",*pErrorCode));
|
|
}
|
|
pPrntrEvntMgrObj->Release();
|
|
}
|
|
else
|
|
{
|
|
DBGMSG(DBG_WARN, ("RPCSplWOW64DocumentEvent failed in Instantiating a Print Event Object with %u\n",hRes));
|
|
*pErrorCode = pGLdrObj->GetLastErrorFromHRESULT(hRes);
|
|
}
|
|
return RetVal;
|
|
}
|
|
|
|
/*++
|
|
Function Name:
|
|
RPCSplWOW64PrintUIQueueCreate
|
|
|
|
Description:
|
|
Wrapper for TPrintUIMgr::QueueCreate
|
|
|
|
Parameters:
|
|
hWnd : Parent hwnd.
|
|
PrinterName : Printer name.
|
|
CmdShow : Show command.
|
|
lParam : currently unused.
|
|
|
|
Return Value:
|
|
DWORD : Error Code in case of Failure
|
|
ERROR_SUCCESS in case of success
|
|
--*/
|
|
DWORD
|
|
RPCSplWOW64PrintUIQueueCreate(
|
|
IN ULONG_PTR hWnd,
|
|
IN LPCWSTR pszPrinterName,
|
|
IN INT CmdShow,
|
|
IN LPARAM lParam
|
|
)
|
|
{
|
|
TPrintUIMgr* pPrintUIMgrObj = NULL;
|
|
DWORD ErrorCode = ERROR_SUCCESS;
|
|
HRESULT hRes;
|
|
|
|
if((hRes = pGLdrObj->QueryInterface(IID_PRINTUIOPERATIONS,
|
|
reinterpret_cast<VOID **>(&pPrintUIMgrObj))) == S_OK)
|
|
{
|
|
SPLASSERT(pPrintUIMgrObj);
|
|
|
|
ErrorCode = pPrintUIMgrObj->QueueCreate(reinterpret_cast<HWND>(hWnd),
|
|
pszPrinterName,
|
|
CmdShow,
|
|
static_cast<LPARAM>(lParam)
|
|
);
|
|
if (ErrorCode != ERROR_SUCCESS)
|
|
{
|
|
DBGMSG(DBG_WARN, ("TPrintUIMgr::QueueCreate failed with %u\n",ErrorCode));
|
|
}
|
|
|
|
pPrintUIMgrObj->Release();
|
|
}
|
|
else
|
|
{
|
|
DBGMSG(DBG_WARN, ("RPCSplWOW64PrintUIQueueCreate failed in Instantiating a Print UI object with %u\n",hRes));
|
|
ErrorCode = pGLdrObj->GetLastErrorFromHRESULT(hRes);
|
|
}
|
|
return ErrorCode;
|
|
}
|
|
|
|
/*++
|
|
Function Name:
|
|
RPCSplWOW64PrintUIPrinterPropPages
|
|
|
|
Description:
|
|
Wrapper for TPrintUIMgr::PrinterPropPages
|
|
|
|
Parameters:
|
|
hWnd : Parent hwnd.
|
|
PrinterName : Printer name.
|
|
CmdShow : Show command.
|
|
lParam : currently unused.
|
|
|
|
Return Value:
|
|
DWORD : Error Code in case of Failure
|
|
ERROR_SUCCESS in case of success
|
|
--*/
|
|
DWORD
|
|
RPCSplWOW64PrintUIPrinterPropPages(
|
|
IN ULONG_PTR hWnd,
|
|
IN LPCWSTR pszPrinterName,
|
|
IN INT CmdShow,
|
|
IN LPARAM lParam
|
|
)
|
|
{
|
|
TPrintUIMgr* pPrintUIMgrObj = NULL;
|
|
DWORD ErrorCode = ERROR_SUCCESS;
|
|
HRESULT hRes;
|
|
|
|
if((hRes = pGLdrObj->QueryInterface(IID_PRINTUIOPERATIONS,
|
|
reinterpret_cast<VOID **>(&pPrintUIMgrObj))) == S_OK)
|
|
{
|
|
SPLASSERT(pPrintUIMgrObj);
|
|
|
|
ErrorCode = pPrintUIMgrObj->PrinterPropPages(reinterpret_cast<HWND>(hWnd),
|
|
pszPrinterName,
|
|
CmdShow,
|
|
static_cast<LPARAM>(lParam)
|
|
);
|
|
if (ErrorCode != ERROR_SUCCESS)
|
|
{
|
|
DBGMSG(DBG_WARN, ("TPrintUIMgr::PrinterPropPages failed with %u\n",ErrorCode));
|
|
}
|
|
|
|
pPrintUIMgrObj->Release();
|
|
}
|
|
else
|
|
{
|
|
DBGMSG(DBG_WARN, ("RPCSplWOW64PrintUIPrinterPropPages failed in Instantiating a Print UI object with %u\n",hRes));
|
|
ErrorCode = pGLdrObj->GetLastErrorFromHRESULT(hRes);
|
|
}
|
|
return ErrorCode;
|
|
}
|
|
|
|
|
|
/*++
|
|
Function Name:
|
|
RPCSplWOW64PrintUIDocumentDefaults
|
|
|
|
Description:
|
|
Wrapper for TPrintUIMgr::DocumentDefaults
|
|
|
|
Parameters:
|
|
hWnd : Parent hwnd.
|
|
PrinterName : Printer name.
|
|
CmdShow : Show command.
|
|
lParam : currently unused.
|
|
|
|
Return Value:
|
|
DWORD : Error Code in case of Failure
|
|
ERROR_SUCCESS in case of success
|
|
--*/
|
|
DWORD
|
|
RPCSplWOW64PrintUIDocumentDefaults(
|
|
IN ULONG_PTR hWnd,
|
|
IN LPCWSTR pszPrinterName,
|
|
IN INT CmdShow,
|
|
IN LPARAM lParam
|
|
)
|
|
{
|
|
TPrintUIMgr* pPrintUIMgrObj = NULL;
|
|
DWORD ErrorCode = ERROR_SUCCESS;
|
|
HRESULT hRes;
|
|
|
|
if((hRes = pGLdrObj->QueryInterface(IID_PRINTUIOPERATIONS,
|
|
reinterpret_cast<VOID **>(&pPrintUIMgrObj))) == S_OK)
|
|
{
|
|
SPLASSERT(pPrintUIMgrObj);
|
|
|
|
ErrorCode = pPrintUIMgrObj->DocumentDefaults(reinterpret_cast<HWND>(hWnd),
|
|
pszPrinterName,
|
|
CmdShow,
|
|
static_cast<LPARAM>(lParam)
|
|
);
|
|
|
|
if (ErrorCode != ERROR_SUCCESS)
|
|
{
|
|
DBGMSG(DBG_WARN, ("TPrintUIMgr::DocumentDefaults failed with %u\n",ErrorCode));
|
|
}
|
|
|
|
pPrintUIMgrObj->Release();
|
|
}
|
|
else
|
|
{
|
|
DBGMSG(DBG_WARN, ("RPCSplWOW64PrintUIDocumentDefaults failed in Instantiating a Print UI object with %u\n",hRes));
|
|
ErrorCode = pGLdrObj->GetLastErrorFromHRESULT(hRes);
|
|
}
|
|
return ErrorCode;
|
|
}
|
|
|
|
/*++
|
|
|
|
Function Name:
|
|
RPCSplWOW64PrintUIPrinterSetup
|
|
|
|
Description:
|
|
Wrapper for TPrintUIMgr::PrinterSetup.
|
|
|
|
Parameters:
|
|
hwnd - Parent window.
|
|
uAction - Action requested (defined in windows\inc16\msprintx.h)
|
|
cchPrinterName - Length of pszPrinterName buffer.
|
|
pszPrinterName - Input setup printer name, Output pointer to new printer name
|
|
pcchPrinterName - New length of pszPrinterName on return.
|
|
pszServerName - Name of server that printer is on.
|
|
|
|
Return Value:
|
|
|
|
DWORD : Error Code in case of Failure
|
|
ERROR_SUCCESS in case of success
|
|
--*/
|
|
DWORD
|
|
RPCSplWOW64PrintUIPrinterSetup(
|
|
IN ULONG_PTR hWnd,
|
|
IN UINT uAction,
|
|
IN UINT cchPrinterName,
|
|
IN DWORD PrinterNameSize,
|
|
IN OUT byte* pszPrinterName,
|
|
OUT UINT* pcchPrinterName,
|
|
IN LPCWSTR pszServerName
|
|
)
|
|
{
|
|
TPrintUIMgr* pPrintUIMgrObj = NULL;
|
|
DWORD ErrorCode = ERROR_SUCCESS;
|
|
HRESULT hRes;
|
|
|
|
if((hRes = pGLdrObj->QueryInterface(IID_PRINTUIOPERATIONS,
|
|
reinterpret_cast<VOID **>(&pPrintUIMgrObj))) == S_OK)
|
|
{
|
|
SPLASSERT(pPrintUIMgrObj);
|
|
|
|
ErrorCode = pPrintUIMgrObj->PrinterSetup(reinterpret_cast<HWND>(hWnd),
|
|
uAction,
|
|
cchPrinterName,
|
|
reinterpret_cast<LPWSTR>(pszPrinterName),
|
|
pcchPrinterName,
|
|
pszServerName
|
|
);
|
|
if (ErrorCode != ERROR_SUCCESS)
|
|
{
|
|
DBGMSG(DBG_WARN, ("TPrintUIMgr::PritnerSetup failed with %u\n",ErrorCode));
|
|
}
|
|
|
|
pPrintUIMgrObj->Release();
|
|
}
|
|
else
|
|
{
|
|
DBGMSG(DBG_WARN, ("RPCSplWOW64PrintUIPrinterSetup failed in Instantiating a Print UI object with %u\n",hRes));
|
|
ErrorCode = pGLdrObj->GetLastErrorFromHRESULT(hRes);
|
|
}
|
|
return ErrorCode;
|
|
}
|
|
|
|
|
|
/*++
|
|
Function Name:
|
|
RPCSplWOW64PrintUIServerPropPages
|
|
|
|
Description:
|
|
Wrapper for TPrintUIMgr::ServerPropPages
|
|
|
|
Parameters:
|
|
hWnd : Parent hwnd.
|
|
PrinterName : Server name.
|
|
CmdShow : Show command.
|
|
lParam : currently unused.
|
|
|
|
Return Value:
|
|
DWORD : Error Code in case of Failure
|
|
ERROR_SUCCESS in case of success
|
|
--*/
|
|
DWORD
|
|
RPCSplWOW64PrintUIServerPropPages(
|
|
IN ULONG_PTR hWnd,
|
|
IN LPCWSTR pszServerName,
|
|
IN INT CmdShow,
|
|
IN LPARAM lParam
|
|
)
|
|
{
|
|
TPrintUIMgr* pPrintUIMgrObj = NULL;
|
|
DWORD ErrorCode = ERROR_SUCCESS;
|
|
HRESULT hRes;
|
|
|
|
if((hRes = pGLdrObj->QueryInterface(IID_PRINTUIOPERATIONS,
|
|
reinterpret_cast<VOID **>(&pPrintUIMgrObj))) == S_OK)
|
|
{
|
|
SPLASSERT(pPrintUIMgrObj);
|
|
|
|
ErrorCode = pPrintUIMgrObj->ServerPropPages(reinterpret_cast<HWND>(hWnd),
|
|
pszServerName,
|
|
CmdShow,
|
|
static_cast<LPARAM>(lParam)
|
|
);
|
|
if (ErrorCode != ERROR_SUCCESS)
|
|
{
|
|
DBGMSG(DBG_WARN, ("TPrintUIMgr::ServerPropPages failed with %u\n",ErrorCode));
|
|
}
|
|
|
|
pPrintUIMgrObj->Release();
|
|
}
|
|
else
|
|
{
|
|
DBGMSG(DBG_WARN, ("RPCSplWOW64PrintUIServerPropPages failed in Instantiating a Print UI object with %u\n",hRes));
|
|
ErrorCode = pGLdrObj->GetLastErrorFromHRESULT(hRes);
|
|
}
|
|
return ErrorCode;
|
|
}
|
|
|