|
|
/*++
Copyright (c) 1990-1994 Microsoft Corporation All rights reserved
Module Name:
Router.h
Abstract:
Holds defs for router
Author:
Albert Ting (AlbertT) 18-Jan-94
Environment:
User Mode -Win32
Revision History:
--*/
typedef enum _ESTATUSCHANGE { STATUS_CHANGE_EMPTY = 0, // One of these is valid,
STATUS_CHANGE_FORMING = 1, // but they still need x^2.
STATUS_CHANGE_VALID = 2,
STATUS_CHANGE_CLOSING = 0x000100, // bitfield
STATUS_CHANGE_CLIENT = 0x000200, // Event valid (local pChange)
STATUS_CHANGE_ACTIVE = 0x000400, // Currently processing or on LL
STATUS_CHANGE_ACTIVE_REQ = 0x000800, // Needs to go on Linked List
STATUS_CHANGE_INFO = 0x001000, // Info requested.
STATUS_CHANGE_DISCARDED = 0x008000, // Discard locally
STATUS_CHANGE_DISCARDNOTED = 0x010000, // Discard noted on client
} ESTATUSCHANGE;
typedef struct _LINK *PLINK, *LPLINK;
typedef struct _LINK { PLINK pNext; } LINK;
VOID LinkAdd( PLINK pLink, PLINK* ppLinkHead);
VOID LinkDelete( PLINK pLink, PLINK* ppLinkHead);
#define CLUSTERHANDLE_SIGNATURE 0x6262
typedef struct _PRINTHANDLE *PPRINTHANDLE, *LPPRINTHANDLE;
typedef struct _CHANGEINFO { LINK Link; // Must be first item
PPRINTHANDLE pPrintHandle; DWORD fdwOptions; DWORD fdwFilterFlags; // Original filter of flags to watch
DWORD fdwStatus; // Status from providor
DWORD dwPollTime; DWORD dwPollTimeLeft; BOOL bResetPollTime;
DWORD fdwFlags; PPRINTER_NOTIFY_INFO pPrinterNotifyInfo;
} CHANGEINFO, *PCHANGEINFO;
typedef struct _CHANGE { LINK Link; // Must be first item
DWORD signature; ESTATUSCHANGE eStatus; DWORD dwColor; DWORD cRef; LPWSTR pszLocalMachine; CHANGEINFO ChangeInfo; DWORD dwCount; // number of notifications
HANDLE hEvent; // Event for local notification
DWORD fdwFlags; DWORD fdwChangeFlags; // Accumulated changes
DWORD dwPrinterRemote; // Remote printer handle (ID only)
HANDLE hNotifyRemote; // Remote notification handle
} CHANGE, *PCHANGE, *LPCHANGE;
#define CHANGEHANDLE_SIGNATURE 0x6368
typedef struct _NOTIFY *PNOTIFY, *LPNOTIFY;
#define NOTIFYHANDLE_SIGNATURE 0x6e6f
typedef struct _PROVIDOR { struct _PROVIDOR *pNext; LPWSTR lpName; HANDLE hModule; FARPROC fpInitialize; PRINTPROVIDOR PrintProvidor; } PROVIDOR, *LPPROVIDOR;
typedef struct _PRINTHANDLE { DWORD signature; // Must be first (match _NOTIFY)
LPPROVIDOR pProvidor; HANDLE hPrinter; PCHANGE pChange; PNOTIFY pNotify; PPRINTHANDLE pNext; // List of handles waiting for replys
DWORD fdwReplyTypes; // Types of replys being used.
HANDLE hFileSpooler; LPWSTR szTempSpoolFile; LPWSTR pszPrinter; DWORD dwUniqueSessionID; // DWORD passed as a hprinter to remote machines
// for notifications. Cant be 0 or 0xffffffff when in use.
} PRINTHANDLE;
#define PRINTHANDLE_SIGNATURE 0x6060
typedef struct _GDIHANDLE { DWORD signature; LPPROVIDOR pProvidor; HANDLE hGdi; } GDIHANDLE, *PGDIHANDLE, *LPGDIHANDLE;
#define GDIHANDLE_SIGNATURE 0x6161
typedef struct _ROUTERCACHE { LPWSTR pPrinterName; BOOL bAvailable; LPPROVIDOR pProvidor; SYSTEMTIME st; } ROUTERCACHE, *PROUTERCACHE;
#define ROUTERCACHE_DEFAULT_MAX 16
LPPROVIDOR FindEntryinRouterCache( LPWSTR pPrinterName );
DWORD AddEntrytoRouterCache( LPWSTR pPrinterName, LPPROVIDOR pProvidor );
VOID DeleteEntryfromRouterCache( LPWSTR pPrinterName );
DWORD RouterIsOlderThan( DWORD i, DWORD j );
LPBYTE CopyPrinterNameToPrinterInfo4( LPWSTR pServerName, LPWSTR pPrinterName, LPBYTE pPrinter, LPBYTE pEnd);
BOOL RouterOpenPrinterW( LPWSTR pPrinterName, HANDLE *pHandle, LPPRINTER_DEFAULTS pDefault, LPBYTE pSplClientInfo, DWORD dwLevel, BOOL bLocalPrintProvidor );
VOID FixupOldProvidor( LPPRINTPROVIDOR pProvidor );
extern BOOL Initialized; extern DWORD dwUpgradeFlag; extern CRITICAL_SECTION RouterNotifySection; extern LPWSTR pszSelfMachine; extern HANDLE hEventInit; extern LPPROVIDOR pLocalProvidor; extern LPWSTR szEnvironment; extern LPWSTR szLocalSplDll; extern WCHAR *szDevices; extern LPWSTR szPrintKey; extern LPWSTR szRegistryProvidors; extern LPWSTR szOrder; extern DWORD gbFailAllocs;
#ifdef __cplusplus
extern "C" WCHAR szMachineName[MAX_COMPUTERNAME_LENGTH+3]; #else
extern WCHAR szMachineName[MAX_COMPUTERNAME_LENGTH+3]; #endif
extern SERVICE_STATUS_HANDLE ghSplHandle;
LPWSTR AppendOrderEntry( LPWSTR szOrderString, DWORD cbStringSize, LPWSTR szOrderEntry, LPDWORD pcbBytesReturned );
LPWSTR RemoveOrderEntry( LPWSTR szOrderString, DWORD cbStringSize, LPWSTR szOrderEntry, LPDWORD pcbBytesReturned );
BOOL WPCInit();
VOID WPCDestroy();
BOOL ThreadInit();
VOID ThreadDestroy();
VOID RundownPrinterChangeNotification( HANDLE hNotify);
VOID FreePrinterHandle( PPRINTHANDLE pPrintHandle);
BOOL FreeChange( PCHANGE pChange);
VOID FreePrinterChangeInfo( PCHANGEINFO pChangeInfo);
BOOL DeleteSubKeyTree( HKEY ParentHandle, WCHAR SubKeyName[] );
BOOL ThreadNotify( LPPRINTHANDLE pPrintHandle);
BOOL NotifyNeeded( PCHANGE pChange);
VOID HandlePollNotifications();
DWORD GetNetworkIdWorker( HKEY hKeyDevices, LPWSTR pDeviceName);
VOID UpdateSignificantError( DWORD dwNewError, PDWORD pdwOldError );
#define EnterRouterSem() EnterCriticalSection(&RouterNotifySection)
#define LeaveRouterSem() LeaveCriticalSection(&RouterNotifySection)
#define RouterInSem()
#define RouterOutSem()
|