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.
125 lines
3.2 KiB
125 lines
3.2 KiB
#ifndef __UMPDHXX__
|
|
#define __UMPDHXX__
|
|
|
|
typedef struct ProxyPort
|
|
{
|
|
HANDLE PortHandle;
|
|
HANDLE SectionHandle;
|
|
RTL_CRITICAL_SECTION semPort;
|
|
KPBYTE ClientMemoryBase;
|
|
SIZE_T ClientMemorySize;
|
|
KPBYTE ServerMemoryBase;
|
|
KERNEL_INT_PTR ServerMemoryDelta;
|
|
ULONG ClientMemoryAllocSize;
|
|
} ProxyPort, *PProxyPort;
|
|
|
|
class PROXYPORT
|
|
{
|
|
private:
|
|
ProxyPort *pp;
|
|
|
|
public:
|
|
|
|
PROXYPORT(ULONGLONG inMaxSize);
|
|
PROXYPORT(ProxyPort *ppIn) {pp = ppIn; AcquirePortAccess();}
|
|
~PROXYPORT() {ReleasePortAccess();}
|
|
|
|
BOOL bValid() { return (pp != NULL); }
|
|
ProxyPort *GetPort() { return pp; }
|
|
void Close();
|
|
void Shutdown() { DELETECRITICALSECTION(&pp->semPort); }
|
|
|
|
|
|
void AcquirePortAccess()
|
|
{
|
|
ASSERTGDI(pp, "PROXYPORT:GetPortAccess() NULL psemPort\n");
|
|
if (pp)
|
|
{
|
|
ENTERCRITICALSECTION(&pp->semPort);
|
|
}
|
|
}
|
|
|
|
void ReleasePortAccess()
|
|
{
|
|
if (pp)
|
|
{
|
|
LEAVECRITICALSECTION(&pp->semPort);
|
|
}
|
|
}
|
|
|
|
void HeapInit()
|
|
{
|
|
pp->ClientMemoryAllocSize = 0;
|
|
}
|
|
|
|
SERVERPTR HeapAlloc(ULONG inSize);
|
|
|
|
CLIENTPTR ServerToClientPtr(SERVERPTR ptr)
|
|
{
|
|
return (ptr ? (CLIENTPTR)((PBYTE) ptr - pp->ServerMemoryDelta) : NULL);
|
|
}
|
|
|
|
BOOL ThunkMemBlock(KPBYTE * ptr, ULONG size);
|
|
BOOL ThunkStr(LPWSTR * ioLpstr);
|
|
|
|
|
|
PPORT_MESSAGE
|
|
InitMsg(PPROXYMSG Msg, SERVERPTR pvIn, ULONG cjIn, SERVERPTR pvOut, ULONG cjOut);
|
|
|
|
BOOL
|
|
CheckMsg(NTSTATUS Status, PPROXYMSG Msg, SERVERPTR pvOut, ULONG cjOut);
|
|
|
|
NTSTATUS
|
|
SendRequest(SERVERPTR pvIn, ULONG cjIn, SERVERPTR pvOut, ULONG cjOut);
|
|
|
|
KERNEL_PVOID
|
|
LoadDriver(PDRIVER_INFO_5W pDriverInfo, LPWSTR pwstrPrinterName, PRINTER_DEFAULTSW *pdefaults, HANDLE hPrinter32);
|
|
|
|
void
|
|
UnloadDriver(KERNEL_PVOID umpdCookie, HANDLE hPrinter32, BOOL bNotifySpooler);
|
|
|
|
int
|
|
DocumentEvent(KERNEL_PVOID umpdCookie,
|
|
HANDLE hPrinter32,
|
|
HDC hdc,
|
|
INT iEsc,
|
|
ULONG cjIn,
|
|
PVOID pulIn,
|
|
ULONG cjOut,
|
|
PVOID pulOut);
|
|
|
|
DWORD
|
|
StartDocPrinterW(KERNEL_PVOID umpdCookie,
|
|
HANDLE hPrinter32,
|
|
DWORD level,
|
|
LPBYTE pDocInfo);
|
|
|
|
BOOL
|
|
StartPagePrinter(KERNEL_PVOID umpdCookie, HANDLE hPrinter32);
|
|
|
|
BOOL
|
|
EndPagePrinter(KERNEL_PVOID umpdCookie, HANDLE hPrinter32);
|
|
|
|
BOOL
|
|
EndDocPrinter(KERNEL_PVOID umpdCookie, HANDLE hPrinter32);
|
|
|
|
BOOL
|
|
AbortPrinter(KERNEL_PVOID umpdCookie, HANDLE hPrinter32);
|
|
|
|
BOOL
|
|
ResetPrinterW(KERNEL_PVOID umpdCookie,HANDLE hPrinter32,PRINTER_DEFAULTSW *pPtrDef);
|
|
|
|
BOOL
|
|
QueryColorProfile(KERNEL_PVOID umpdCookie,
|
|
HANDLE hPrinter32,
|
|
PDEVMODEW pDevMode,
|
|
ULONG ulQueryMode,
|
|
PVOID pvProfileData,
|
|
ULONG* pcjProfileSize,
|
|
FLONG* pflProfileFlag);
|
|
};
|
|
|
|
extern "C" void vUMPDWow64Shutdown();
|
|
|
|
#endif
|
|
|