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.
 
 
 
 
 
 

341 lines
8.7 KiB

#ifndef __LDMGR_HPP__
#define __LDMGR_HPP__
/*++
Copyright (C) 2000 Microsoft Corporation
All rights reserved.
Module Name:
ldmgr.hpp
Abstract:
This file contains the declararion of classes necessary to
encapsulate the declarations and defintions and prototypes
required for the RPC surrogate used to load 64 bit dlls from
within 32 bit apps.
Author:
Khaled Sedky (khaleds) 18-Jan-2000
Revision History:
--*/
#ifndef __LDERROR_HPP__
#include "lderror.hpp"
#endif
#ifndef __BASECLS_HPP__
#include "basecls.hpp"
#endif
#ifndef __PRTCFG_HPP__
#include "prtcfg.hpp"
#endif
#ifndef __DRVEVNT_HPP__
#include "drvevnt.hpp"
#endif
#ifndef __PRNTUIFN_HPP__
#include "prntuifn.hpp"
#endif
#ifndef __LPCMGR_HPP__
#include "lpcmgr.hpp"
#endif
#define MAX_CAPVAL DC_MEDIATYPES
#define APPNAME L"splwow64"
#define GDI_LPC_PORT_NAME L"\\RPC Control\\UmpdProxy"
#define ACTIVATION_CONTEXT_RESOURCE_ID 123
class TLoad64BitDllsMgr : public TClassID,
public TRefCntMgr ,
public TLd64BitDllsErrorHndlr,
public TPrinterDriver
{
public:
enum ELdMgrConstants
{
kMaxRPCPacketSize = 1024*1000
};
friend DWORD
TLoad64BitDllsMgr::
MonitorSrvrLifeExpiration(
IN PVOID pData
);
TLoad64BitDllsMgr(
OUT HRESULT *phRes = NULL
);
~TLoad64BitDllsMgr(
VOID
);
HRESULT
QueryInterface(
IN REFIID InterfaceID,
OUT PVOID *ppInterface
);
DWORD
Run();
VOID
RefreshLifeSpan(
VOID
);
BOOL
ExecuteMonitorOperation(
IN ULONG_PTR hWnd,
IN LPWSTR pszServerName,
IN LPWSTR pszUIDllName,
IN LPWSTR pszPortName,
IN EPortOp Index,
OUT PDWORD pErrorCode
);
int
DeviceCapabilities(
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
);
LONG
DocumentProperties(
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,
OUT PDWORD pErrorCode
);
LONG
PrintUIDocumentProperties(
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,
OUT PDWORD pErrorCode
);
VOID
IncUIRefCnt(
VOID
);
VOID
DecUIRefCnt(
VOID
);
DWORD
GetUIRefCnt(
VOID
)const;
DWORD
GetCurrSessionId(
VOID
) const;
struct SPORTADDTHREADDATA
{
PFNMONITORADD pMonFnAdd;
PFNMONITORFNS pMonFns;
HWND hWnd;
PCWSTR pszServerName;
PCWSTR pszMonitorName;
PCWSTR pszPortName;
PWSTR *ppszRetPortName;
HMODULE hLib;
HANDLE hActCtx;
ULONG_PTR lActCtx;
BOOL bActivated;
};
typedef struct SPORTADDTHREADDATA SPortAddThreadData;
struct SDOCPROPSTHREADDATA
{
HWND hWnd;
LPWSTR pszPrinterName;
PDWORD pTouchedDevModeSize;
PDWORD pClonedDevModeOutSize;
LPBYTE *ppClonedDevModeOut;
DWORD DevModeSize;
LPBYTE pDevMode;
TLoad64BitDllsMgr *pMgrInstance;
DWORD fMode;
DWORD fExclusionFlags;
DWORD ErrorCode;
LONG RetVal;
BOOL bClonedDevModeOutFill;
};
typedef struct SDOCPROPSTHREADDATA SDocPropsThreadData;
enum ETime
{
KOneMinute = 60000,
KTwoMinutes = 120000
};
protected:
DWORD
StartLdrRPCServer(
VOID
);
DWORD
StopLdrRPCServer(
VOID
);
static DWORD
MonitorSrvrLifeExpiration(
IN PVOID pData
);
static DWORD
AddPortUI(
IN PVOID pInThrdData
);
static DWORD
DeletePortUI(
IN PVOID pInThrdData
);
static DWORD
ConfigurePortUI(
IN PVOID pInThrdData
);
DWORD
InternalDocumentProperties(
IN PVOID pInThrdData
);
DWORD
InternalPrintUIDocumentProperties(
IN PVOID pInThrdData
);
BOOL
DevCapFillsOutput(
IN DWORD Capabilities
) const;
DWORD
CalcReqSizeForDevCaps(
IN DWORD CapNum,
IN DWORD Capabilites
) const;
DWORD
SpinPortOperationThread(
IN HWND hWnd,
IN LPWSTR pszServerName,
IN LPWSTR pszName,
IN PMONITORUI pMonitorUI,
IN EPortOp Index,
IN LPTHREAD_START_ROUTINE pThrdFn,
IN HMODULE hLib,
IN HANDLE hActCtx,
IN ULONG_PTR lActCtx,
IN BOOL bActivated
) const;
DWORD
GetMonitorUIActivationContext(
IN LPWSTR pszUIDllName,
IN OUT HANDLE *phActCtx,
IN OUT ULONG_PTR *plActCtx,
IN OUT BOOL *pActivated
) const;
DWORD
GetMonitorUIFullPath(
IN LPWSTR pszUIDllName,
IN OUT LPWSTR pszFullPath
) const;
VOID
ReleaseMonitorActivationContext(
IN HINSTANCE hLib ,
IN HANDLE hActCtx ,
IN ULONG_PTR lActCtx,
IN BOOL bActivated
) const;
private:
//
// Some helper functions internal to the class
//
VOID
LockSelf(
VOID
);
VOID
ReleaseSelf(
VOID
);
BOOL
StillAlive(
VOID
);
//
// The data encapsulated by the control.
// This control has no data pertinent to itself. It only
// encapsulates data pertinent to the synchronization of
// of the requesting clients and timing out the whole
// control . It also has a session ID which identifies its
// instantion across different sessions for Terminal Server.
// Added to it also is a Port connection handle for GDI UMPD
// thunking
//
DWORD m_CurrSessionId;
DWORD m_UIRefCnt;
DWORD m_ExpirationTime;
SYSTEMTIME m_LastTransactionTime;
CRITICAL_SECTION m_LdMgrLock;
};
#endif //__LDMGR_HPP__